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_postgres/drift_postgres.dart';
import 'package:mnemo_cards_backend/database/database.dart';
/// Миксин для добавления soft delete функциональности в DAO
@ -45,10 +44,14 @@ mixin SoftDeleteMixin<T extends Table, D> on DatabaseAccessor<AppDatabase> {
///
/// Возвращает null если запись не найдена или удалена.
Future<D?> getActiveById(String id) async {
return (selectActive()..where((t) {
final query = selectActive()
..where((t) {
final idColumn = (t as dynamic).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 {
final query = select(users).join([
leftOuterJoin(userDatas, userDatas.userId.equalsExp(users.id)),
])..where(users.id.equals(id));
])..where(users.id.equals(id))
..limit(1);
final result = await query.getSingleOrNull();
if (result == null) return null;
final results = await query.get();
if (results.isEmpty) return null;
final result = results.first;
return UserWithData(
user: result.readTable(users),
userData: result.readTableOrNull(userDatas),
@ -183,16 +185,18 @@ class UserDao extends DatabaseAccessor<AppDatabase> with _$UserDaoMixin {
}
/// Получить токен по externalUserId (только активные)
Future<Token?> getTokenByExternalUserId(String externalUserId) {
return (select(tokens)
Future<Token?> getTokenByExternalUserId(String externalUserId) async {
final query = select(tokens)
..where(
(t) =>
t.externalUserId.equals(externalUserId) &
t.isDeleted.equals(false),
)
..orderBy([(t) => OrderingTerm.desc(t.created)])
..limit(1))
.getSingleOrNull();
..limit(1);
final results = await query.get();
return results.isNotEmpty ? results.first : null;
}
/// Получить токен пользователя (только активные)