PageRenderTime 37ms CodeModel.GetById 11ms RepoModel.GetById 1ms app.codeStats 0ms

/src/Server/DeviceHive.API/Controllers/DeviceClassController.cs

https://github.com/oryol/devicehive-.net
C# | 118 lines | 67 code | 13 blank | 38 comment | 10 complexity | 9b08e9435ce0f6768df013dc16a2c934 MD5 | raw file
Possible License(s): MIT
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Web.Http;
  6. using DeviceHive.API.Filters;
  7. using DeviceHive.API.Mapping;
  8. using DeviceHive.Data.Model;
  9. using Newtonsoft.Json.Linq;
  10. namespace DeviceHive.API.Controllers
  11. {
  12. /// <resource cref="DeviceClass" />
  13. public class DeviceClassController : BaseController
  14. {
  15. /// <name>list</name>
  16. /// <summary>
  17. /// Gets list of device classes.
  18. /// </summary>
  19. /// <returns cref="DeviceClass">If successful, this method returns array of <see cref="DeviceClass"/> resources in the response body.</returns>
  20. [AuthorizeUser(Roles = "Administrator")]
  21. public JArray Get()
  22. {
  23. return new JArray(DataContext.DeviceClass.GetAll().Select(dc => Mapper.Map(dc)));
  24. }
  25. /// <name>get</name>
  26. /// <summary>
  27. /// Gets information about device class and its equipment.
  28. /// </summary>
  29. /// <param name="id">Device class identifier.</param>
  30. /// <returns cref="DeviceClass">If successful, this method returns a <see cref="DeviceClass"/> resource in the response body.</returns>
  31. /// <response>
  32. /// <parameter name="equipment" type="array" cref="Equipment">Array of equipment included into devices of the current class.</parameter>
  33. /// </response>
  34. [AuthorizeUser]
  35. public JObject Get(int id)
  36. {
  37. var deviceClass = DataContext.DeviceClass.Get(id);
  38. if (deviceClass == null)
  39. ThrowHttpResponse(HttpStatusCode.NotFound, "Device class not found!");
  40. var jDeviceClass = Mapper.Map(deviceClass);
  41. var equipmentMapper = GetMapper<Equipment>();
  42. var equipment = DataContext.Equipment.GetByDeviceClass(id);
  43. jDeviceClass["equipment"] = new JArray(equipment.Select(e => equipmentMapper.Map(e)));
  44. return jDeviceClass;
  45. }
  46. /// <name>insert</name>
  47. /// <summary>
  48. /// Creates new device class.
  49. /// </summary>
  50. /// <param name="json" cref="DeviceClass">In the request body, supply a <see cref="DeviceClass"/> resource.</param>
  51. /// <returns cref="DeviceClass">If successful, this method returns a <see cref="DeviceClass"/> resource in the response body.</returns>
  52. [HttpCreatedResponse]
  53. [AuthorizeUser(Roles = "Administrator")]
  54. public JObject Post(JObject json)
  55. {
  56. var deviceClass = Mapper.Map(json);
  57. Validate(deviceClass);
  58. if (DataContext.DeviceClass.Get(deviceClass.Name, deviceClass.Version) != null)
  59. ThrowHttpResponse(HttpStatusCode.Forbidden, "Device class with such name and version already exists!");
  60. DataContext.DeviceClass.Save(deviceClass);
  61. return Mapper.Map(deviceClass);
  62. }
  63. /// <name>update</name>
  64. /// <summary>
  65. /// Updates an existing device class.
  66. /// </summary>
  67. /// <param name="id">Device class identifier.</param>
  68. /// <param name="json" cref="DeviceClass">In the request body, supply a <see cref="DeviceClass"/> resource.</param>
  69. /// <returns cref="DeviceClass">If successful, this method returns a <see cref="DeviceClass"/> resource in the response body.</returns>
  70. /// <request>
  71. /// <parameter name="name" required="false" />
  72. /// <parameter name="version" required="false" />
  73. /// <parameter name="isPermanent" required="false" />
  74. /// </request>
  75. [AuthorizeUser(Roles = "Administrator")]
  76. public JObject Put(int id, JObject json)
  77. {
  78. var deviceClass = DataContext.DeviceClass.Get(id);
  79. if (deviceClass == null)
  80. ThrowHttpResponse(HttpStatusCode.NotFound, "Device class not found!");
  81. Mapper.Apply(deviceClass, json);
  82. Validate(deviceClass);
  83. var existing = DataContext.DeviceClass.Get(deviceClass.Name, deviceClass.Version);
  84. if (existing != null && existing.ID != deviceClass.ID)
  85. ThrowHttpResponse(HttpStatusCode.Forbidden, "Device class with such name and version already exists!");
  86. DataContext.DeviceClass.Save(deviceClass);
  87. return Mapper.Map(deviceClass);
  88. }
  89. /// <name>delete</name>
  90. /// <summary>
  91. /// Deletes an existing device class.
  92. /// </summary>
  93. /// <param name="id">Device class identifier.</param>
  94. [HttpNoContentResponse]
  95. [AuthorizeUser(Roles = "Administrator")]
  96. public void Delete(int id)
  97. {
  98. DataContext.DeviceClass.Delete(id);
  99. }
  100. private IJsonMapper<DeviceClass> Mapper
  101. {
  102. get { return GetMapper<DeviceClass>(); }
  103. }
  104. }
  105. }