forked from ddrilling/AsbCloudServer
105 lines
3.1 KiB
C#
105 lines
3.1 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 dbContact = await GetContact(contactDto.IdWell, contactDto.Id, token);
|
|
if (dbContact is null)
|
|
throw new ForbidException("Contact doesn't exist");
|
|
|
|
var entity = contactDto.Adapt<Contact>();
|
|
db.Contacts.Update(entity);
|
|
|
|
return await db.SaveChangesAsync(token);
|
|
}
|
|
|
|
public async Task<int> DeleteAsync(int idWell, int id, CancellationToken token)
|
|
{
|
|
var dbContact = await GetContact(idWell, id, token);
|
|
if (dbContact is null)
|
|
throw new ForbidException("Contact doesn't exist");
|
|
|
|
db.Contacts.Remove(dbContact);
|
|
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)
|
|
.AsNoTracking()
|
|
.FirstOrDefaultAsync(token);
|
|
|
|
return contact;
|
|
}
|
|
}
|
|
}
|