From 405bb8be4d26ba6af67691a5db7d8b812850eb43 Mon Sep 17 00:00:00 2001 From: yarik Date: Tue, 14 Feb 2017 18:28:33 +0200 Subject: [PATCH] Road --- src/Maps/Controllers/RoadController.cs | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/MapsDb/DataService/RoadDs.cs | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/MapsDb/DataService/RoadTypeDs.cs | 28 ++++++++++++++++++++++++++++ src/MapsDb/Interfaces/IRoadDs.cs | 4 ++++ src/MapsDb/Interfaces/IRoadTypeDs.cs | 11 +++++++++++ src/MapsDb/Models/Road.cs | 2 +- src/MapsDb/PostgresDbContext.cs | 2 +- src/MapsModels/DsModels/RoadEditDsM.cs | 19 +++++++++++++++++++ src/MapsModels/DsModels/RoadTypeSelectListDsM.cs | 8 ++++++++ src/MapsModels/ViewModels/CatalogListVm.cs | 1 + src/MapsModels/ViewModels/RoadListVm.cs | 10 ++++++++++ 11 files changed, 260 insertions(+), 3 deletions(-) create mode 100755 src/Maps/Controllers/RoadController.cs create mode 100644 src/MapsDb/DataService/RoadTypeDs.cs create mode 100644 src/MapsDb/Interfaces/IRoadTypeDs.cs create mode 100644 src/MapsModels/DsModels/RoadEditDsM.cs create mode 100644 src/MapsModels/DsModels/RoadTypeSelectListDsM.cs create mode 100644 src/MapsModels/ViewModels/RoadListVm.cs diff --git a/src/Maps/Controllers/RoadController.cs b/src/Maps/Controllers/RoadController.cs new file mode 100755 index 0000000..08ee93a --- /dev/null +++ b/src/Maps/Controllers/RoadController.cs @@ -0,0 +1,94 @@ +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.EntityFrameworkCore; +using MapsDb; +using MapsDb.Interfaces; +using MapsDb.DataService; +using MapsModels.ViewModels; +using MapsModels.DsModels; +using System; + +namespace Maps.Controllers +{ + public class RoadController : Controller + { + private readonly IRoadDs _roadDs; + private readonly IRoadTypeDs _roadTypeDs; + + public RoadController(IRoadDs RoadDs, IRoadTypeDs RoadTypeDs) + { + _roadDs = RoadDs; + _roadTypeDs = RoadTypeDs; + } + + // GET: Road + [HttpGet] + public async Task Index([FromQuery] PaginationDsM data) + { + try + { + var roads = await _roadDs.GetIndexListAsync(data); + + RoadListVm vm = new RoadListVm + { + RoadEditDsM = roads.ToList() + }; + + return Json(vm); + } + catch (NullReferenceException) + { + Response.StatusCode = 400; + return Json("There is no field with name " + data.sort); + } + catch (Exception) + { + return NotFound(); + } + + + } + + [HttpGet] + public async Task Directory(){ + var RoadTypes = await _roadTypeDs.GetSelectListAsync(); + + CatalogListVm vm = new CatalogListVm + { + RoadTypeSelectListDsM = RoadTypes.ToList() + }; + return Json(vm); + } + + + [HttpPost] + public async Task Create([FromBody] RoadEditDsM data) + { + var result = await _roadDs.CreateAsync(data); + return Json(result); + } + + [HttpPost] + public async Task Update(int id, [FromBody] RoadEditDsM data){ + await _roadDs.UpdateAsync(data,id); + return Json(String.Empty); + } + + + [HttpDelete] + public async Task Delete(int id) + { + try + { + int road = await _roadDs.DeleteAsync(id); + return Json(road); + } + catch (ArgumentNullException ) + { + return NotFound(); + } + } + } +} diff --git a/src/MapsDb/DataService/RoadDs.cs b/src/MapsDb/DataService/RoadDs.cs index cac9655..de807f7 100644 --- a/src/MapsDb/DataService/RoadDs.cs +++ b/src/MapsDb/DataService/RoadDs.cs @@ -4,6 +4,9 @@ using System.Threading.Tasks; using MapsDb.Interfaces; using MapsDb.Models; using MapsModels.DsModels; +using System.Reflection; +using Microsoft.EntityFrameworkCore; + namespace MapsDb.DataService { public class RoadDs : IRoadDs @@ -19,10 +22,89 @@ namespace MapsDb.DataService { return _context.Road.Select(x => new RoadSelectListDsM { - RoadId = x.RoadId, + RoadId = x.Id, Name = x.Name }).ToList(); } + public Task> GetIndexListAsync(PaginationDsM pagination){ + return Task.Factory.StartNew(()=> { return GetAllRoad(pagination); }); + } + private IList GetAllRoad(PaginationDsM pagination) + { + var data = _context.Road.Select(Road => new RoadEditDsM + { + Id = Road.Id, + Name = Road.Name, + Value = Road.Value, + Length = Road.Length, + HistoricalBackground = Road.HistoricalBackground, + EconomicValue = Road.EconomicValue, + LawDoc = Road.LawDoc, + AcceptTransferDoc = Road.AcceptTransferDoc, + AcceptanceDoc = Road.AcceptanceDoc, + AuthorityAct = Road.AuthorityAct, + RoadTypeId = Road.RoadTypeId, + Index = Road.Index + }).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(RoadEditDsM data){ + return Task.Factory.StartNew(()=> { return Create(data); }); + } + private Road Create(RoadEditDsM data) + { + + Road Model = InsertModel(data); + _context.Road.Add(Model); + _context.SaveChanges(); + return Model; + } + public Task UpdateAsync(RoadEditDsM data, int id){ + return Task.Factory.StartNew(()=> { return Update(data, id); }); + } + private Road Update(RoadEditDsM data, int id) + { + Road Model = InsertModel(data); + Model.Id = id; + _context.Road.Update(Model); + _context.SaveChanges(); + return Model; + } + public Road InsertModel(RoadEditDsM data){ + Road Model = new Road{ + Name = data.Name, + Value = data.Value, + Length = data.Length, + HistoricalBackground = data.HistoricalBackground, + EconomicValue = data.EconomicValue, + LawDoc = data.LawDoc, + AcceptTransferDoc = data.AcceptTransferDoc, + AcceptanceDoc = data.AcceptanceDoc, + AuthorityAct = data.AuthorityAct, + RoadTypeId = data.RoadTypeId, + Index = data.Index + }; + return Model; + } + public async Task DeleteAsync(int Id) + { + var road = await _context.Road.SingleOrDefaultAsync(x => x.Id == Id); + _context.Road.Remove(road); + return await _context.SaveChangesAsync(); + } + } } \ No newline at end of file diff --git a/src/MapsDb/DataService/RoadTypeDs.cs b/src/MapsDb/DataService/RoadTypeDs.cs new file mode 100644 index 0000000..04c6ee8 --- /dev/null +++ b/src/MapsDb/DataService/RoadTypeDs.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using MapsDb.Interfaces; +using MapsDb.Models; +using MapsModels.DsModels; +namespace MapsDb.DataService +{ + public class RoadTypeDs : IRoadTypeDs + { + private PostgresDbContext _context; + public RoadTypeDs(){ + _context = new PostgresDbContext(); + } + public Task> GetSelectListAsync(){ + return Task.Factory.StartNew(GetSelectList); + } + private IList GetSelectList() + { + return _context.RoadType.Select(x => new RoadTypeSelectListDsM + { + RoadTypeId = x.RoadTypeId, + Name = x.Value + }).ToList(); + } + + } +} \ No newline at end of file diff --git a/src/MapsDb/Interfaces/IRoadDs.cs b/src/MapsDb/Interfaces/IRoadDs.cs index 9cbe352..cc35ca9 100644 --- a/src/MapsDb/Interfaces/IRoadDs.cs +++ b/src/MapsDb/Interfaces/IRoadDs.cs @@ -7,5 +7,9 @@ namespace MapsDb.Interfaces public interface IRoadDs { Task> GetSelectListAsync(); + Task> GetIndexListAsync(PaginationDsM pagination); + Task CreateAsync(RoadEditDsM road); + Task UpdateAsync(RoadEditDsM road, int id); + Task DeleteAsync(int Id); } } \ No newline at end of file diff --git a/src/MapsDb/Interfaces/IRoadTypeDs.cs b/src/MapsDb/Interfaces/IRoadTypeDs.cs new file mode 100644 index 0000000..bd813e0 --- /dev/null +++ b/src/MapsDb/Interfaces/IRoadTypeDs.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using MapsModels.DsModels; +using MapsDb.Models; +namespace MapsDb.Interfaces +{ + public interface IRoadTypeDs + { + Task> GetSelectListAsync(); + } +} \ No newline at end of file diff --git a/src/MapsDb/Models/Road.cs b/src/MapsDb/Models/Road.cs index a37b481..d14ea95 100644 --- a/src/MapsDb/Models/Road.cs +++ b/src/MapsDb/Models/Road.cs @@ -19,7 +19,7 @@ namespace MapsDb.Models SettlementAddressLink = new HashSet(); } - public int RoadId { get; set; } + public int Id { get; set; } public string Name { get; set; } public string Value { get; set; } public double? Length { get; set; } diff --git a/src/MapsDb/PostgresDbContext.cs b/src/MapsDb/PostgresDbContext.cs index 449b44f..bf5addb 100644 --- a/src/MapsDb/PostgresDbContext.cs +++ b/src/MapsDb/PostgresDbContext.cs @@ -317,7 +317,7 @@ namespace MapsDb { entity.ToTable("road"); - entity.Property(e => e.RoadId).HasColumnName("road_id"); + entity.Property(e => e.Id).HasColumnName("id"); entity.Property(e => e.AcceptTransferDoc) .HasColumnName("accept_transfer_doc") diff --git a/src/MapsModels/DsModels/RoadEditDsM.cs b/src/MapsModels/DsModels/RoadEditDsM.cs new file mode 100644 index 0000000..0876cdf --- /dev/null +++ b/src/MapsModels/DsModels/RoadEditDsM.cs @@ -0,0 +1,19 @@ +namespace MapsModels.DsModels +{ + public class RoadEditDsM + { + public int Id { get; set; } + public string Name { get; set; } + public string Value { get; set; } + public double? Length { get; set; } + public string HistoricalBackground { get; set; } + public string EconomicValue { get; set; } + public string LawDoc { get; set; } + public string AcceptTransferDoc { get; set; } + public string AcceptanceDoc { get; set; } + public string AuthorityAct { get; set; } + public int? RoadTypeId { get; set; } + public int Index { get; set; } + + } +} \ No newline at end of file diff --git a/src/MapsModels/DsModels/RoadTypeSelectListDsM.cs b/src/MapsModels/DsModels/RoadTypeSelectListDsM.cs new file mode 100644 index 0000000..5784ce7 --- /dev/null +++ b/src/MapsModels/DsModels/RoadTypeSelectListDsM.cs @@ -0,0 +1,8 @@ +namespace MapsModels.DsModels +{ + public class RoadTypeSelectListDsM + { + public int RoadTypeId { get; set; } + public string Name { get; set; } + } +} \ No newline at end of file diff --git a/src/MapsModels/ViewModels/CatalogListVm.cs b/src/MapsModels/ViewModels/CatalogListVm.cs index cc5ab5e..ba936aa 100644 --- a/src/MapsModels/ViewModels/CatalogListVm.cs +++ b/src/MapsModels/ViewModels/CatalogListVm.cs @@ -14,5 +14,6 @@ namespace MapsModels.ViewModels public List RegionSelectListDsM { get; set; } public List RoadDirectionSelectListDsM { get; set; } public List SurfaceTreatmentSelectListDsM { get; set; } + public List RoadTypeSelectListDsM { get; set; } } } diff --git a/src/MapsModels/ViewModels/RoadListVm.cs b/src/MapsModels/ViewModels/RoadListVm.cs new file mode 100644 index 0000000..e85d675 --- /dev/null +++ b/src/MapsModels/ViewModels/RoadListVm.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using MapsModels.DsModels; + +namespace MapsModels.ViewModels +{ + public class RoadListVm + { + public List RoadEditDsM { get; set; } + } +} -- libgit2 0.21.4