using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using LCU.Shared.Collections.RepoApiLib.Exceptions; using LCU.Shared.Collections.RepoApiLib.Models; using LCU.Shared.Collections.RepoApiLib.Persistence; using Microsoft.EntityFrameworkCore; namespace LCU.Shared.Collections.RepoApiLib.Repositories { public class RepoManualStatusRepository : BaseRepository, IRepoManualStatusRepository { public RepoManualStatusRepository(AppDbContext context) : base(context) { } public async Task> ListAllAsync() { return await _context.RepoManualStatuses.ToListAsync(); } public async Task> ListWatchStatusesAsync() { var statusSet = await (from status in _context.RepoManualStatuses where status.WatchForStatusChanges == true select status).ToListAsync(); return statusSet.Select(x => x.Description).ToList() as IReadOnlyCollection; } public async Task AddAsync(RepoManualStatus repoManualStatus) { // Only Create the Alert if an identical one doesn't already exist var duplicateStatus = ( from status in _context.RepoManualStatuses where status.Description.ToUpper().Trim() == repoManualStatus.Description.ToUpper().Trim() select status ); if (!duplicateStatus.Any()) { await _context.RepoManualStatuses.AddAsync(repoManualStatus); } else { throw new DuplicateResourceException("RepoManualStatus"); } } public async Task FindByIdAsync(int id) { return await _context.RepoManualStatuses.FindAsync(id); } public void Update(RepoManualStatus repoManualStatus) { _context.RepoManualStatuses.Update(repoManualStatus); } public void Remove(RepoManualStatus repoManualStatus) { _context.RepoManualStatuses.Remove(repoManualStatus); } } }