public async Task <GenericResult <UserDto> > AddNewUser(NewUserDto newUserDto)
        {
            try
            {
                if (!await _peopleService.IsPersonExists(newUserDto.FKPersonID))
                {
                    return(GenericResult <UserDto> .UserSafeError("There is no person info with given id"));
                }


                var newUser = await _userRepo.InsertAsync(new User
                {
                    FKPersonID   = newUserDto.FKPersonID,
                    Email        = newUserDto.Email,
                    UserName     = newUserDto.UserName,
                    PasswordHash = _cipherService.Encrypt(newUserDto.Password),
                });

                return(GenericResult <UserDto> .Success(_mapper.Map <UserDto>(newUser)));
            }
            catch (Exception e)
            {
                return(GenericResult <UserDto> .Error(e));
            }
        }
        public async Task <GenericResult <PersonDto> > AddPerson(PersonDto personDto)
        {
            try
            {
                if (personDto.FKPopulationInformationID.HasValue)
                {
                    var isPopulationExists = (await _populationService.IsPopulationExists(personDto.FKPopulationInformationID.Value));
                    if (!isPopulationExists.IsSucceed)
                    {
                        return(GenericResult <PersonDto> .UserSafeError("An error occurred when requesting population.Errors: " + isPopulationExists.GetAllMessage()));
                    }
                    else if (!isPopulationExists.Data)
                    {
                        return(GenericResult <PersonDto> .UserSafeError("There is no population info with given id"));
                    }
                }

                var newPerson = await _personRepo.InsertAsync(_mapper.Map <Person>(personDto));

                return(GenericResult <PersonDto> .Success(_mapper.Map <PersonDto>(newPerson)));
            }
            catch (Exception e)
            {
                return(GenericResult <PersonDto> .Error(e));
            }
        }
        public async Task <GenericResult <StudentSearchResultDto> > GetStudentInformationById(int id)
        {
            try
            {
                var student = await _studentInformationRepo.AsQueryable().Where(x => x.ID == id).Select(x => new StudentSearchResultDto
                {
                    ID            = x.ID,
                    StudentNumber = x.StudentNumber,

                    Email    = x.User.Email,
                    UserName = x.User.UserName,

                    Name             = x.User.Person.Name,
                    Surname          = x.User.Person.Surname,
                    RegistrationDate = x.RegistrationDate
                }).FirstOrDefaultAsync();

                if (student == null)
                {
                    return(GenericResult <StudentSearchResultDto> .UserSafeError(null, "There is no student with given id"));
                }

                return(GenericResult <StudentSearchResultDto> .Success(student));
            }
            catch (Exception e)
            {
                return(GenericResult <StudentSearchResultDto> .Error(null, e));
            }
        }
Example #4
0
        public async Task <GenericResult <StudentInformationDto> > AddNewStudent(NewStudentInformationDto newStudentInformationDto)
        {
            if (string.IsNullOrEmpty(newStudentInformationDto.StudentNumber))
            {
                return(GenericResult <StudentInformationDto> .UserSafeError($"Error! Student number can not be null"));
            }
            using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                try
                {
                    if (await _studentRepo.AsQueryable().AnyAsync(x => x.StudentNumber == newStudentInformationDto.StudentNumber))
                    {
                        transaction.Dispose();
                        return(GenericResult <StudentInformationDto> .UserSafeError($"Error! Student number: \"{newStudentInformationDto.StudentNumber}\" is already in use"));
                    }
                    newStudentInformationDto.RegistrationDate = DateTime.Now;
                    var newPopulationResult = await _populationService.AddPopulationInfo(newStudentInformationDto.NewUserDto.PersonDto.PopulationInformationDto);

                    if (newPopulationResult.IsSucceed)
                    {
                        newStudentInformationDto.NewUserDto.PersonDto.FKPopulationInformationID = newPopulationResult.Data;
                        var newPersonResult = await _peopleService.AddPerson(newStudentInformationDto.NewUserDto.PersonDto);

                        if (newPersonResult.IsSucceed)
                        {
                            newStudentInformationDto.NewUserDto.FKPersonID = newPersonResult.Data.ID;
                            var newUserResult = await _userService.AddNewUser(newStudentInformationDto.NewUserDto);

                            if (newUserResult.IsSucceed)
                            {
                                newStudentInformationDto.FKUserID = newUserResult.Data.ID;
                                var newStudentDbEntity = _mapper.Map <StudentInformation>(newStudentInformationDto);

                                var newStudent = await _studentRepo.InsertAsync(newStudentDbEntity);

                                await _eventPublisher.PublishAsync(new NewStudentCreatedEvent()
                                {
                                    FKUserID      = newStudent.FKUserID,
                                    StudentNumber = newStudent.StudentNumber
                                });

                                transaction.Complete();
                                return(GenericResult <StudentInformationDto> .Success(_mapper.Map <StudentInformationDto>(newStudent)));
                            }
                            else
                            {
                                transaction.Dispose();
                                return(newUserResult.ConvertTo(default(StudentInformationDto), "An error occurred while adding new user."));
                            }
                        }
                        else
                        {
                            await _populationService.Delete(newPopulationResult.Data);

                            transaction.Dispose();
                            return(newPersonResult.ConvertTo(default(StudentInformationDto), "An error occurred while adding new person."));
                        }
                    }
                    else
                    {
                        transaction.Dispose();
                        return(newPopulationResult.ConvertTo(default(StudentInformationDto), "An error occurred while adding new population."));
                    }
                }
                catch (Exception e)
                {
                    transaction.Dispose();
                    return(GenericResult <StudentInformationDto> .Error(e));
                }
            }
        }