| | | 1 | | using Microsoft.EntityFrameworkCore; |
| | | 2 | | using OzonDomains.Models; |
| | | 3 | | using OzonRepositories.Context; |
| | | 4 | | |
| | | 5 | | namespace OzonRepositories.Data; |
| | | 6 | | |
| | | 7 | | public class EmailMessageInboxRepository : MainRepository, IRepository<EmailMessageInbox> |
| | | 8 | | { |
| | 8 | 9 | | public EmailMessageInboxRepository(ApplicationDbContext orderContext) : base(orderContext) |
| | | 10 | | { |
| | 8 | 11 | | } |
| | | 12 | | |
| | | 13 | | public Task<List<EmailMessageInbox>> Get() |
| | | 14 | | { |
| | 0 | 15 | | return _context.EmailMessageInboxes |
| | 0 | 16 | | .Include(x => x.Attachments) |
| | 0 | 17 | | .OrderByDescending(x => x.CreatedAt) |
| | 0 | 18 | | .ToListAsync(); |
| | | 19 | | } |
| | | 20 | | |
| | | 21 | | public async Task<EmailMessageInbox?> GetAsync(int id) |
| | | 22 | | { |
| | 0 | 23 | | return await _context.EmailMessageInboxes |
| | 0 | 24 | | .Include(x => x.Attachments) |
| | 0 | 25 | | .FirstOrDefaultAsync(x => x.Id == id); |
| | 0 | 26 | | } |
| | | 27 | | |
| | | 28 | | public async Task<EmailMessageInbox?> GetAsync(EmailMessageInbox value) |
| | | 29 | | { |
| | 0 | 30 | | return await _context.EmailMessageInboxes |
| | 0 | 31 | | .Include(x => x.Attachments) |
| | 0 | 32 | | .FirstOrDefaultAsync(x => x.MessageExternalId == value.MessageExternalId); |
| | 0 | 33 | | } |
| | | 34 | | |
| | | 35 | | public async Task<int> Add(EmailMessageInbox value) |
| | | 36 | | { |
| | 2 | 37 | | _context.EmailMessageInboxes.Add(value); |
| | 2 | 38 | | return await _context.SaveChangesAsync(); |
| | 2 | 39 | | } |
| | | 40 | | |
| | | 41 | | public async Task<int> Update(EmailMessageInbox value) |
| | | 42 | | { |
| | 2 | 43 | | _context.EmailMessageInboxes.Update(value); |
| | 2 | 44 | | return await _context.SaveChangesAsync(); |
| | 2 | 45 | | } |
| | | 46 | | |
| | | 47 | | public async Task<int> Delete(EmailMessageInbox value) |
| | | 48 | | { |
| | 0 | 49 | | _context.EmailMessageInboxes.Remove(value); |
| | 0 | 50 | | return await _context.SaveChangesAsync(); |
| | 0 | 51 | | } |
| | | 52 | | |
| | | 53 | | public Task<EmailMessageInbox?> GetByExternalId(string messageExternalId) |
| | | 54 | | { |
| | 5 | 55 | | return _context.EmailMessageInboxes |
| | 5 | 56 | | .Include(x => x.Attachments) |
| | 5 | 57 | | .FirstOrDefaultAsync(x => x.MessageExternalId == messageExternalId); |
| | | 58 | | } |
| | | 59 | | |
| | | 60 | | public Task<EmailMessageInbox?> GetByUid(string uid) |
| | | 61 | | { |
| | 5 | 62 | | return _context.EmailMessageInboxes |
| | 5 | 63 | | .Include(x => x.Attachments) |
| | 5 | 64 | | .FirstOrDefaultAsync(x => x.Uid == uid); |
| | | 65 | | } |
| | | 66 | | |
| | | 67 | | public async Task<HashSet<string>> GetAllKnownExternalIdsAsync() |
| | | 68 | | { |
| | 7 | 69 | | var ids = await _context.EmailMessageInboxes |
| | 7 | 70 | | .AsNoTracking() |
| | 7 | 71 | | .Select(x => x.MessageExternalId) |
| | 7 | 72 | | .ToListAsync(); |
| | | 73 | | |
| | 7 | 74 | | return ids.ToHashSet(StringComparer.Ordinal); |
| | 7 | 75 | | } |
| | | 76 | | |
| | | 77 | | public async Task<HashSet<string>> GetAllKnownUidsAsync() |
| | | 78 | | { |
| | 7 | 79 | | var uids = await _context.EmailMessageInboxes |
| | 7 | 80 | | .AsNoTracking() |
| | 7 | 81 | | .Where(x => x.Uid != null && x.Uid != string.Empty) |
| | 7 | 82 | | .Select(x => x.Uid!) |
| | 7 | 83 | | .ToListAsync(); |
| | | 84 | | |
| | 7 | 85 | | return uids.ToHashSet(StringComparer.Ordinal); |
| | 7 | 86 | | } |
| | | 87 | | |
| | | 88 | | public Task<List<EmailMessageInbox>> GetPaged(int page, int pageSize) |
| | | 89 | | { |
| | 0 | 90 | | return _context.EmailMessageInboxes |
| | 0 | 91 | | .Include(x => x.Attachments) |
| | 0 | 92 | | // Сортируем по фактической дате письма, а не по времени обработки, |
| | 0 | 93 | | // чтобы новые письма отображались корректно даже при старом "хвосте". |
| | 0 | 94 | | .OrderByDescending(x => x.ReceivedAtUtc ?? x.CreatedAt) |
| | 0 | 95 | | .Skip((page - 1) * pageSize) |
| | 0 | 96 | | .Take(pageSize) |
| | 0 | 97 | | .ToListAsync(); |
| | | 98 | | } |
| | | 99 | | |
| | | 100 | | public Task<int> GetCount() |
| | | 101 | | { |
| | 0 | 102 | | return _context.EmailMessageInboxes.CountAsync(); |
| | | 103 | | } |
| | | 104 | | |
| | | 105 | | public async Task<HashSet<string>> GetExternalIdsReceivedAfterAsync(DateTime sinceUtc) |
| | | 106 | | { |
| | 0 | 107 | | var ids = await _context.EmailMessageInboxes |
| | 0 | 108 | | .AsNoTracking() |
| | 0 | 109 | | .Where(x => (x.ReceivedAtUtc ?? x.CreatedAt) >= sinceUtc) |
| | 0 | 110 | | .Select(x => x.MessageExternalId) |
| | 0 | 111 | | .ToListAsync(); |
| | | 112 | | |
| | 0 | 113 | | return ids.ToHashSet(StringComparer.Ordinal); |
| | 0 | 114 | | } |
| | | 115 | | } |