106 lines
2.9 KiB
Dart
106 lines
2.9 KiB
Dart
import 'package:drift/drift.dart';
|
|
import 'package:trainhub_flutter/core/utils/id_generator.dart';
|
|
import 'package:trainhub_flutter/data/database/app_database.dart';
|
|
import 'package:trainhub_flutter/data/database/daos/analysis_dao.dart';
|
|
import 'package:trainhub_flutter/data/mappers/analysis_mapper.dart';
|
|
import 'package:trainhub_flutter/domain/entities/analysis_session.dart';
|
|
import 'package:trainhub_flutter/domain/entities/annotation.dart';
|
|
import 'package:trainhub_flutter/domain/repositories/analysis_repository.dart';
|
|
|
|
class AnalysisRepositoryImpl implements AnalysisRepository {
|
|
final AnalysisDao _dao;
|
|
|
|
AnalysisRepositoryImpl(this._dao);
|
|
|
|
@override
|
|
Future<List<AnalysisSessionEntity>> getAllSessions() async {
|
|
final rows = await _dao.getAllSessions();
|
|
return rows.map(AnalysisMapper.sessionToEntity).toList();
|
|
}
|
|
|
|
@override
|
|
Future<AnalysisSessionEntity?> getSession(String id) async {
|
|
final row = await _dao.getSession(id);
|
|
return row == null ? null : AnalysisMapper.sessionToEntity(row);
|
|
}
|
|
|
|
@override
|
|
Future<AnalysisSessionEntity> createSession(
|
|
String name, String videoPath) async {
|
|
final String id = IdGenerator.generate();
|
|
await _dao.insertSession(
|
|
AnalysisSessionsCompanion.insert(
|
|
id: id,
|
|
name: name,
|
|
videoPath: Value(videoPath),
|
|
date: DateTime.now().toIso8601String(),
|
|
),
|
|
);
|
|
final row = await _dao.getSession(id);
|
|
return AnalysisMapper.sessionToEntity(row!);
|
|
}
|
|
|
|
@override
|
|
Future<void> deleteSession(String id) async {
|
|
await _dao.deleteSession(id);
|
|
}
|
|
|
|
@override
|
|
Future<List<AnnotationEntity>> getAnnotations(String sessionId) async {
|
|
final rows = await _dao.getAnnotations(sessionId);
|
|
return rows.map(AnalysisMapper.annotationToEntity).toList();
|
|
}
|
|
|
|
@override
|
|
Future<AnnotationEntity> addAnnotation({
|
|
required String sessionId,
|
|
required String name,
|
|
required String description,
|
|
required double startTime,
|
|
required double endTime,
|
|
required String color,
|
|
}) async {
|
|
final String id = IdGenerator.generate();
|
|
await _dao.insertAnnotation(
|
|
AnnotationsCompanion.insert(
|
|
id: id,
|
|
sessionId: sessionId,
|
|
name: Value(name),
|
|
description: Value(description),
|
|
startTime: startTime,
|
|
endTime: endTime,
|
|
color: Value(color),
|
|
),
|
|
);
|
|
return AnnotationEntity(
|
|
id: id,
|
|
sessionId: sessionId,
|
|
startTime: startTime,
|
|
endTime: endTime,
|
|
name: name,
|
|
description: description,
|
|
color: color,
|
|
);
|
|
}
|
|
|
|
@override
|
|
Future<void> updateAnnotation({
|
|
required String id,
|
|
required String name,
|
|
required String description,
|
|
required String color,
|
|
}) async {
|
|
await _dao.updateAnnotation(
|
|
id: id,
|
|
name: name,
|
|
description: description,
|
|
color: color,
|
|
);
|
|
}
|
|
|
|
@override
|
|
Future<void> deleteAnnotation(String id) async {
|
|
await _dao.deleteAnnotation(id);
|
|
}
|
|
}
|