예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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));
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }
예제 #7
0
 public async Task <DraftLaw> CreateNewDrawLaw(NewDraftLawRequestModel model)
 {
     return(await _service.CreateNewAsync(model));
 }