DD.WellWorkover.Cloud/AsbCloudInfrastructure/Services/WellContactService.cs

103 lines
3.0 KiB
C#

using AsbCloudApp.Data;
using AsbCloudApp.Data.User;
using AsbCloudApp.Exceptions;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using Mapster;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Services
{
public class WellContactService : IWellContactService
{
private readonly IAsbCloudDbContext db;
public WellContactService(IAsbCloudDbContext db)
{
this.db = db;
}
public async Task<IEnumerable<ContactDto>> GetAllAsync(int wellId, int contactTypeId, CancellationToken token)
{
var query = db.Contacts
.Where(c => c.IdCompanyType == contactTypeId)
.Where(c => c.IdWell == wellId)
.Select(c => c.Adapt<ContactDto>());
var entities = await query.AsNoTracking()
.ToArrayAsync(token);
return entities;
}
public async Task<ContactDto?> GetAsync(int idWell, int id, CancellationToken token)
{
var dbContact = await GetContact(idWell, id, token);
var result = dbContact?.Adapt<ContactDto>();
return result;
}
public async Task<IEnumerable<CompanyTypeDto>> GetTypesAsync(CancellationToken token)
{
var query = db.CompaniesTypes
.Where(t => t.IsContact)
.OrderBy(t => t.Order);
var entities = await query.AsNoTracking()
.ToArrayAsync(token);
var dtos = entities.Adapt<IEnumerable<CompanyTypeDto>>();
return dtos;
}
public async Task<int> InsertAsync(ContactDto contactDto, CancellationToken token)
{
var entity = contactDto.Adapt<Contact>();
db.Contacts.Add(entity);
await db.SaveChangesAsync(token).ConfigureAwait(false);
return entity.Id;
}
public async Task<int> UpdateAsync(ContactDto contactDto, CancellationToken token)
{
var entity = contactDto.Adapt<Contact>();
db.Contacts.Update(entity);
return await db.SaveChangesAsync(token);
}
public async Task<int> DeleteAsync(int id, CancellationToken token)
{
var contact = await db.Contacts
.Where(c => c.Id == id)
.FirstOrDefaultAsync(token);
if (contact is null)
throw new ForbidException("Contact doesn't exist");
db.Contacts.Remove(contact);
return await db.SaveChangesAsync(token);
}
private async Task<Contact?> GetContact(int idWell, int idContact, CancellationToken token)
{
var contact = await db.Contacts
.Where(c => c.IdWell == idWell)
.Where(c => c.Id == idContact)
.FirstOrDefaultAsync(token);
return contact;
}
}
}