Files
cms_thermo_active/Step/Controllers/WebApi/ApiAlarmController.cs
T
2018-10-29 17:00:35 +01:00

266 lines
10 KiB
C#

using Step.Database.Controllers;
using Step.Model.DatabaseModels;
using Step.Model.DTOModels.AlarmModels;
using Step.Provider;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Security.Claims;
using System.Threading.Tasks;
using System.Web.Http;
using static Step.Model.Constants;
namespace Step.Controllers.WebApi
{
[RoutePrefix("api/alarm")]
public class ApiAlarmController : ApiController
{
//[Route(""), HttpGet]
//public IHttpActionResult GetAll(int page, int pageSize)
//{
// using (AlarmsController alarm = new AlarmsController())
// {
// var a = alarm.GetPaginated(page, pageSize);
// return Ok(a);
// }
//}
[Route("paginated"), HttpPost]
public IHttpActionResult GetFiltered([FromBody]DTOAlarmsFilterModel data)
{
using (AlarmsController alarm = new AlarmsController())
{
var alarms = alarm.GetPaginatedWithFilter(data.Title, data.Type, data.Page - 1, data.PageSize, data.StartDate, data.EndDate, data.UserIds);
return Ok(alarms);
}
}
[Route("data"), HttpPost]
public IHttpActionResult GetAlarmsData(int pageSize)
{
using (AlarmsController alarmController = new AlarmsController())
{
var alarms = alarmController.GetAlarmsData(pageSize);
return Ok(alarms);
}
}
#region Note
[Route("{alarmDescId:int}/note"), HttpGet]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.READ)]
public IHttpActionResult GetAlarmNotes(int alarmDescId)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
using (AlarmsController alarmsController = new AlarmsController())
{
// Check if alarm desc exists
AlarmDescriptionsModel dbAlarm = alarmsController.FindById(alarmDescId);
if (dbAlarm == null)
return NotFound();
// Update data
List<DTOAlarmNoteModel> notes = alarmsController.GetNotesByAlarmDescId(alarmDescId);
return Ok(notes);
}
}
[Route("{alarmDescId:int}/note"), HttpPost]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.WRITE)]
public IHttpActionResult AddAlarmNote(int alarmDescId, DTONewAlarmNoteModel note)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
var identity = User.Identity as ClaimsIdentity;
// Find user id from the bearer token
var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault();
using (AlarmsController alarmsController = new AlarmsController())
{
// Check if alarm desc exists
AlarmDescriptionsModel dbAlarm = alarmsController.FindById(alarmDescId);
if (dbAlarm == null)
return NotFound();
// Update data
DTOAlarmNoteModel notes = alarmsController.CreateNote(Convert.ToInt32(userId.Value), alarmDescId, note);
return Ok(notes);
}
}
[Route("{alarmDescId:int}/note/{noteId:int}"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)]
public IHttpActionResult EditAlarmNote(int noteId, DTONewAlarmNoteModel newNote)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
var identity = User.Identity as ClaimsIdentity;
// Find user id from the bearer token
var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault();
using (AlarmsController alarmsController = new AlarmsController())
{
// Check if alarm desc exists
AlarmNoteModel dbNote = alarmsController.FindNoteById(noteId);
if (dbNote == null)
return NotFound();
// Check if user is different
if (dbNote.UserId != Convert.ToInt32(userId.Value))
return Unauthorized();
// Update data
DTOAlarmNoteModel notes = alarmsController.UpdateNote(dbNote, newNote);
return Ok(notes);
}
}
[Route("{alarmDescId:int}/note/{noteId:int}"), HttpDelete]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)]
public IHttpActionResult DeleteAlarmNote(int noteId)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
var identity = User.Identity as ClaimsIdentity;
// Find user id from the bearer token
var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault();
using (AlarmsController alarmsController = new AlarmsController())
{
// Check if alarm desc exists
AlarmNoteModel dbNote = alarmsController.FindNoteById(noteId);
if (dbNote == null)
return NotFound();
// Check if user is different
if (dbNote.UserId != Convert.ToInt32(userId.Value))
return Unauthorized();
// Update data
alarmsController.DeleteNote(dbNote.NoteId);
return Ok();
}
}
#endregion Note
#region Attachment
[Route("{alarmDescId:int}/attachments"), HttpGet]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.READ)]
public IHttpActionResult GetAttachmentsByAlarmId(int alarmDescId)
{
using (AlarmsController alarmsController = new AlarmsController())
{
// Check if alarm desc exists
AlarmDescriptionsModel dbAlarm = alarmsController.FindById(alarmDescId);
if (dbAlarm == null)
return NotFound();
List<AlarmFileModel> attachments = alarmsController.FindAttachmentByAlarmDescId(alarmDescId);
return Ok(attachments);
}
}
[Route("attachment/{attachmentId:int}"), HttpGet]
public IHttpActionResult GetAttachment(int attachmentId)
{
using (AlarmsController alarmsController = new AlarmsController())
{
// Check if attachment exist in db or physically
AlarmFileModel attachment = alarmsController.FindAttachmentById(attachmentId);
if (attachment == null)
return NotFound();
if (!File.Exists(ALARM_ATTACHMENT_PATH + attachment.LocalFileName))
return NotFound();
return new FileResult(ALARM_ATTACHMENT_PATH + attachment.LocalFileName);
}
}
[Route("{alarmDescId:int}/attachment"), HttpPost]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)]
public async Task<IHttpActionResult> AddAttachment(int alarmDescId)
{
var identity = User.Identity as ClaimsIdentity;
// Find user id from the bearer token
var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault();
// Check whether the POST operation is MultiPart?
if (!Request.Content.IsMimeMultipartContent())
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
// Create CustomMultipartFormDataStreamProvider
CustomMultipartFormDataStreamProvider provider = new CustomMultipartFormDataStreamProvider(ALARM_ATTACHMENT_PATH);
List<string> files = new List<string>();
// Read all contents of multipart message into CustomMultipartFormDataStreamProvider.
var result = await Request.Content.ReadAsMultipartAsync(provider);
AlarmFileModel attachment = null;
using (AlarmsController alarmsController = new AlarmsController())
{
// Check if alarm desc exists
AlarmDescriptionsModel dbAlarm = alarmsController.FindById(alarmDescId);
if (dbAlarm == null)
return NotFound();
// TODO: Remove foreach
foreach (MultipartFileData file in provider.FileData)
{
var fileName = Path.GetFileName(file.LocalFileName);
files.Add(fileName);
attachment = alarmsController.AddAttachment(file.Headers.ContentDisposition.FileName.Replace("\"", string.Empty), fileName, alarmDescId, Convert.ToInt32(userId.Value));
}
}
// Send OK Response along with saved file names to the client.
return Ok(attachment);
}
[Route("attachment/{attachmentId:int}"), HttpDelete]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)]
public IHttpActionResult DeleteAttachment(int attachmentId)
{
var identity = User.Identity as ClaimsIdentity;
// Find user id from the bearer token
var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault();
using (AlarmsController alarmsController = new AlarmsController())
{
// Get single file
AlarmFileModel attachment = alarmsController.FindAttachmentById(attachmentId);
// Check if exist in db or physically
if (attachment == null)
return NotFound();
// Check user
if (attachment.UserId != Convert.ToInt32(userId.Value))
return Unauthorized();
alarmsController.DeleteAttachment(attachment);
return Ok();
}
}
#endregion Attachment
}
}