예제 #1
0
        public async Task <bool> AddAsync(TermPaperAddCommand command)
        {
            var termPaper = Mapper.Value.Map <TermPaper>(command);

            var fileName = command.File.FileName.RemoveDiacritics().ToLowerInvariant().Trim();

            termPaper.SetFileName(fileName);

            await HandleCourseAsync(command, termPaper);

            await HandleKeywordsAsync(command, termPaper);

            await Repository.AddAsync(termPaper);

            await HandleAdvisorsAsync(command, termPaper);

            await HandleStudentsAsync(command, termPaper);

            var isIndexed = await _indexAppService.Value.IsIndexCreatedAsync("term-paper_index");

            if (!isIndexed)
            {
                await _indexAppService.Value.CreateTermPaperIndexAsync();
            }

            var fullPath = await _fileManagerAppService.Value.UploadTermPaperAsync(command.File);

            await _indexAppService.Value.IndexTermPaperFileAsync(fullPath);

            return(await UnitOfWork.Value.CommitAsync() > 0);
        }
예제 #2
0
        private async Task HandleKeywords(TermPaperAddCommand command, TermPaper termPaper)
        {
            var existingKeywords = await _keywordRepository.Value.GetKeywordsByValueList(command.Keywords);

            var newKeywords = command.Keywords.Except(existingKeywords.Select(ek => ek.Value));

            foreach (var keyword in existingKeywords)
            {
                termPaper.AddKeyword(new TermPaperKeyword(keyword));
            }
            foreach (var keyword in newKeywords)
            {
                termPaper.AddKeyword(new TermPaperKeyword(new Keyword(keyword)));
            }
        }
예제 #3
0
        private async Task HandleCourse(TermPaperAddCommand command, TermPaper termPaper)
        {
            var course = await _courseRepository.Value.GetByName(command.Course);

            if (course == null)
            {
                var area = new Area(command.Area);
                await _areaRepository.Value.AddAsync(area);

                course = new Course(area, command.Course);
                await _courseRepository.Value.AddAsync(course);
            }

            termPaper.SetCourse(course);
        }
예제 #4
0
        public async Task <bool> AddAsync(TermPaperAddCommand command)
        {
            var termPaper = Mapper.Value.Map <TermPaper>(command);

            await HandleCourse(command, termPaper);

            await HandleKeywords(command, termPaper);

            await Repository.AddAsync(termPaper);

            await HandleAdvisors(command, termPaper);

            await HandleStudents(command, termPaper);

            return(await UnitOfWork.Value.CommitAsync() > 0);
        }
예제 #5
0
        private async Task HandleStudents(TermPaperAddCommand command, TermPaper termPaper)
        {
            var studentA = new Student(command.Student1);

            studentA.SetTermPaper(termPaper);

            await _studentRepository.Value.AddAsync(studentA);

            if (!string.IsNullOrWhiteSpace(command.Student2))
            {
                var studentB = new Student(command.Student2);
                studentB.SetTermPaper(termPaper);

                await _studentRepository.Value.AddAsync(studentB);
            }
        }
예제 #6
0
        private async Task HandleAdvisors(TermPaperAddCommand command, TermPaper termPaper)
        {
            var advisor = new Advisor(command.Advisor.ToLower().Trim().Replace(" ", "."), "123", command.Advisor);
            await _advisorRepository.Value.AddAsync(advisor);

            var termPaperAdvisor = new TermPaperAdvisor(AdvisorType.Leader, termPaper, advisor);

            termPaper.AddAdvisor(termPaperAdvisor);

            if (!string.IsNullOrWhiteSpace(command.CoAdvisor))
            {
                var coAdvisor = new Advisor(command.Advisor.ToLower().Trim(), "123", command.Advisor);
                await _advisorRepository.Value.AddAsync(coAdvisor);

                var termPaperCoAdvisor = new TermPaperAdvisor(AdvisorType.CoLeader, termPaper, coAdvisor);
                termPaper.AddAdvisor(termPaperCoAdvisor);
            }
        }
예제 #7
0
 public async Task <IActionResult> AddAsync([FromForm] TermPaperAddCommand command)
 {
     return(Ok(await _termPaperAppService.AddAsync(command)));
 }