namespace MyOffice.Data.Repositories.Currency; using System.Xml.Schema; using Microsoft.EntityFrameworkCore; using Models.Currencies; public class CurrencyRateRepository : AppRepository, ICurrencyRateRepository { public List GetLastRates(Guid currencyId, DateTime? before = null, int count = 1) { before = before ?? DateTime.UtcNow; return _context.CurrencyRates .Where(x => x.CurrencyId == currencyId) .Where(x => x.DateTime <= before) .OrderByDescending(x => x.DateTime) .ThenByDescending(x => x.Id) .Take(count) .ToList(); } public Dictionary GetLastRates(Guid userId, List currencyIds, DateTime? before = null) { return _context.CurrencyRates .Include(x => x.Currency) .Include(x => x.Currency!.CurrencyGlobal) .Where(x => x.DateTime <= before) .Where(x => x.Currency!.UserId == userId) .Where(x => currencyIds.Contains(x.Currency!.CurrencyGlobalId)) .GroupBy(x => new { x.Currency!.CurrencyGlobalId }, (key, g) => new { key.CurrencyGlobalId, rate = g.OrderByDescending(x => x.DateTime).First() }) .ToDictionary(x => x.CurrencyGlobalId, x => x.rate); } public bool AddRate(CurrencyRate currencyRate) { return this.AddBase(currencyRate) > 0; } public List GetAtDate(Guid currencyId, DateTime date) { return _context.CurrencyRates .Where(x => x.CurrencyId == currencyId && x.DateTime == date) .ToList(); } }