public async Task HandleAsync(AddMedicalScheme command, ICorrelationContext context)
        {
            MedicalScheme scheme = await _schemesRepo.GetAsync(x => x.SchemeName == command.SchemeName);

            if (scheme != null)
            {
                throw new MedParkException("scheme_already_exists", $"Medical scheme with the name {command.SchemeName} already exists.");
            }

            scheme = new MedicalScheme(command.Id)
            {
                SchemeName = command.SchemeName
            };

            await _schemesRepo.AddAsync(scheme);
        }
        public async Task HandleAsync(AddPracticeAcceptedMedicalScheme command, ICorrelationContext context)
        {
            MedicalScheme selectedScheme = await _schemesRepo.GetAsync(command.SchemeId);

            if (selectedScheme == null)
            {
                throw new MedParkException($"Invalid medical scheme Id ({command.SchemeId}) for new accepted scheme.");
            }

            AcceptedMedicalScheme acceptedScheme = new AcceptedMedicalScheme(command.Id)
            {
                PracticeId    = command.PracticeId,
                SchemeId      = command.SchemeId,
                SchemeName    = command.SchemeName,
                DateEffective = command.DateEffective,
                DateEnd       = command.DateEnd,
                IsActive      = command.IsActive
            };

            //Save accepted medical scheme for medical practice
            await _acceptedSchemesRepo.AddAsync(acceptedScheme);
        }
        public async Task <MedicalSchemeDTO> HandleAsync(MedicalSchemeQuery query)
        {
            MedicalScheme scheme = await _schemesRepo.GetAsync(query.SchemeId);

            return(_mapper.Map <MedicalSchemeDTO>(scheme));
        }