using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using MapsDb.Interfaces; using MapsDb.Models; using MapsModels.DsModels; using System.Reflection; using Microsoft.EntityFrameworkCore; namespace MapsDb.DataService { public class RoadSurfaceDs : IRoadSurfaceDs { private PostgresDbContext _context; public RoadSurfaceDs(){ _context = new PostgresDbContext(); } public Task> GetIndexListAsync(PaginationDsM pagination){ return Task.Factory.StartNew(()=> { return GetAllRoadSurface(pagination); }); } private IList GetAllRoadSurface(PaginationDsM pagination) { var data = _context.RoadSurface.Select(RoadSurface => new RoadSurfaceEditDsM { Id = RoadSurface.Id, RoadId = RoadSurface.RoadId, RegionId = RoadSurface.RegionId, RoadDirectionId = RoadSurface.RoadDirectionId, Begin = RoadSurface.Begin, End = RoadSurface.End, SurfaceTypeId = RoadSurface.SurfaceTypeId, SurfaceTreatmentId = RoadSurface.SurfaceTreatmentId, StateCommonId = RoadSurface.StateCommonId, }).Skip(pagination.from).Take(pagination.perPage); switch (pagination.orderType()) { case "ASC": return data.OrderBy(i => i.GetType().GetProperty(pagination.sort).GetValue(i, null)).ToList(); case "DESC": return data.OrderByDescending(i => i.GetType().GetProperty(pagination.sort).GetValue(i, null)).ToList(); default: return data.OrderByDescending(i => i.Id).ToList(); } } public Task CreateAsync(RoadSurfaceEditDsM data){ return Task.Factory.StartNew(()=> { return Create(data); }); } private RoadSurface Create(RoadSurfaceEditDsM data) { RoadSurface Model = InsertModel(data); _context.RoadSurface.Add(Model); _context.SaveChanges(); return Model; } public Task UpdateAsync(RoadSurfaceEditDsM data, int id){ return Task.Factory.StartNew(()=> { return Update(data, id); }); } private RoadSurface Update(RoadSurfaceEditDsM data, int id) { RoadSurface Model = InsertModel(data); Model.Id = id; _context.RoadSurface.Update(Model); _context.SaveChanges(); return Model; } public RoadSurface InsertModel(RoadSurfaceEditDsM data){ RoadSurface Model = new RoadSurface{ Id = data.Id, RoadId = data.RoadId, RegionId = data.RegionId, RoadDirectionId = data.RoadDirectionId, Begin = data.Begin, End = data.End, SurfaceTypeId = data.SurfaceTypeId, SurfaceTreatmentId = data.SurfaceTreatmentId, StateCommonId = data.StateCommonId, }; return Model; } public async Task DeleteAsync(int Id) { var RoadSurface = await _context.RoadSurface.SingleOrDefaultAsync(x => x.Id == Id); _context.RoadSurface.Remove(RoadSurface); return await _context.SaveChangesAsync(); } } }