using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using PARR.DAL.Context; using PARR.DAL.Models; using PARR.DAL.Services.Abstracts; using PARR.DAL.Services.Interfaces; namespace PARR.DAL.Services.Implementations { internal class HostService : BaseService, IHostService { private readonly DataContext dataContext; private readonly ILogger logger; protected override DbSet EntitySet => dataContext.Hosts; protected override DataContext EntitiContext => dataContext; public HostService(DataContext dataContext, ILogger logger) : base(logger) { this.dataContext = dataContext; this.logger = logger; } public async Task GetHostWithAppsByIpAsync(string ip) { return await GetHostWithIncludeApps() .AsSplitQuery() .FirstOrDefaultAsync(h => h.IP == ip); } public async Task GetHostWithAppsByEkAsync(string ek) { return await GetHostWithIncludeApps() .AsSplitQuery() .FirstOrDefaultAsync(h => h.Ek.ToLower() == ek.ToLower()); } private IQueryable GetHostWithIncludeApps() { return EntitySet.Include(t => t.ApplicationsInHosts).ThenInclude(a => a.Application).ThenInclude(t => t!.ApplicationType); } public async Task GetByIpAsync(string ip) { return await EntitySet.FirstOrDefaultAsync(t => t.IP == ip); } public async Task GetByEkAsync(string ek) { return await EntitySet.FirstOrDefaultAsync(t => t.Ek.ToLower() == ek.ToLower()); } } }