Ringtone app
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

166 řádky
4.1 KiB

  1. import {inject, singleton} from 'tsyringe'
  2. import {RingtoneService} from './service'
  3. import {DoubleDeletionError} from './response'
  4. @singleton()
  5. export class RingtoneController {
  6. constructor(
  7. @inject('RingtoneService')
  8. private readonly ringtoneService: RingtoneService
  9. ) {
  10. }
  11. get = async (request: any, reply: any) => {
  12. try {
  13. const data = await this.ringtoneService.get(request.params['id'])
  14. if (typeof (data.deletedAt as Date) !== 'undefined') {
  15. reply.raw.statusMessage = 'Ringtone Deleted Previously'
  16. reply.gone()
  17. return
  18. }
  19. if (!data) {
  20. reply.raw.statusMessage = 'Ringtone Not Found'
  21. reply.notFound()
  22. return
  23. }
  24. reply.raw.statusMessage = 'Single Ringtone Retrieved'
  25. return {
  26. data,
  27. }
  28. } catch (err) {
  29. reply.raw.statusMessage = 'Get Ringtone Error'
  30. reply.internalServerError(err.message)
  31. }
  32. }
  33. browse = async (request: any, reply: any) => {
  34. try {
  35. // TODO deserialize query
  36. const { 'skip': skipRaw, 'take': takeRaw } = request.query
  37. const skipNumber = Number(skipRaw)
  38. const takeNumber = Number(takeRaw)
  39. const skip = !isNaN(skipNumber) ? skipNumber : undefined
  40. const take = !isNaN(takeNumber) ? takeNumber : undefined
  41. reply.raw.statusMessage = 'Multiple Ringtones Retrieved'
  42. return {
  43. data: await this.ringtoneService.browse(skip, take),
  44. skip,
  45. take,
  46. }
  47. } catch (err) {
  48. reply.raw.statusMessage = 'Browse Ringtones Error'
  49. reply.internalServerError(err.message)
  50. }
  51. }
  52. search = async (request: any, reply: any) => {
  53. try {
  54. const { 'q': query } = request.query
  55. reply.raw.statusMessage = 'Search Results Retrieved'
  56. return {
  57. data: await this.ringtoneService.search(query),
  58. query,
  59. }
  60. } catch (err) {
  61. reply.raw.statusMessage = 'Search Error'
  62. reply.internalServerError(err.message)
  63. }
  64. }
  65. create = async (request: any, reply: any) => {
  66. try {
  67. const data = await this.ringtoneService.create(request.body)
  68. reply.raw.statusMessage = 'Ringtone Created'
  69. reply.raw.statusCode = 201
  70. return {
  71. data,
  72. }
  73. } catch (err) {
  74. reply.raw.statusMessage = 'Create Ringtone Error'
  75. reply.internalServerError(err.message)
  76. }
  77. }
  78. update = async (request: any, reply: any) => {
  79. try {
  80. // TODO validate data
  81. const data = await this.ringtoneService.update({
  82. ...request.body,
  83. id: request.params['id'],
  84. })
  85. if (data.deletedAt !== null) {
  86. reply.raw.statusMessage = 'Ringtone Deleted Previously'
  87. reply.gone()
  88. return
  89. }
  90. if (!data) {
  91. reply.raw.statusMessage = 'Ringtone Not Found'
  92. reply.notFound()
  93. return
  94. }
  95. reply.raw.statusMessage = 'Ringtone Updated'
  96. return {
  97. data,
  98. }
  99. } catch (err) {
  100. reply.internalServerError(err.message)
  101. }
  102. }
  103. softDelete = async (request: any, reply: any) => {
  104. try {
  105. // TODO validate data
  106. const data = await this.ringtoneService.softDelete(request.params['id'])
  107. if (!data) {
  108. reply.raw.statusMessage = 'Ringtone Not Found'
  109. reply.notFound()
  110. return
  111. }
  112. reply.raw.statusMessage = 'Ringtone Soft-Deleted'
  113. return {
  114. data,
  115. }
  116. } catch (err) {
  117. reply.raw.statusMessage = 'Soft-Delete Ringtone Error'
  118. reply.internalServerError(err.message)
  119. }
  120. }
  121. undoDelete = async (request: any, reply: any) => {
  122. try {
  123. // TODO validate data
  124. const data = await this.ringtoneService.undoDelete(request.params['id'])
  125. if (!data) {
  126. reply.raw.statusMessage = 'Ringtone Not Found'
  127. reply.notFound()
  128. return
  129. }
  130. reply.raw.statusMessage = 'Ringtone Restored'
  131. return {
  132. data,
  133. }
  134. } catch (err) {
  135. reply.raw.statusMessage = 'Restore Ringtone Error'
  136. reply.internalServerError(err.message)
  137. }
  138. }
  139. hardDelete = async (request: any, reply: any) => {
  140. try {
  141. // TODO validate data
  142. await this.ringtoneService.hardDelete(request.params['id'])
  143. reply.status(204)
  144. reply.raw.statusMessage = 'Ringtone Hard-Deleted'
  145. } catch (err) {
  146. if (err instanceof DoubleDeletionError) {
  147. reply.raw.statusMessage = 'Ringtone Not Found'
  148. reply.notFound(err.message)
  149. }
  150. reply.raw.statusMessage = 'Delete Ringtone Error'
  151. reply.internalServerError(err.message)
  152. }
  153. }
  154. }