/
rorikstr
/
multiberry-backend
Обзор
Документация
Войти
/
rorikstr
/
multiberry-backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/db/consents.rs
94 строки
2 KB
Rorik Star Platinum
(feat) balance
07 ноя 2025, 21:22
07 ноя 2025, 21:22
aeb9514
Код
Авторство
О чём код?
// src/db/consents.rs // Database operations for consent management use sqlx::PgPool; use chrono::{DateTime, Utc}; use tracing::{info}; pub struct StoredConsent { pub user_id: String, pub bank_code: String, pub consent_id: String, pub expires_at: DateTime<Utc>, } pub async fn store_consent( pool: &PgPool, user_id: &str, bank_code: &str, consent_id: &str, expires_at: DateTime<Utc>, ) -> Result<(), sqlx::Error> { sqlx::query!( r#" INSERT INTO user_consents (user_id, bank_code, consent_id, expires_at) VALUES ($1, $2, $3, $4) ON CONFLICT (user_id, bank_code) DO UPDATE SET consent_id = $3, expires_at = $4, created_at = NOW() "#, user_id, bank_code, consent_id, expires_at ) .execute(pool) .await?; Ok(()) } pub async fn get_valid_consent( pool: &PgPool, user_id: &str, bank_code: &str, ) -> Result<Option<String>, sqlx::Error> { let result = sqlx::query!( r#" SELECT consent_id FROM user_consents WHERE user_id = $1 AND bank_code = $2 AND expires_at > NOW() AND status = 'active' "#, user_id, bank_code ) .fetch_optional(pool) .await?; Ok(result.map(|r| r.consent_id)) } pub async fn get_first_valid_consent( pool: &PgPool, bank_code: &str, ) -> Result<Option<String>, sqlx::Error> { let result = sqlx::query!( r#" SELECT consent_id FROM user_consents WHERE bank_code = $1 AND expires_at > NOW() AND status = 'active' LIMIT 1 "#, bank_code ) .fetch_optional(pool) .await?; Ok(result.map(|r| r.consent_id)) } pub async fn delete_consent( pool: &PgPool, consent_id: &str, ) -> Result<(), sqlx::Error> { info!("🗑️ Deleting consent from DB: {}", consent_id); sqlx::query!( "DELETE FROM user_consents WHERE consent_id = $1", consent_id ) .execute(pool) .await?; info!("✅ Consent deleted from DB"); Ok(()) }