109 lines
2.6 KiB
C#
109 lines
2.6 KiB
C#
using API.Authentication.Interfaces;
|
|
using API.DTO;
|
|
using API.Services.Interfaces;
|
|
using DAL.Contexts;
|
|
using DAL.Models;
|
|
using DAL.Models.Audits;
|
|
using System.Linq.Expressions;
|
|
|
|
namespace API.Services
|
|
{
|
|
public class ServiceBase<TLoggerCategory, TDTO, TModel, TAudit, TAuthentication> : IGenericService<TDTO, TModel, TAudit>
|
|
where TAuthentication : IGenericAuthentication<TDTO, TModel>
|
|
where TModel : Model<TModel, TAudit>
|
|
where TAudit : AuditModel<TModel>
|
|
where TDTO : IAdaptable<TModel>
|
|
{
|
|
public readonly TAuthentication _auth;
|
|
private readonly ILogger<TLoggerCategory> _logger;
|
|
public readonly SASGContext Context;
|
|
|
|
public ServiceBase(ILogger<TLoggerCategory> logger, SASGContext context, TAuthentication auth)
|
|
{
|
|
_logger = logger;
|
|
Context = context;
|
|
_auth = auth;
|
|
}
|
|
|
|
public TModel? get(ulong id, User user)
|
|
{
|
|
TModel? result = Context.Set<TModel>().Find(id);
|
|
if (result == null)
|
|
return null;
|
|
|
|
return _auth.canGet(result, user) ? result : null;
|
|
}
|
|
|
|
public IEnumerable<TModel>? get(User user, Expression<Func<TModel, bool>>? whereClause = null)
|
|
{
|
|
if (!_auth.canGetAll(user))
|
|
return null;
|
|
|
|
return whereClause != null ? Context.Set<TModel>().Where(whereClause) : Context.Set<TModel>();
|
|
}
|
|
|
|
public TModel? getNoAuthentication(ulong id)
|
|
{
|
|
return Context.Set<TModel>().Find(id);
|
|
}
|
|
|
|
public IEnumerable<TModel> getNoAuthentication(Expression<Func<TModel, bool>>? whereClause = null)
|
|
{
|
|
return whereClause != null ? Context.Set<TModel>().Where(whereClause) : Context.Set<TModel>();
|
|
}
|
|
|
|
public TModel? add(TDTO item, User user)
|
|
{
|
|
if (!_auth.canAdd(item, user))
|
|
return null;
|
|
|
|
TModel model = item.adaptToModel();
|
|
|
|
model.updater = user.id;
|
|
model.updated = DateTime.Now;
|
|
Context.Add(model);
|
|
Context.SaveChanges();
|
|
|
|
return model;
|
|
}
|
|
|
|
public TModel? update(TModel model, User user)
|
|
{
|
|
if (!_auth.canUpdate(model, user))
|
|
return null;
|
|
|
|
TModel? origModel = Context.Set<TModel>().Find(model.id);
|
|
if (origModel == null)
|
|
return null;
|
|
|
|
model.updateModel(ref origModel);
|
|
|
|
origModel.updated = DateTime.Now;
|
|
origModel.updater = user.id;
|
|
|
|
Context.SaveChanges();
|
|
|
|
return origModel;
|
|
}
|
|
|
|
public TAudit? delete(TModel model, User user)
|
|
{
|
|
if (!_auth.canDelete(model, user))
|
|
return null;
|
|
|
|
TModel? origModel = Context.Set<TModel>().Find(model.id);
|
|
if (origModel == null)
|
|
return null;
|
|
|
|
origModel.updated = DateTime.Now;
|
|
origModel.updater = user.id;
|
|
Context.SaveChanges();
|
|
|
|
Context.Remove(origModel);
|
|
Context.SaveChanges();
|
|
|
|
return origModel.adaptToAudit();
|
|
}
|
|
}
|
|
}
|