added guardian letters with chat and multiple answer functionalities

This commit is contained in:
2026-09-20 16:12:45 +02:00
parent 67c935c05b
commit 2423c1a75e
68 changed files with 8348 additions and 226 deletions
@@ -0,0 +1,53 @@
import 'dart:typed_data';
import '../../../../../api/demo/data/demo_parent_letters.dart';
import '../../../../../api/demo/demo_mode.dart';
import '../../../../../api/marianumconnect/queries/parent_letters/get_parent_letter.dart';
import '../../../../../api/marianumconnect/queries/parent_letters/get_parent_letter_attachment.dart';
import '../../../../../api/marianumconnect/queries/parent_letters/parent_letter_models.dart';
import '../../../../../api/marianumconnect/queries/parent_letters/post_parent_letter_thread_message.dart';
import '../../../../../api/marianumconnect/queries/parent_letters/submit_parent_letter_response.dart';
import '../../../infrastructure/repository/repository.dart';
import '../bloc/parent_letter_state.dart';
/// Split from [ParentLettersRepository] because the loadable base binds a
/// repository to its state type. Writes never reach this class in demo mode
/// (the views guard them).
class ParentLetterRepository extends Repository<ParentLetterState> {
Future<ParentLetterDetail> getLetter(String letterId) {
if (DemoMode.active) {
return Future.value(DemoParentLetters.detail(letterId));
}
return GetParentLetter().run(letterId);
}
Future<ParentLetterDetail> submitResponse({
required String letterId,
required String childId,
required List<ParentLetterAnswer> answers,
Uint8List? signaturePng,
}) => SubmitParentLetterResponse().run(
letterId: letterId,
childId: childId,
answers: answers,
signaturePng: signaturePng,
);
Future<ParentLetterThreadMessage> sendThreadMessage({
required String letterId,
required String body,
required String clientMessageId,
}) => PostParentLetterThreadMessage().run(
letterId: letterId,
body: body,
clientMessageId: clientMessageId,
);
Future<Uint8List> getAttachment({
required String letterId,
required String attachmentId,
}) => GetParentLetterAttachment().run(
letterId: letterId,
attachmentId: attachmentId,
);
}
@@ -0,0 +1,22 @@
import '../../../../../api/demo/data/demo_parent_letters.dart';
import '../../../../../api/demo/demo_mode.dart';
import '../../../../../api/marianumconnect/queries/parent_letters/get_parent_letters.dart';
import '../../../../../api/marianumconnect/queries/parent_letters/mark_parent_letter_read.dart';
import '../../../../../api/marianumconnect/queries/parent_letters/parent_letter_models.dart';
import '../../../infrastructure/repository/repository.dart';
import '../bloc/parent_letters_state.dart';
class ParentLettersRepository extends Repository<ParentLettersState> {
Future<ParentLetterListResponse> getLetters({String? before}) {
if (DemoMode.active) return Future.value(DemoParentLetters.list());
return GetParentLetters().run(before: before);
}
Future<void> markRead(String letterId) {
if (DemoMode.active) {
DemoParentLetters.markRead(letterId);
return Future.value();
}
return MarkParentLetterRead().run(letterId);
}
}