83 lines
2.7 KiB
Dart
83 lines
2.7 KiB
Dart
// Package imports:
|
||
import 'package:drift/drift.dart';
|
||
import 'package:remever/common/functions.dart';
|
||
import 'package:remever/database/database.dart';
|
||
import 'package:remever/database/tables.dart';
|
||
import 'package:remever/models/create_ticket_dto.dart';
|
||
|
||
part 'tickets_dao.g.dart';
|
||
|
||
@DriftAccessor(tables: <Type>[Tickets])
|
||
class TicketsDao extends DatabaseAccessor<AppDatabase> with _$TicketsDaoMixin {
|
||
///
|
||
/// Репозиторий для работы с билетами
|
||
///
|
||
TicketsDao(super.attachedDatabase);
|
||
|
||
/// Получение билетов из базы данных
|
||
Stream<List<Ticket>> getTickets(String collectionId) {
|
||
try {
|
||
return db.managers.tickets
|
||
.filter((f) => f.collectionId.id(collectionId))
|
||
.watch();
|
||
} catch (e, st) {
|
||
logger.logError('Ошибка в методе getTickets', e, st);
|
||
|
||
throw ('EXEPTION');
|
||
}
|
||
}
|
||
|
||
/// Удаление билета
|
||
Future<void> removeTicket(String id) async {
|
||
try {
|
||
await db.transaction(() {
|
||
return db.managers.tickets.filter((f) => f.id(id)).delete();
|
||
});
|
||
} catch (e, st) {
|
||
logger.logError('Ошибка в методе deleteTicket', e, st);
|
||
}
|
||
}
|
||
|
||
/// Создание билета
|
||
Future<void> createTicket(CreateTicketDto dto) async {
|
||
try {
|
||
final TicketsCompanion companion = TicketsCompanion.insert(
|
||
question: dto.question!,
|
||
answer: dto.answer!,
|
||
collectionId: dto.collection!.id,
|
||
questionImage: Value<Uint8List?>(dto.questionImage),
|
||
answerImage: Value<Uint8List?>(dto.answerImage),
|
||
);
|
||
|
||
await db.managers.tickets.create((o) => companion);
|
||
|
||
if (dto.needRevert != null && dto.needRevert!) {
|
||
/// Создаем обратную карточку где ответ == вопрос и вопрос == ответ
|
||
|
||
final TicketsCompanion revertCompanion = TicketsCompanion.insert(
|
||
answer: dto.question!,
|
||
question: dto.answer!,
|
||
collectionId: dto.collection!.id,
|
||
answerImage: Value<Uint8List?>(dto.questionImage),
|
||
questionImage: Value<Uint8List?>(dto.answerImage),
|
||
);
|
||
|
||
await db.managers.tickets.create((o) => revertCompanion);
|
||
}
|
||
} catch (e, st) {
|
||
logger.logError('Ошибка в методе createTicket', e, st);
|
||
}
|
||
}
|
||
|
||
/// Перенос билета с одной коллекции в другую
|
||
Future<void> transferTicket(String ticketId, String newCollectionId) async {
|
||
try {
|
||
await db.managers.tickets
|
||
.filter((f) => f.id(ticketId))
|
||
.update((o) => o(collectionId: Value<String>(newCollectionId)));
|
||
} catch (e, st) {
|
||
logger.logError('Ошибка в методе transferTicket', e, st);
|
||
}
|
||
}
|
||
}
|