public async Task <Guid> CreateDonorPJ(DonorPJCreateDto donorPJDto)
        {
            User user = new User(Guid.NewGuid(), donorPJDto.Login.ToLower(), donorPJDto.Password.ToSHA512(),
                                 LoginType.DONOR_PJ, Guid.NewGuid(), true);

            var donorPJ = this.mapper.Map <DonorPJ>(donorPJDto);

            donorPJ.Id     = Guid.NewGuid();
            donorPJ.UserId = user.Id;

            var lstRole = await roleRepository.GetWhereAsync(r => r.Name.ToLower().Equals("donor_pj"));

            if (!lstRole.Any())
            {
                throw new Exception("Cannot find role donor_pj");
            }

            await userRoleRepository.AddAsync(new UserRole()
            {
                User = user, RoleId = lstRole.First().Id
            });

            await this.repository.AddAsync(donorPJ);

            await this.repository.SaveAsync();

            return(donorPJ.Id);
        }
        public async Task <IActionResult> CreateDonorPJ([FromBody] DonorPJCreateDto donorDto)
        {
            var userDto = await UserApplication.GetUserDto(u => u.Login.ToLower().Equals(donorDto.Login.ToLower()));

            if (userDto != null)
            {
                ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"O usuário, {donorDto.Login}, já existe.");
                return(BadRequest(error));
            }

            // Check if the donor already exists
            bool hasDonor = await DonorPJApplication.ExistDonorPJ(d => d.CNPJ.Equals(donorDto.CNPJ) && d.CompanyName.ToLower().Equals(donorDto.CompanyName.ToLower()));

            if (hasDonor)
            {
                ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"O doador PJ, {donorDto.CNPJ} - {donorDto.CompanyName}, já existe.");
                return(BadRequest(error));
            }

            var donorId = await DonorPJApplication.CreateDonorPJ(donorDto);

            return(CreatedAtRoute("GetDonorPJById", new { id = donorId }, null));
        }