public async Task <ZahtjevDto> PostZahtjev(PostZahtjevDto postZahtjev)
        {
            var userName = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
            var id       = _context.Korisnici.Where(k => k.UserName == userName)
                           .FirstOrDefault().Id;

            var prodajemValutu = await _context.Sredstva
                                 .Include(v => v.Valuta)
                                 .Where(k => k.KorisnikId == id && k.Valuta.Naziv == postZahtjev.ProdajemValuta)
                                 .FirstOrDefaultAsync();

            if (prodajemValutu == null)
            {
                throw new Exception("Ne posjedujete valutu koju želite prodati.");
            }

            var kupujemValutu = await _context.Valute
                                .Where(v => v.Naziv == postZahtjev.KupujemValuta)
                                .FirstOrDefaultAsync();

            var kupujemId = kupujemValutu.ValutaId;


            var raspoloziviIznos = _context.Sredstva
                                   .Include(v => v.Valuta)
                                   .Where(k => k.KorisnikId == id && k.Valuta.Naziv == postZahtjev.ProdajemValuta)

                                   .Select(k => new ZahtjevDto()
            {
                Iznos = k.Iznos
            })
                                   .FirstOrDefault().Iznos;


            if (postZahtjev.Iznos == 0)
            {
                throw new Exception("Iznos prodaje ne može biti 0");
            }

            if (raspoloziviIznos < postZahtjev.Iznos)
            {
                throw new Exception("Nemate dovoljno sredstava za prodaju");
            }

            var zahtjev = new Zahtjev
            {
                KorisnikId            = id,
                Iznos                 = postZahtjev.Iznos,
                ProdajemValutaId      = prodajemValutu.ValutaId,
                KupujemValutaId       = kupujemId,
                DatumVrijemeKreiranja = DateTime.Now,
                Prihvacen             = 1
            };

            _context.Zahtjevi.Add(zahtjev);

            await _context.SaveChangesAsync();

            return(_mapper.Map <ZahtjevDto>(zahtjev));
        }
        public async Task <KorisnikDto> PostUser(PostUserDto postUser)
        {
            var user = new Korisnik()
            {
                UserName       = postUser.UserName,
                Ime            = postUser.Ime,
                Prezime        = postUser.Prezime,
                Email          = postUser.Email,
                Slika          = postUser.Slika,
                EmailConfirmed = true,
                LockoutEnabled = true,
                SecurityStamp  = Guid.NewGuid().ToString(),
                Lozinka        = postUser.Lozinka
            };

            await _userManager.CreateAsync(user, user.Lozinka);

            await _userManager.AddToRoleAsync(user, "korisnik");

            await _context.SaveChangesAsync();

            var korisnik = _mapper.Map <KorisnikDto>(user);

            return(korisnik);
        }
