diff --git a/AsbCloudApp/Data/IId.cs b/AsbCloudApp/Data/IId.cs new file mode 100644 index 00000000..77e45a4d --- /dev/null +++ b/AsbCloudApp/Data/IId.cs @@ -0,0 +1,7 @@ +namespace AsbCloudApp.Data +{ + public interface IId + { + public int Id { get; set; } + } +} diff --git a/AsbCloudApp/Data/WellDto.cs b/AsbCloudApp/Data/WellDto.cs index e84f7979..108404b7 100644 --- a/AsbCloudApp/Data/WellDto.cs +++ b/AsbCloudApp/Data/WellDto.cs @@ -1,7 +1,7 @@ namespace AsbCloudApp.Data { - public class WellDto : WellInfoDto, IMapPoint + public class WellDto : WellInfoDto, IMapPoint, IId { public int Id { get; set; } public double? Latitude { get; set; } diff --git a/AsbCloudApp/Data/WellOperationDto.cs b/AsbCloudApp/Data/WellOperationDto.cs index 8867736f..384789da 100644 --- a/AsbCloudApp/Data/WellOperationDto.cs +++ b/AsbCloudApp/Data/WellOperationDto.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace AsbCloudApp.Data { - public class WellOperationDto + public class WellOperationDto : IId { public int Id { get; set; } diff --git a/AsbCloudApp/Data/WellSectionDto.cs b/AsbCloudApp/Data/WellSectionDto.cs index bfe8c79a..6d7a476c 100644 --- a/AsbCloudApp/Data/WellSectionDto.cs +++ b/AsbCloudApp/Data/WellSectionDto.cs @@ -1,6 +1,6 @@ namespace AsbCloudApp.Data { - public class WellSectionDto + public class WellSectionDto: IId { public int Id { get; set; } /// diff --git a/AsbCloudApp/Data/WellStatDto.cs b/AsbCloudApp/Data/WellStatDto.cs index ed6e74e5..3437fec9 100644 --- a/AsbCloudApp/Data/WellStatDto.cs +++ b/AsbCloudApp/Data/WellStatDto.cs @@ -3,8 +3,9 @@ using System.Collections.Generic; namespace AsbCloudApp.Data { - public class WellStatDto : WellDto + public class WellStatDto : WellDto, IId { + public int Id { get; set; } public DateTime? PlanStart { get; set; } public DateTime? PlanEnd { get; set; } public DateTime? FactStart { get; set; } diff --git a/AsbCloudApp/Services/ICrudService.cs b/AsbCloudApp/Services/ICrudService.cs new file mode 100644 index 00000000..c4b93207 --- /dev/null +++ b/AsbCloudApp/Services/ICrudService.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq.Expressions; + +namespace AsbCloudApp.Services +{ + public interface ICrudService + where Tdto : Data.IId + { + int Delete(int id); + Tdto Get(int id); + IEnumerable GetAll(Expression> predicate = null); + Tdto Insert(Tdto newItem); + IEnumerable InsertRange(IEnumerable newItems); + Tdto Update(Tdto item); + } +} \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/CrudService.cs b/AsbCloudInfrastructure/Services/CrudService.cs index 5ce7a071..a21b709b 100644 --- a/AsbCloudInfrastructure/Services/CrudService.cs +++ b/AsbCloudInfrastructure/Services/CrudService.cs @@ -8,8 +8,9 @@ using Microsoft.Extensions.Configuration; namespace AsbCloudInfrastructure.Services { - public class CrudService - where TModel : class, IId + public class CrudService : ICrudService + where TModel : class, AsbCloudDb.Model.IId + where Tdto : AsbCloudApp.Data.IId { private readonly DbContext context; private readonly IAsbCloudDbContext db; @@ -21,11 +22,11 @@ namespace AsbCloudInfrastructure.Services dbSet = context.Set(); } - public IEnumerable GetAll(System.Linq.Expressions.Expression< System.Func> predicate = null) + public IEnumerable GetAll(System.Linq.Expressions.Expression> predicate = null) { IQueryable entities = dbSet; - if(predicate is not null) + if (predicate is not null) entities = entities.Where(predicate); var dto = entities.Adapt(); @@ -50,7 +51,7 @@ namespace AsbCloudInfrastructure.Services public IEnumerable InsertRange(IEnumerable newItems) { - var newEntities = newItems.Adapt< IEnumerable>(); + var newEntities = newItems.Adapt>(); var dbEntities = new Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry[newItems.Count()]; for (int i = 0; i < dbEntities.Length; i++) diff --git a/AsbCloudWebApi/Controllers/CrudController.cs b/AsbCloudWebApi/Controllers/CrudController.cs new file mode 100644 index 00000000..55ef87f4 --- /dev/null +++ b/AsbCloudWebApi/Controllers/CrudController.cs @@ -0,0 +1,70 @@ +using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; +using AsbCloudApp.Data; +using AsbCloudApp.Services; + +// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 + +namespace AsbCloudWebApi.Controllers +{ + [ApiController] + public abstract class CrudController : ControllerBase + where T: IId + { + protected readonly ICrudService service; + + public CrudController(ICrudService service) + { + this.service = service; + } + + // GET: api/ + //[HttpGet] + //public virtual IActionResult GetAll() + //{ + // var result = service.GetAll(); + // return Ok(result); + //} + + // GET api//5 + [HttpGet("{id}")] + + public virtual IActionResult Get(int id) + { + var result = service.Get(id); + return Ok(result); + } + + // POST api/ + [HttpPost] + public virtual IActionResult Insert([FromBody] T value) + { + var result = service.Insert(value); + return Ok(result); + } + + //[HttpPost] + //[Route("Range/")] + //public virtual IActionResult InsertRange([FromBody] IEnumerable value) + //{ + // var result = service.InsertRange(value); + // return Ok(result); + //} + + // PUT api//5 + [HttpPut("{id}")] + public virtual IActionResult Put(int id, [FromBody] T value) + { + var result = service.Update(value); + return Ok(result); + } + + // DELETE api//5 + [HttpDelete("{id}")] + public virtual IActionResult Delete(int id) + { + var result = service.Delete(id); + return Ok(result); + } + } +} diff --git a/AsbCloudWebApi/Controllers/WellSectionController.cs b/AsbCloudWebApi/Controllers/WellSectionController.cs new file mode 100644 index 00000000..bbc375e6 --- /dev/null +++ b/AsbCloudWebApi/Controllers/WellSectionController.cs @@ -0,0 +1,32 @@ +using AsbCloudApp.Data; +using AsbCloudApp.Services; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace AsbCloudWebApi.Controllers +{ + [Route("api/well/{idWell}")] + [ApiController] + [Authorize] + public class WellSectionController : CrudController + { + public WellSectionController(ICrudService service) + :base(service) + { + + } + + [HttpGet] + [Route("")] + public virtual IActionResult GetAll() + { + var result = service.GetAll(); + return Ok(result); + } + } +}