using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using MongoDB.Bson;
using MyCore.Interfaces.Models;
using MyCore.Services;
namespace MyCore.Controllers
{
[Authorize] // TODO Add ROLES (Roles = "Admin")
[Route("api/device/screen")]
[ApiController]
public class ScreenDeviceController : ControllerBase
{
private readonly ScreenDeviceDatabaseService _ScreenDeviceDatabaseService;
public ScreenDeviceController(ScreenDeviceDatabaseService ScreenDeviceDatabaseService)
{
_ScreenDeviceDatabaseService = ScreenDeviceDatabaseService;
}
///
/// Get all screen devices
///
[ProducesResponseType(typeof(List), 200)]
[ProducesResponseType(typeof(string), 500)]
[HttpGet]
public ObjectResult GetAllScreenDevices()
{
try
{
List screenDevices = _ScreenDeviceDatabaseService.GetAll();
return new OkObjectResult(screenDevices);
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
///
/// Get screen device info
///
/// Id of the screen device you want to get information
[ProducesResponseType(typeof(ScreenDevice), 200)]
[ProducesResponseType(typeof(string), 400)]
[ProducesResponseType(typeof(string), 404)]
[ProducesResponseType(typeof(string), 500)]
[HttpGet("{screenDeviceId}")]
public ObjectResult GetDeviceInfo(string screenDeviceId)
{
try
{
if (screenDeviceId == null)
throw new ArgumentNullException("Incorrect parameters");
ScreenDevice screenDevice = _ScreenDeviceDatabaseService.GetInfo(screenDeviceId);
if (screenDevice == null)
throw new KeyNotFoundException("Screen device not found");
return new OkObjectResult(screenDevice);
}
catch (ArgumentNullException ex)
{
return new BadRequestObjectResult(ex.Message) {};
}
catch (KeyNotFoundException ex)
{
return new NotFoundObjectResult(ex.Message) {};
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
///
/// Create screen device
///
/// Screen device to create
[ProducesResponseType(typeof(ScreenDevice), 200)]
[ProducesResponseType(typeof(string), 400)]
[HttpPost]
public ObjectResult CreateDevice([FromBody] ScreenDevice screenDevice)
{
try
{
if (screenDevice == null)
throw new ArgumentNullException("Incorrect parameters");
_ScreenDeviceDatabaseService.Create(screenDevice);
return new OkObjectResult(screenDevice);
}
catch (ArgumentNullException ex)
{
return new BadRequestObjectResult(ex.Message) {};
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
///
/// Update screen device
///
/// Screen device to update
[ProducesResponseType(typeof(ScreenDevice), 200)]
[ProducesResponseType(typeof(string), 400)]
[ProducesResponseType(typeof(string), 404)]
[ProducesResponseType(typeof(string), 500)]
[HttpPut()]
public ObjectResult UpdateDevice([FromBody] ScreenDevice screenDevice)
{
try
{
if (screenDevice == null)
throw new ArgumentNullException("Incorrect parameters");
if (!_ScreenDeviceDatabaseService.IsExist(screenDevice.Id))
throw new KeyNotFoundException("Screen device does not exist");
_ScreenDeviceDatabaseService.Update(screenDevice.Id, screenDevice);
return new OkObjectResult(screenDevice);
}
catch (ArgumentNullException ex)
{
return new BadRequestObjectResult(ex.Message) {};
}
catch (KeyNotFoundException ex)
{
return new NotFoundObjectResult(ex.Message) {};
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
///
/// Delete device
///
/// Screen device id to update
[ProducesResponseType(typeof(string), 202)]
[ProducesResponseType(typeof(string), 400)]
[ProducesResponseType(typeof(string), 404)]
[ProducesResponseType(typeof(string), 500)]
[HttpDelete("{deviceId}")]
public ObjectResult DeleteDevice(string deviceId)
{
try
{
if (deviceId == null)
throw new ArgumentNullException("Incorrect parameters");
if (!_ScreenDeviceDatabaseService.IsExist(deviceId))
throw new KeyNotFoundException("Device does not exist");
_ScreenDeviceDatabaseService.Remove(deviceId);
return new ObjectResult("The screen device has been successfully deleted") { StatusCode = 202 };
}
catch (ArgumentNullException ex)
{
return new BadRequestObjectResult(ex.Message) {};
}
catch (KeyNotFoundException ex)
{
return new NotFoundObjectResult(ex.Message) {};
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
}
}