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> getAllSessions() async { final rows = await _dao.getAllSessions(); return rows.map(AnalysisMapper.sessionToEntity).toList(); } @override Future getSession(String id) async { final row = await _dao.getSession(id); return row == null ? null : AnalysisMapper.sessionToEntity(row); } @override Future 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 deleteSession(String id) async { await _dao.deleteSession(id); } @override Future> getAnnotations(String sessionId) async { final rows = await _dao.getAnnotations(sessionId); return rows.map(AnalysisMapper.annotationToEntity).toList(); } @override Future 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 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 deleteAnnotation(String id) async { await _dao.deleteAnnotation(id); } }