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 (только активные)
Future<StudySession?> getSessionBySessionId(String sessionId) {
return (selectActive()..where((s) => s.sessionId.equals(sessionId)))
.getSingleOrNull();
Future<StudySession?> getSessionBySessionId(String sessionId) async {
final query = selectActive()
..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 ====================
/// Получить план подписки по ID
Future<SubscriptionPlan?> getPlanById(String id) {
return (select(
subscriptionPlans,
)..where((p) => p.id.equals(id))).getSingleOrNull();
Future<SubscriptionPlan?> getPlanById(String id) async {
final query = select(subscriptionPlans)
..where((p) => p.id.equals(id))
..limit(1);
final results = await query.get();
return results.isNotEmpty ? results.first : null;
}
/// Получить все планы подписки
@ -41,22 +44,28 @@ class SubscriptionDao extends DatabaseAccessor<AppDatabase>
// ==================== UserSubscriptions ====================
/// Получить подписку пользователя
Future<UserSubscription?> getUserSubscription(String userId) {
return (select(userSubscriptions)
..where((us) => us.userId.equals(userId))
..orderBy([(us) => OrderingTerm.desc(us.finish)]))
.getSingleOrNull();
Future<UserSubscription?> getUserSubscription(String userId) async {
final query = select(userSubscriptions)
..where((us) => us.userId.equals(userId))
..orderBy([(us) => OrderingTerm.desc(us.finish)])
..limit(1);
final results = await query.get();
return results.isNotEmpty ? results.first : null;
}
/// Получить активную подписку пользователя
Future<UserSubscription?> getActiveSubscription(String userId) async {
final now = PgDateTime(DateTime.now());
return (select(userSubscriptions)
..where((us) => us.userId.equals(userId))
..where((us) => us.start.isSmallerThanValue(now))
..where((us) => us.finish.isBiggerThanValue(now))
..orderBy([(us) => OrderingTerm.desc(us.finish)]))
.getSingleOrNull();
final query = select(userSubscriptions)
..where((us) => us.userId.equals(userId))
..where((us) => us.start.isSmallerThanValue(now))
..where((us) => us.finish.isBiggerThanValue(now))
..orderBy([(us) => OrderingTerm.desc(us.finish)])
..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 ====================
/// Получить пользователя по ID
Future<User?> getUserById(String id) {
return (select(users)..where((u) => u.id.equals(id))).getSingleOrNull();
Future<User?> getUserById(String id) async {
final query = select(users)
..where((u) => u.id.equals(id))
..limit(1);
final results = await query.get();
return results.isNotEmpty ? results.first : null;
}
/// Получить пользователя с UserData
@ -180,11 +185,13 @@ class UserDao extends DatabaseAccessor<AppDatabase> with _$UserDaoMixin {
// ==================== Tokens ====================
/// Получить токен по значению (только активные)
Future<Token?> getTokenByValue(String tokenValue) {
return (select(
tokens,
)..where((t) => t.token.equals(tokenValue) & t.isDeleted.equals(false)))
.getSingleOrNull();
Future<Token?> getTokenByValue(String tokenValue) async {
final query = select(tokens)
..where((t) => t.token.equals(tokenValue) & t.isDeleted.equals(false))
..limit(1);
final results = await query.get();
return results.isNotEmpty ? results.first : null;
}
/// Получить токен по externalUserId (только активные)
@ -203,14 +210,17 @@ class UserDao extends DatabaseAccessor<AppDatabase> with _$UserDaoMixin {
}
/// Получить токен пользователя (только активные)
Future<Token?> getTokenByUserId(String userId) {
return (select(tokens)
..where((t) => t.userId.equals(userId) & t.isDeleted.equals(false))
..where(
(t) => t.expires.isBiggerThanValue(PgDateTime(DateTime.now())),
)
..orderBy([(t) => OrderingTerm.desc(t.created)]))
.getSingleOrNull();
Future<Token?> getTokenByUserId(String userId) async {
final query = select(tokens)
..where((t) => t.userId.equals(userId) & t.isDeleted.equals(false))
..where(
(t) => t.expires.isBiggerThanValue(PgDateTime(DateTime.now())),
)
..orderBy([(t) => OrderingTerm.desc(t.created)])
..limit(1);
final results = await query.get();
return results.isNotEmpty ? results.first : null;
}
/// Создать токен