ServiceObjectDs.cs 3.95 KB
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 ServiceObjectDs : IServiceObjectDs
    {
        private PostgresDbContext _context;
        public ServiceObjectDs(){
            _context = new PostgresDbContext();
        }
        public Task<IList<ServiceObjectEditDsM>> GetIndexListAsync(PaginationDsM pagination){
            return Task.Factory.StartNew(()=> { return GetAllServiceObject(pagination); });
        }
        private IList<ServiceObjectEditDsM> GetAllServiceObject(PaginationDsM pagination)
        {
            var data =  _context.ServiceObject.Select(ServiceObject => new ServiceObjectEditDsM
            {
                Id = ServiceObject.Id,
                RoadId = ServiceObject.RoadId,
                RegionId = ServiceObject.RegionId,
                SettlementId = ServiceObject.SettlementId,
                LocationLeft = ServiceObject.LocationLeft,
                LocationRight = ServiceObject.LocationRight,
                ServiceObjectTypeId = ServiceObject.ServiceObjectTypeId,
                DepartmentAffiliationId = ServiceObject.DepartmentAffiliationId,
                LocationAxis = ServiceObject.LocationAxis,
                Distance = ServiceObject.Distance,
                Capacity = ServiceObject.Capacity,
                ArrangementElements = ServiceObject.ArrangementElements,
              }).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<ServiceObject> CreateAsync(ServiceObjectEditDsM data){
            return Task.Factory.StartNew(()=> { return Create(data); });
        }
        private ServiceObject Create(ServiceObjectEditDsM data)
        {   
            ServiceObject Model = InsertModel(data);
            _context.ServiceObject.Add(Model);
            _context.SaveChanges();
            return Model;
        }
        public Task<ServiceObject> UpdateAsync(ServiceObjectEditDsM data, int id){
            return Task.Factory.StartNew(()=> { return Update(data, id); });
        }
        private ServiceObject Update(ServiceObjectEditDsM data, int id)
        {   
            ServiceObject Model = InsertModel(data);
            Model.Id = id;
            _context.ServiceObject.Update(Model);
            _context.SaveChanges();
            return Model;
        }
        public ServiceObject InsertModel(ServiceObjectEditDsM data){
         ServiceObject Model = new ServiceObject{
                Id = data.Id,
                RoadId = data.RoadId,
                RegionId = data.RegionId,
                SettlementId = data.SettlementId,
                LocationLeft = data.LocationLeft,
                LocationRight = data.LocationRight,
                ServiceObjectTypeId = data.ServiceObjectTypeId,
                DepartmentAffiliationId = data.DepartmentAffiliationId,
                LocationAxis = data.LocationAxis,
                Distance = data.Distance,
                Capacity = data.Capacity,
                ArrangementElements = data.ArrangementElements,
            };
            return Model;
        }
        public async Task<int> DeleteAsync(int Id)
        {
            var ServiceObject = await _context.ServiceObject.SingleOrDefaultAsync(x => x.Id == Id);
            _context.ServiceObject.Remove(ServiceObject);
            return await _context.SaveChangesAsync();
        }
    }
}