Exemplo n.º 1
0
        public override async Task <ServiceResult> Insert(PacijentUpsertDto dtoForCreation)
        {
            var zdravstvenaKnjizica = await _dbContext.ZdravstvenaKnjizica
                                      .Include(x => x.LicniPodaci)
                                      .FirstOrDefaultAsync(x => x.Id == dtoForCreation.BrojZdravstveneKnjizice);

            var validInput = await ValidateUpsertData(dtoForCreation, zdravstvenaKnjizica);

            if (!validInput.Succeeded)
            {
                return(ServiceResult.WithStatusCode(validInput.StatusCode, validInput.Message));
            }

            var korisnickiNalog = _mapper.Map <KorisnickiNalog>(dtoForCreation.KorisnickiNalog);

            if (dtoForCreation.KorisnickiNalog.ConfirmPassword != dtoForCreation.KorisnickiNalog.Password)
            {
                return(ServiceResult.BadRequest("Lozinke se ne podudaraju"));
            }

            var addedPersonId =
                await _faceRecognitionService.AddFaceForUser(dtoForCreation.ProfilePicture, dtoForCreation.KorisnickiNalog.Username);

            korisnickiNalog.PasswordSalt = _securityService.GenerateSalt();
            korisnickiNalog.PasswordHash = _securityService.GenerateHash(korisnickiNalog.PasswordSalt, dtoForCreation.KorisnickiNalog.Password);

            korisnickiNalog.DateCreated = DateTime.Now;
            korisnickiNalog.LastOnline  = DateTime.Now;
            korisnickiNalog.FaceId      = addedPersonId.ToString();

            await _dbContext.KorisnickiNalozi.AddAsync(korisnickiNalog);

            await _dbContext.SaveChangesAsync();

            //Adding user to Pacijent role
            var pacijentRole = await _dbContext.Roles.FirstOrDefaultAsync(x => x.Naziv == "Pacijent");

            await _dbContext.RolesKorisnickiNalozi.AddAsync(new RoleKorisnickiNalog
                                                            { KorisnickiNalogId = korisnickiNalog.Id, RoleId = pacijentRole.Id });

            await _dbContext.SaveChangesAsync();

            var pacijent = new Pacijent
            {
                KorisnickiNalogId     = korisnickiNalog.Id,
                ZdravstvenaKnjizicaId = zdravstvenaKnjizica.Id
            };

            await _dbContext.AddAsync(pacijent);

            await _dbContext.SaveChangesAsync();

            var zdravstvenaKnjizicaFromDb = await _dbContext.ZdravstvenaKnjizica
                                            .Include(x => x.LicniPodaci).FirstOrDefaultAsync(x => x.Id == pacijent.ZdravstvenaKnjizicaId);

            if (zdravstvenaKnjizicaFromDb != null)
            {
                zdravstvenaKnjizicaFromDb.LicniPodaci.ProfilePicture = dtoForCreation.ProfilePicture;
                _dbContext.Update(zdravstvenaKnjizicaFromDb.LicniPodaci);
                await _dbContext.SaveChangesAsync();
            }

            return(ServiceResult.OK(_mapper.Map <PacijentDtoLL>(pacijent)));
        }
        public override async Task <ServiceResult> Update(int id, LicniPodaciUpsertDto request)
        {
            if (!await _authService.IsAuthenticated())
            {
                return(ServiceResult.Unauthorized());
            }

            if (await ValidateModel(request, id) is { } validationResult&& !validationResult.Succeeded)
            {
                return(ServiceResult.WithStatusCode(validationResult.StatusCode, validationResult.Message));
            }

            var entity = await _dbContext.LicniPodaci.FindAsync(id);

            if (entity == null)
            {
                return(ServiceResult.NotFound("Licni podaci nisu pronadjeni"));
            }

            if (_authService.UserIsPacijent())
            {
                var pacijent = await _authService.GetCurrentLoggedInPacijent();

                if (pacijent == null)
                {
                    return(ServiceResult.BadRequest());
                }

                var korisnickiNalog = await _dbContext.KorisnickiNalozi.FindAsync(pacijent.KorisnickiNalogId);

                if (request.ProfilePicture != null && request.ProfilePicture.Any())
                {
                    if (entity.ProfilePicture != null && korisnickiNalog.FaceId != null && (!entity.ProfilePicture?.SequenceEqual(request.ProfilePicture) ?? false))
                    {
                        await _faceRecognitionService.AddFaceForUser(request.ProfilePicture, korisnickiNalog.Username, Guid.Parse(korisnickiNalog.FaceId), true);
                    }
                    else
                    {
                        var addedPersonId =
                            await _faceRecognitionService.AddFaceForUser(request.ProfilePicture, korisnickiNalog.Username);

                        korisnickiNalog.FaceId = addedPersonId?.ToString();

                        _dbContext.Update(korisnickiNalog);
                        await _dbContext.SaveChangesAsync();
                    }
                }
            }

            if (!_dbContext.Gradovi.Any(x => x.Id == request.GradId))
            {
                return(ServiceResult.NotFound($"Grad sa ID-em {request.GradId} nije pronadjen"));
            }
            await Task.Run(() =>
            {
                _mapper.Map(request, entity);

                _dbContext.LicniPodaci.Update(entity);
            });

            await _dbContext.SaveChangesAsync();

            return(new ServiceResult(_mapper.Map <LicniPodaciDto>(entity)));
        }