using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.JsonPatch; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using AyaNova.Models; using AyaNova.Api.ControllerHelpers; using AyaNova.Biz; namespace AyaNova.Api.Controllers { /// /// /// [ApiController] [ApiVersion("8.0")] [Route("api/v{version:apiVersion}/[controller]")] [Produces("application/json")] [Authorize] public class DataListTemplateController : ControllerBase { private readonly AyContext ct; private readonly ILogger log; private readonly ApiServerState serverState; /// /// ctor /// /// /// /// public DataListTemplateController(AyContext dbcontext, ILogger logger, ApiServerState apiServerState) { ct = dbcontext; log = logger; serverState = apiServerState; } /// /// Get full DataListTemplate object /// /// Required roles: /// Any (for public filter), owned only for private filter /// /// /// A single DataListTemplate [HttpGet("{id}")] public async Task GetDataListTemplate([FromRoute] long id) { if (serverState.IsClosed) return StatusCode(503, new ApiErrorResponse(ApiErrorCode.API_CLOSED, null, serverState.Reason)); //Instantiate the business object handler DataListTemplateBiz biz = DataListTemplateBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.GetAsync(id); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, biz.BizType))); } /// /// Get DataListTemplate pick list /// /// Required roles: Any /// /// /// List of public or owned data filters for listKey provided [HttpGet("PickList", Name = nameof(DataListTemplatePickList))] public async Task DataListTemplatePickList([FromQuery] string ListKey) { if (serverState.IsClosed) return StatusCode(503, new ApiErrorResponse(ApiErrorCode.API_CLOSED, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); //Instantiate the business object handler DataListTemplateBiz biz = DataListTemplateBiz.GetBiz(ct, HttpContext); var l = await biz.GetPickListAsync(ListKey); return Ok(ApiOkResponse.Response(l, true)); } /// /// Put (update) DataListTemplate /// /// Required roles: /// Any (public filter) or owned only (private filter) /// /// /// /// /// [HttpPut("{id}")] public async Task PutDataListTemplate([FromRoute] long id, [FromBody] DataListTemplate inObj) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(ApiErrorCode.API_CLOSED, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); //Instantiate the business object handler DataListTemplateBiz biz = DataListTemplateBiz.GetBiz(ct, HttpContext); var o = await biz.GetNoLogAsync(id); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); if (!Authorized.HasModifyRole(HttpContext.Items, biz.BizType)) return StatusCode(403, new ApiNotAuthorizedResponse()); try { if (!biz.Put(o, inObj)) return BadRequest(new ApiErrorResponse(biz.Errors)); } catch (DbUpdateConcurrencyException) { if (!await biz.ExistsAsync(id)) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); else return StatusCode(409, new ApiErrorResponse(ApiErrorCode.CONCURRENCY_CONFLICT)); } return Ok(ApiOkResponse.Response(new { ConcurrencyToken = o.ConcurrencyToken }, true)); } /// /// Post DataListTemplate /// /// Required roles: /// BizAdminFull, InventoryFull, TechFull /// /// /// Automatically filled from route path, no need to specify in body /// [HttpPost] public async Task PostDataListTemplate([FromBody] DataListTemplate inObj, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(ApiErrorCode.API_CLOSED, null, serverState.Reason)); //Instantiate the business object handler DataListTemplateBiz biz = DataListTemplateBiz.GetBiz(ct, HttpContext); //If a user has change roles, or editOwnRoles then they can create, true is passed for isOwner since they are creating so by definition the owner if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); //Create and validate DataListTemplate o = await biz.CreateAsync(inObj); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(DataListTemplateController.GetDataListTemplate), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Delete DataListTemplate /// /// Required roles: /// Any if public otherwise creator only /// /// /// /// Ok [HttpDelete("{id}")] public async Task DeleteDataListTemplate([FromRoute] long id) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(ApiErrorCode.API_CLOSED, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); //Instantiate the business object handler DataListTemplateBiz biz = DataListTemplateBiz.GetBiz(ct, HttpContext); var o = await biz.GetNoLogAsync(id); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); if (!Authorized.HasDeleteRole(HttpContext.Items, biz.BizType)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!biz.Delete(o)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } //------------ }//eoc }//eons