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 <ZahtjevDto> OdobriZahtjev(OdobravanjeZahtjevaDto odobravanjeZahtjeva) { // trazimo zahtjev po id-u var zahtjev = await _context.Zahtjevi .Include(v => v.Valuta) .Where(z => z.ZahtjevId == odobravanjeZahtjeva.ZahtjevId) .ProjectTo <ZahtjevDto>(_mapper.ConfigurationProvider) .Select(z => new ZahtjevDto() { ZahtjevId = z.ZahtjevId, KorisnikId = z.KorisnikId, ProdajemValutaId = z.ProdajemValutaId, ProdajemValuta = _context.Valute.Where(v => v.ValutaId == z.ProdajemValutaId).Select(s => s.Naziv).FirstOrDefault(), KupujemValutaId = z.KupujemValutaId, KupujemValuta = _context.Valute.Where(v => v.ValutaId == z.KupujemValutaId).Select(s => s.Naziv).FirstOrDefault(), Iznos = z.Iznos, Prihvacen = z.Prihvacen, DatumVrijemeKreiranja = DateTime.Now }) .FirstOrDefaultAsync(); var httpClient = _httpClientFactory.CreateClient(); var url = $"https://v6.exchangerate-api.com/v6/09a14a921f6de3a3c311a083/pair/{zahtjev.ProdajemValuta}/{zahtjev.KupujemValuta}/{zahtjev.Iznos}"; var response = await httpClient.GetAsync(url); var responseStream = await response.Content.ReadAsStreamAsync(); var responseObject = await JsonSerializer.DeserializeAsync <KonverzijaValute>(responseStream); // dobijemo period u kojem se ta valuta moze prodati po idu var vrijemeProdaje = await _context.Valute .Where(v => v.ValutaId == zahtjev.ProdajemValutaId) .Select(v => new VrijemeValuteDto() { AktivnoOd = v.AktivnoOd, AktivnoDo = v.AktivnoDo }) .FirstOrDefaultAsync(); //trazimo sva vremena i gledamo da li je moguca prodaja TimeSpan start = vrijemeProdaje.AktivnoOd; //10 TimeSpan end = vrijemeProdaje.AktivnoDo; //12 TimeSpan now = DateTime.Now.TimeOfDay; if ((now < start) && (now > end)) { throw new Exception("Zahtjev se ne može odobriti jer se navedena valuta ne može prodati u ovo doba dana."); } if (odobravanjeZahtjeva.Prihvacen == 2) { var prodajnoSredstvo = await _context.Sredstva .Where(u => u.KorisnikId == zahtjev.KorisnikId && u.ValutaId == zahtjev.ProdajemValutaId) .FirstOrDefaultAsync(); prodajnoSredstvo.Iznos -= zahtjev.Iznos; _context.Sredstva.Update(prodajnoSredstvo); await _context.SaveChangesAsync(); var kupovnoSredstvo = await _context.Sredstva .Where(u => u.KorisnikId == zahtjev.KorisnikId && u.ValutaId == zahtjev.KupujemValutaId) .FirstOrDefaultAsync(); if (kupovnoSredstvo == null) { var kupovno = new Sredstva() { ValutaId = zahtjev.KupujemValutaId, KorisnikId = zahtjev.KorisnikId, Iznos = responseObject.conversion_result }; _context.Sredstva.Add(kupovno); await _context.SaveChangesAsync(); } else { kupovnoSredstvo.Iznos += responseObject.conversion_result; _context.Sredstva.Update(kupovnoSredstvo); await _context.SaveChangesAsync(); } var zah = await _context.Zahtjevi .Where(v => v.ZahtjevId == odobravanjeZahtjeva.ZahtjevId) .FirstOrDefaultAsync(); zah.Prihvacen = 2; zah.DatumVrijemeKreiranja = DateTime.Now; _context.Zahtjevi.Update(zah); await _context.SaveChangesAsync(); } var odobravanje = new OdobravanjeZahtjevaDto() { ZahtjevId = odobravanjeZahtjeva.ZahtjevId, Prihvacen = odobravanjeZahtjeva.Prihvacen }; var odobreno = _mapper.Map <ZahtjevDto>(odobravanje); return(odobreno); }