back fix
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-03 17:42:05 +03:00
parent 958bedf65a
commit a36af9d4bd
2 changed files with 26 additions and 19 deletions

View file

@ -1,5 +1,4 @@
import 'package:drift/drift.dart'; import 'package:drift/drift.dart';
import 'package:drift_postgres/drift_postgres.dart';
import 'package:mnemo_cards_backend/database/database.dart'; import 'package:mnemo_cards_backend/database/database.dart';
/// Миксин для добавления soft delete функциональности в DAO /// Миксин для добавления soft delete функциональности в DAO
@ -45,10 +44,14 @@ mixin SoftDeleteMixin<T extends Table, D> on DatabaseAccessor<AppDatabase> {
/// ///
/// Возвращает null если запись не найдена или удалена. /// Возвращает null если запись не найдена или удалена.
Future<D?> getActiveById(String id) async { Future<D?> getActiveById(String id) async {
return (selectActive()..where((t) { final query = selectActive()
..where((t) {
final idColumn = (t as dynamic).id; final idColumn = (t as dynamic).id;
return idColumn.equals(id); return idColumn.equals(id);
})) })
.getSingleOrNull(); ..limit(1);
final results = await query.get();
return results.isNotEmpty ? results.first : null;
} }
} }

View file

@ -23,11 +23,13 @@ class UserDao extends DatabaseAccessor<AppDatabase> with _$UserDaoMixin {
Future<UserWithData?> getUserWithDataById(String id) async { Future<UserWithData?> getUserWithDataById(String id) async {
final query = select(users).join([ final query = select(users).join([
leftOuterJoin(userDatas, userDatas.userId.equalsExp(users.id)), leftOuterJoin(userDatas, userDatas.userId.equalsExp(users.id)),
])..where(users.id.equals(id)); ])..where(users.id.equals(id))
..limit(1);
final result = await query.getSingleOrNull(); final results = await query.get();
if (result == null) return null; if (results.isEmpty) return null;
final result = results.first;
return UserWithData( return UserWithData(
user: result.readTable(users), user: result.readTable(users),
userData: result.readTableOrNull(userDatas), userData: result.readTableOrNull(userDatas),
@ -183,16 +185,18 @@ class UserDao extends DatabaseAccessor<AppDatabase> with _$UserDaoMixin {
} }
/// Получить токен по externalUserId (только активные) /// Получить токен по externalUserId (только активные)
Future<Token?> getTokenByExternalUserId(String externalUserId) { Future<Token?> getTokenByExternalUserId(String externalUserId) async {
return (select(tokens) final query = select(tokens)
..where( ..where(
(t) => (t) =>
t.externalUserId.equals(externalUserId) & t.externalUserId.equals(externalUserId) &
t.isDeleted.equals(false), t.isDeleted.equals(false),
) )
..orderBy([(t) => OrderingTerm.desc(t.created)]) ..orderBy([(t) => OrderingTerm.desc(t.created)])
..limit(1)) ..limit(1);
.getSingleOrNull();
final results = await query.get();
return results.isNotEmpty ? results.first : null;
} }
/// Получить токен пользователя (только активные) /// Получить токен пользователя (только активные)