示例#3
0
 public async Task AddBankAsync(Bank bankFromDB)
 {
     try
     {
         context.Banks.Add(bankFromDB);
         await context.SaveChangesAsync();
     }
     catch
     {
         throw dataBaseExceptionWrite;
     }
 }
        public async Task <SredstvaDto> PostSredstva(PostSredstvaDto postSredstva)
        {
            var userName = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
            var id       = _context.Korisnici.Where(k => k.UserName == userName)
                           .FirstOrDefault().Id;

            var valuta = await _context.Valute
                         .Where(v => v.Naziv == postSredstva.Valuta)
                         .FirstOrDefaultAsync();

            if (valuta == null)
            {
                throw new Exception("Ne postoji tražena valuta, pokušajte ponovno. ");
            }

            var valutaId = valuta.ValutaId;

            var sredstvaaa = await _context.Sredstva
                             .Include(v => v.Valuta)
                             .Where(s => s.KorisnikId == id)
                             .ToListAsync();

            var duplaSredstva = sredstvaaa.Where(v => v.Valuta.Naziv == postSredstva.Valuta).FirstOrDefault();

            if (duplaSredstva != null)
            {
                throw new Exception("Već posjedujete sredstva u traženoj valuti. Molimo Vas ažurirajte iznos tražene valute.");
            }

            if (postSredstva.Iznos == 0)
            {
                throw new Exception("Uneseni iznos ne može biti 0");
            }

            var sredstva = new Sredstva
            {
                KorisnikId = id,
                ValutaId   = valutaId,
                Iznos      = postSredstva.Iznos
            };



            _context.Sredstva.Add(sredstva);

            await _context.SaveChangesAsync();

            var sredstvaToReturn = _mapper.Map <SredstvaDto>(sredstva);

            return(sredstvaToReturn);
        }
        public async Task <IActionResult> Post(UserRegistrationModel registrationModel)
        {
            if (string.IsNullOrWhiteSpace(registrationModel.Username) || string.IsNullOrWhiteSpace(registrationModel.Password))
            {
                return(BadRequest());
            }
            var alreadyExist = await _context.Users.AnyAsync(u => u.UserName.Equals(registrationModel.Username));

            if (alreadyExist)
            {
                return(BadRequest());
            }
            await _context.Users.AddAsync(new UserEntity
            {
                Guid         = Guid.NewGuid(),
                UserName     = registrationModel.Username,
                PasswordHash = PasswordUtil.HashPassword(registrationModel.Password),
                Role         = Role.Customer,
                Email        = registrationModel.Email
            });

            await _context.SaveChangesAsync();

            return(Ok());
        }
        public async Task ModifyUserRole(UserDTO userDto)
        {
            if (userDto.Id == default)
            {
                throw _ems.BuildError(ErrorTypes.InvalidParameters);
            }
            var user = await _context.Users.FindAsync(userDto.Id);

            user.Role = userDto.Role;
            await _context.SaveChangesAsync();
        }
        private async Task <IEnumerable <Claim>?> GenerateRefreshUserClaim(
            UserEntity user,
            DateTime expires,
            Claim previousRefreshTokenClaim = null
            )
        {
            if (previousRefreshTokenClaim != null)
            {
                var value       = Guid.Parse(previousRefreshTokenClaim.Value);
                var deviceLogin = user.UserDeviceLogins?.FirstOrDefault(login => login.Guid == value);
                if (deviceLogin == null)
                {
                    return(null);
                }

                deviceLogin.ValidUntil = expires;
                await _context.SaveChangesAsync();

                return(new[]
                {
                    new Claim("DeviceLoginId", deviceLogin.Guid.ToString()),
                });
            }

            var userDeviceLogin = new UserDeviceLoginEntity
            {
                User       = user,
                ValidUntil = expires,
                DeviceInfo = Request.Headers[HeaderNames.UserAgent]
            };
            await _context.UserDeviceLogins.AddAsync(userDeviceLogin);

            await _context.SaveChangesAsync();

            return(new[]
            {
                new Claim("DeviceLoginId", userDeviceLogin.Guid.ToString()),
            });
        }
        public async Task <EditValutaDto> AddValuta(PostValutaDto postValutaDto)
        {
            var httpClient = _httpClientFactory.CreateClient("valute");
            var url        = $"09a14a921f6de3a3c311a083/pair/HRK/{postValutaDto.Naziv}";
            var response   = await httpClient.GetAsync(url);

            var responseStream = await response.Content.ReadAsStreamAsync();

            var responseObject = await JsonSerializer.DeserializeAsync <KonverzijaValute>(responseStream);


            var korisnik = await _userManager.FindByNameAsync(postValutaDto.UserName);

            var valuta = new Valuta()
            {
                Naziv       = postValutaDto.Naziv,
                AktivnoOd   = postValutaDto.AktivnoOd,
                AktivnoDo   = postValutaDto.AktivnoDo,
                Tecaj       = responseObject.conversion_rate,
                SlikaValute = postValutaDto.SlikaValute,
                KorisnikId  = korisnik.Id
            };

            var role = _context.UserRoles
                       .Where(u => u.UserId == korisnik.Id)
                       .FirstOrDefault();

            if (role.RoleId != 2)
            {
                throw new Exception("Izabrani korisnik nije u funkciji moderatora i ne može biti zadužen za valutu.");
            }

            _context.Add(valuta);
            await _context.SaveChangesAsync();

            return(_mapper.Map <EditValutaDto>(valuta));
        }