public CurrencyViewModel GetCurrency(string code)
        {
            var spec = new CurrencyByCodeSpec(code);
            var curr = currRepository.FindOne(spec);

            return(CurrencyViewModel.MapFromData(curr));
        }
        public void AddCurrency(CurrencyViewModel currency)
        {
            var existCurrSpec = new CurrencyByCodeSpec(currency.Code);
            var oldItem       = currRepository.FindOne(existCurrSpec);

            if (oldItem != null)
            {
                throw new ValidationException($"Currency {currency.Code} already exist!");
            }

            var curr = Currency.CreateCurrency(currency.Code, currency.ShortCode, currency.Symbol, currency.Name);

            try
            {
                unitOfWork.BeginTransaction();
                currRepository.Add(curr);
                unitOfWork.Commit();
            }
            catch (Exception)
            {
                unitOfWork.Rollback();
                throw;
            }
        }
        public void UpdateCurrency(CurrencyViewModel model)
        {
            var oldItem = currRepository.FindById(model.Id);

            if (oldItem == null)
            {
                throw new ValidationException($"Currency {model.Id} not found.");
            }
            oldItem.Name      = model.Name;
            oldItem.ShortCode = model.ShortCode;
            oldItem.Symbol    = model.Symbol;
            oldItem.Code      = model.Code;
            try
            {
                unitOfWork.BeginTransaction();
                currRepository.Update(oldItem);
                unitOfWork.Commit();
            }
            catch (Exception)
            {
                unitOfWork.Rollback();
                throw;
            }
        }
        public async Task <IEnumerable <CurrencyViewModel> > GetCurrencies()
        {
            var currencies = await currRepository.GetAll();

            return(currencies.Select(p => CurrencyViewModel.MapFromData(p)));
        }