fixes
Some checks are pending
Backend CI / test (push) Waiting to run
Backend CI / build (push) Blocked by required conditions
Deploy Mnemo Cards / Deploy Backend (push) Waiting to run
Deploy Mnemo Cards / Deploy Web App (push) Blocked by required conditions
Deploy Mnemo Cards / Final Verification (push) Blocked by required conditions

This commit is contained in:
Dmitry 2026-01-07 00:11:44 +03:00
parent c2e213d40e
commit 08143b9e30
3 changed files with 56 additions and 33 deletions

View file

@ -21,9 +21,13 @@ class StatisticsDao extends DatabaseAccessor<AppDatabase>
} }
/// Получить сессию по sessionId (только активные) /// Получить сессию по sessionId (только активные)
Future<StudySession?> getSessionBySessionId(String sessionId) { Future<StudySession?> getSessionBySessionId(String sessionId) async {
return (selectActive()..where((s) => s.sessionId.equals(sessionId))) final query = selectActive()
.getSingleOrNull(); ..where((s) => s.sessionId.equals(sessionId))
..limit(1);
final results = await query.get();
return results.isNotEmpty ? results.first : null;
} }
/// Получить активные сессии пользователя (не завершенные и не удаленные) /// Получить активные сессии пользователя (не завершенные и не удаленные)

View file

@ -14,10 +14,13 @@ class SubscriptionDao extends DatabaseAccessor<AppDatabase>
// ==================== SubscriptionPlans ==================== // ==================== SubscriptionPlans ====================
/// Получить план подписки по ID /// Получить план подписки по ID
Future<SubscriptionPlan?> getPlanById(String id) { Future<SubscriptionPlan?> getPlanById(String id) async {
return (select( final query = select(subscriptionPlans)
subscriptionPlans, ..where((p) => p.id.equals(id))
)..where((p) => p.id.equals(id))).getSingleOrNull(); ..limit(1);
final results = await query.get();
return results.isNotEmpty ? results.first : null;
} }
/// Получить все планы подписки /// Получить все планы подписки
@ -41,22 +44,28 @@ class SubscriptionDao extends DatabaseAccessor<AppDatabase>
// ==================== UserSubscriptions ==================== // ==================== UserSubscriptions ====================
/// Получить подписку пользователя /// Получить подписку пользователя
Future<UserSubscription?> getUserSubscription(String userId) { Future<UserSubscription?> getUserSubscription(String userId) async {
return (select(userSubscriptions) final query = select(userSubscriptions)
..where((us) => us.userId.equals(userId)) ..where((us) => us.userId.equals(userId))
..orderBy([(us) => OrderingTerm.desc(us.finish)])) ..orderBy([(us) => OrderingTerm.desc(us.finish)])
.getSingleOrNull(); ..limit(1);
final results = await query.get();
return results.isNotEmpty ? results.first : null;
} }
/// Получить активную подписку пользователя /// Получить активную подписку пользователя
Future<UserSubscription?> getActiveSubscription(String userId) async { Future<UserSubscription?> getActiveSubscription(String userId) async {
final now = PgDateTime(DateTime.now()); final now = PgDateTime(DateTime.now());
return (select(userSubscriptions) final query = select(userSubscriptions)
..where((us) => us.userId.equals(userId)) ..where((us) => us.userId.equals(userId))
..where((us) => us.start.isSmallerThanValue(now)) ..where((us) => us.start.isSmallerThanValue(now))
..where((us) => us.finish.isBiggerThanValue(now)) ..where((us) => us.finish.isBiggerThanValue(now))
..orderBy([(us) => OrderingTerm.desc(us.finish)])) ..orderBy([(us) => OrderingTerm.desc(us.finish)])
.getSingleOrNull(); ..limit(1);
final results = await query.get();
return results.isNotEmpty ? results.first : null;
} }
/// Проверить, есть ли у пользователя активная подписка /// Проверить, есть ли у пользователя активная подписка

View file

@ -15,8 +15,13 @@ class UserDao extends DatabaseAccessor<AppDatabase> with _$UserDaoMixin {
// ==================== Users ==================== // ==================== Users ====================
/// Получить пользователя по ID /// Получить пользователя по ID
Future<User?> getUserById(String id) { Future<User?> getUserById(String id) async {
return (select(users)..where((u) => u.id.equals(id))).getSingleOrNull(); final query = select(users)
..where((u) => u.id.equals(id))
..limit(1);
final results = await query.get();
return results.isNotEmpty ? results.first : null;
} }
/// Получить пользователя с UserData /// Получить пользователя с UserData
@ -180,11 +185,13 @@ class UserDao extends DatabaseAccessor<AppDatabase> with _$UserDaoMixin {
// ==================== Tokens ==================== // ==================== Tokens ====================
/// Получить токен по значению (только активные) /// Получить токен по значению (только активные)
Future<Token?> getTokenByValue(String tokenValue) { Future<Token?> getTokenByValue(String tokenValue) async {
return (select( final query = select(tokens)
tokens, ..where((t) => t.token.equals(tokenValue) & t.isDeleted.equals(false))
)..where((t) => t.token.equals(tokenValue) & t.isDeleted.equals(false))) ..limit(1);
.getSingleOrNull();
final results = await query.get();
return results.isNotEmpty ? results.first : null;
} }
/// Получить токен по externalUserId (только активные) /// Получить токен по externalUserId (только активные)
@ -203,14 +210,17 @@ class UserDao extends DatabaseAccessor<AppDatabase> with _$UserDaoMixin {
} }
/// Получить токен пользователя (только активные) /// Получить токен пользователя (только активные)
Future<Token?> getTokenByUserId(String userId) { Future<Token?> getTokenByUserId(String userId) async {
return (select(tokens) final query = select(tokens)
..where((t) => t.userId.equals(userId) & t.isDeleted.equals(false)) ..where((t) => t.userId.equals(userId) & t.isDeleted.equals(false))
..where( ..where(
(t) => t.expires.isBiggerThanValue(PgDateTime(DateTime.now())), (t) => t.expires.isBiggerThanValue(PgDateTime(DateTime.now())),
) )
..orderBy([(t) => OrderingTerm.desc(t.created)])) ..orderBy([(t) => OrderingTerm.desc(t.created)])
.getSingleOrNull(); ..limit(1);
final results = await query.get();
return results.isNotEmpty ? results.first : null;
} }
/// Создать токен /// Создать токен