Untitled

 avatar
unknown
plain_text
a year ago
3.4 kB
9
Indexable
import 'package:cafe/data/sync/sync_server_repository.dart';
import 'package:cafe/models/group_models/get_all_group_model.dart';
import 'package:cafe/models/group_models/get_selected_group.dart';
import 'package:cafe/models/survey_models/survey_list_model.dart';

class SyncRepository extends SyncServerRepository {
  static final SyncRepository _instance = SyncRepository._internal();
  factory SyncRepository() => _instance;
  SyncRepository._internal();

  Future<bool> syncDataFromServer() async {
    try {
      await getDependencyLess();
      await getGroups();
      await getSurveys();
      return true;
    } catch (err, str) {
      print(err);
      print(str);
      return false;
    }
  }

  Future<void> getGroups() async {
    final List<GetAllGroup> groups = await groupRepository.getAllGroups();
    for (int i = 0; i < groups.length; i++) {
      if (groups[i].id != null) {
        final GetSelectedGroup? group = await groupRepository.getGroupDetails(groups[i].id!);
        if (group != null) {
          await getGroupDetails(group);
          await getGroupLearnerDetails(group);
        }
      }
    }
  }

  Future<void> getGroupDetails(GetSelectedGroup group) async {
    if (group.currentSession?.id != null) {
      final groupId = group.id.toString();
      final sessionId = group.currentSession!.id.toString();
      await Future.wait([
        groupRepository.getSessionStatus(groupId: groupId, sessionId: sessionId),
        groupRepository.getSelfCheckInStatus(groupId: groupId, sessionId: sessionId),
        trainerRepository.getTrainerQuestions(groupId: groupId, sessionId: sessionId),
      ]);
    }
  }

  Future<void> getGroupLearnerDetails(GetSelectedGroup group) async {
    await learnerRepository.getLearnerProfileQuestions(
      groupId: group.id.toString(),
      learnerId: '',
    );
    if (group.currentSession?.id != null) {
      await learnerRepository.getLearnerQuestions(
        sessionId: group.currentSession!.id.toString(),
        learnerId: '',
      );
    }
    for (int i = 0; i < (group.learners?.length ?? 0); i++) {
      if (group.learners?[i].id != null) {
        await learnerRepository.getLearnerProfileQuestions(
          groupId: group.id.toString(),
          learnerId: group.learners![i].id.toString(),
        );
        if (group.currentSession?.id != null) {
          await learnerRepository.getLearnerQuestions(
            sessionId: group.currentSession!.id.toString(),
            learnerId: group.learners![i].id.toString(),
          );
        }
      }
    }
  }

  Future<void> getSurveys() async {
    final List<SurveyList> surveys = await surveyRepository.getSurveyList();
    for (SurveyList item in surveys) {
      if (item.id != null) {
        await surveyRepository.getSurveyDetails(surveyId: item.id.toString());
      }
    }
  }

  Future<List> getDependencyLess() async {
    return await Future.wait([
      commonRepository.getCourseList(),
      commonRepository.getBrandingDetails(),
      commonRepository.getIconMedia(),
      commonRepository.getLocalAudio(),
      commonRepository.getLanguageList(),
      commonRepository.getLocalization('en'),
      groupRepository.getLocationForGroup(),
      commonRepository.getPlayModeData(),
    ]);
  }
}
Editor is loading...
Leave a Comment