import 'package:vital_local_database/core/interface/queryable.dart'; import 'package:vital_local_database/core/sqlite/repository.dart'; import 'package:vitalapp/database/db.dart'; import 'package:vitalapp/database/entities/exam.dart'; import 'interfaces/exam.dart'; class ExamRepository extends BaseDbRepository implements IExamRepository { ExamRepository(super.database); @override ExamEntity createEntityInstance() => ExamEntity(); @override Future singleByCodeWithUserCode( String code, String userCode) async { final entity = await db.repositories.exam.queryable .where((x) => [ x.isValid.equals(true), x.userCode.equals(userCode), x.code.equals(code), ]) .first(); return entity; } @override Future> queryPatientAllList( String patientCode, String userCode, {List? keys}) async { var query = db.repositories.exam.queryable.where((x) => [ x.isValid.equals(true), x.userCode.equals(userCode), x.patientCode.equals(patientCode), ]); if (keys != null && keys.isNotEmpty) { query = query.and((x) => x.templateKey.inEqueals(keys)); } final entities = await query.toList(); return entities; } @override Future> queryPatientPagedList( String patientCode, String userCode, int pageIndex, {int pageSize = 50}) async { var query = db.repositories.exam.queryable.where((x) => [ x.isValid.equals(true), x.userCode.equals(userCode), x.patientCode.equals(patientCode), ]); final count = await query.count(); final offset = pageSize * (pageIndex - 1); final entities = await query .orderBy((x) => x.updateTime, DbOrderByType.desc) .orderBy((x) => x.createTime, DbOrderByType.desc) .offset(offset) .limit(pageSize) .toList(); final result = DbPagedList( data: entities, totalCount: count, pageIndex: pageIndex, pageSize: pageSize, ); return result; } }