using SessionCompanion.Database.Tables; using System; using System.Collections.Generic; using System.Text; using AutoMapper; using System.Threading.Tasks; using SessionCompanion.Database.Repositories.Base; using System.Linq.Expressions; using System.Linq; using Microsoft.EntityFrameworkCore; namespace SessionCompanion.Services.Base { public class ServiceBase : IServiceBase where TEntity : BaseEntity { protected IMapper Mapper { get; private set; } protected IRepository Repository { get; private set; } public ServiceBase(IMapper mapper, IRepository repository) { Mapper = mapper; Repository = repository; } public virtual IEnumerable Get() { var models = Repository.Get(); return Mapper.Map>(models); } public virtual async Task Get(int id) { var result = await Repository.Get(id); return Mapper.Map(result); } public virtual async Task> Get(Expression> expression) { var result = await Repository.Get(expression).ToListAsync(); return result; } public virtual async Task Create(TViewModel viewModel) { var model = Mapper.Map(viewModel); await Repository.Create(model); } public virtual async Task Update(int id, TViewModel viewModel) { var model = Mapper.Map(viewModel); model.Id = id; await Repository.Update(model); } public virtual async Task Delete(int id) { var model = await Repository.Get(id); Repository.Delete(model); } public virtual async Task SaveAsync() { await Repository.Save(); } public virtual void Dispose() { Repository.Dispose(); } } }