Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }