diff --git a/mnemo_cards_backend/lib/database/daos/statistics_dao.dart b/mnemo_cards_backend/lib/database/daos/statistics_dao.dart index 4c76ee7..2901d9b 100644 --- a/mnemo_cards_backend/lib/database/daos/statistics_dao.dart +++ b/mnemo_cards_backend/lib/database/daos/statistics_dao.dart @@ -21,9 +21,13 @@ class StatisticsDao extends DatabaseAccessor } /// Получить сессию по sessionId (только активные) - Future getSessionBySessionId(String sessionId) { - return (selectActive()..where((s) => s.sessionId.equals(sessionId))) - .getSingleOrNull(); + Future 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; } /// Получить активные сессии пользователя (не завершенные и не удаленные) diff --git a/mnemo_cards_backend/lib/database/daos/subscription_dao.dart b/mnemo_cards_backend/lib/database/daos/subscription_dao.dart index 5b05241..c00a664 100644 --- a/mnemo_cards_backend/lib/database/daos/subscription_dao.dart +++ b/mnemo_cards_backend/lib/database/daos/subscription_dao.dart @@ -14,10 +14,13 @@ class SubscriptionDao extends DatabaseAccessor // ==================== SubscriptionPlans ==================== /// Получить план подписки по ID - Future getPlanById(String id) { - return (select( - subscriptionPlans, - )..where((p) => p.id.equals(id))).getSingleOrNull(); + Future 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 // ==================== UserSubscriptions ==================== /// Получить подписку пользователя - Future getUserSubscription(String userId) { - return (select(userSubscriptions) - ..where((us) => us.userId.equals(userId)) - ..orderBy([(us) => OrderingTerm.desc(us.finish)])) - .getSingleOrNull(); + Future 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 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; } /// Проверить, есть ли у пользователя активная подписка diff --git a/mnemo_cards_backend/lib/database/daos/user_dao.dart b/mnemo_cards_backend/lib/database/daos/user_dao.dart index 1b54863..0af4a70 100644 --- a/mnemo_cards_backend/lib/database/daos/user_dao.dart +++ b/mnemo_cards_backend/lib/database/daos/user_dao.dart @@ -15,8 +15,13 @@ class UserDao extends DatabaseAccessor with _$UserDaoMixin { // ==================== Users ==================== /// Получить пользователя по ID - Future getUserById(String id) { - return (select(users)..where((u) => u.id.equals(id))).getSingleOrNull(); + Future 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 with _$UserDaoMixin { // ==================== Tokens ==================== /// Получить токен по значению (только активные) - Future getTokenByValue(String tokenValue) { - return (select( - tokens, - )..where((t) => t.token.equals(tokenValue) & t.isDeleted.equals(false))) - .getSingleOrNull(); + Future 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 with _$UserDaoMixin { } /// Получить токен пользователя (только активные) - Future 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 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; } /// Создать токен