private async Task <DraftLaw> GetOrCreateParent(NewDraftLawRequestModel model) { if (model.IsNew) { return(null); } if (!model.ParentDraftLaw.Id.HasValue) { return(new DraftLaw { Name = model.Name, Description = model.Description }); } var bill = await _draftLawRepository.GetByIdAsync(model.ParentDraftLaw.Id.Value); if (bill == null) { throw new ValidationException("Couldn't find parent draw law"); } return(bill); }
private async Task <IList <Tag> > GetOrCreateTagsAsync(NewDraftLawRequestModel model) { var stored = await _tagRepository.GetAsync(model.Tags); var tags = model.Tags .Where(x => stored.All(s => s.Name != x)) .Select(x => new Tag { Name = x }) .ToList(); tags.AddRange(stored); return(tags); }
public async Task <DraftLaw> CreateNewAsync(NewDraftLawRequestModel model) { var draftLaw = new DraftLaw { IsNew = model.IsNew, Type = model.Type, Name = model.Name, Description = model.Description, ParentDraftLaw = await GetOrCreateParent(model), Document = await GetOrCreateDocumentAsync(model), Category = await GetExistingCategoryAsync(model), Tags = await GetOrCreateTagsAsync(model), Participants = await GetOrCreateParticipantsAsync(model) }; return(await _draftLawRepository.AddAsync(draftLaw)); }
private async Task <DraftLawDocument> GetOrCreateDocumentAsync(NewDraftLawRequestModel model) { if (!model.InternalFileId.HasValue) { return(new DraftLawDocument { DirectLink = model.ExternalLink }); } var document = await _draftLawDocumentRepository.GetByIdAsync(model.InternalFileId.Value); if (document == null) { throw new ValidationException("Couldn't find internal file"); } return(document); }
private async Task <DraftLawCategory> GetExistingCategoryAsync(NewDraftLawRequestModel model) { DraftLawCategory category = null; if (model.CategoryId.HasValue) { category = await _draftLawCategoryRepository.GetByIdAsync(model.CategoryId.Value); } if (category == null && !string.IsNullOrWhiteSpace(model.CategoryName)) { category = await _draftLawCategoryRepository.GetByNameAsync(model.CategoryName); } if (category == null) { throw new ValidationException("Couldn't find category"); } return(category); }
private async Task <IList <ProjectParticipant> > GetOrCreateParticipantsAsync(NewDraftLawRequestModel model) { var emails = model.Participants .Concat(model.Initiators) .Where(x => IsEmail(x.NameOrEmail)) .Select(x => x.NameOrEmail) .Distinct() .ToList(); var savedUsersParticipants = await _userProfileRepository.GetByEmails(emails); var participantList = new List <ProjectParticipant>(); foreach (var participant in model.Participants) { AddParticipant(participantList, savedUsersParticipants, participant, false); } foreach (var participant in model.Initiators) { AddParticipant(participantList, savedUsersParticipants, participant, true); } return(participantList); }
public async Task <DraftLaw> CreateNewDrawLaw(NewDraftLawRequestModel model) { return(await _service.CreateNewAsync(model)); }