|
- import {inject, singleton} from 'tsyringe'
- import {RingtoneService} from './service'
- import {DoubleDeletionError} from './response'
-
- @singleton()
- export class RingtoneController {
- constructor(
- @inject('RingtoneService')
- private readonly ringtoneService: RingtoneService
- ) {
- }
-
- get = async (request: any, reply: any) => {
- try {
- const data = await this.ringtoneService.get(request.params['id'])
- if (typeof (data.deletedAt as Date) !== 'undefined') {
- reply.raw.statusMessage = 'Ringtone Deleted Previously'
- reply.gone()
- return
- }
- if (!data) {
- reply.raw.statusMessage = 'Ringtone Not Found'
- reply.notFound()
- return
- }
- reply.raw.statusMessage = 'Single Ringtone Retrieved'
- return {
- data,
- }
- } catch (err) {
- reply.raw.statusMessage = 'Get Ringtone Error'
- reply.internalServerError(err.message)
- }
- }
-
- browse = async (request: any, reply: any) => {
- try {
- // TODO deserialize query
- const { 'skip': skipRaw, 'take': takeRaw } = request.query
- const skipNumber = Number(skipRaw)
- const takeNumber = Number(takeRaw)
-
- const skip = !isNaN(skipNumber) ? skipNumber : undefined
- const take = !isNaN(takeNumber) ? takeNumber : undefined
-
- reply.raw.statusMessage = 'Multiple Ringtones Retrieved'
- return {
- data: await this.ringtoneService.browse(skip, take),
- skip,
- take,
- }
- } catch (err) {
- reply.raw.statusMessage = 'Browse Ringtones Error'
- reply.internalServerError(err.message)
- }
- }
-
- search = async (request: any, reply: any) => {
- try {
- const { 'q': query } = request.query
- reply.raw.statusMessage = 'Search Results Retrieved'
- return {
- data: await this.ringtoneService.search(query),
- query,
- }
- } catch (err) {
- reply.raw.statusMessage = 'Search Error'
- reply.internalServerError(err.message)
- }
- }
-
- create = async (request: any, reply: any) => {
- try {
- const data = await this.ringtoneService.create(request.body)
- reply.raw.statusMessage = 'Ringtone Created'
- reply.raw.statusCode = 201
- return {
- data,
- }
- } catch (err) {
- reply.raw.statusMessage = 'Create Ringtone Error'
- reply.internalServerError(err.message)
- }
- }
-
- update = async (request: any, reply: any) => {
- try {
- // TODO validate data
- const data = await this.ringtoneService.update({
- ...request.body,
- id: request.params['id'],
- })
- if (data.deletedAt !== null) {
- reply.raw.statusMessage = 'Ringtone Deleted Previously'
- reply.gone()
- return
- }
- if (!data) {
- reply.raw.statusMessage = 'Ringtone Not Found'
- reply.notFound()
- return
- }
- reply.raw.statusMessage = 'Ringtone Updated'
- return {
- data,
- }
- } catch (err) {
- reply.internalServerError(err.message)
- }
- }
-
- softDelete = async (request: any, reply: any) => {
- try {
- // TODO validate data
- const data = await this.ringtoneService.softDelete(request.params['id'])
- if (!data) {
- reply.raw.statusMessage = 'Ringtone Not Found'
- reply.notFound()
- return
- }
- reply.raw.statusMessage = 'Ringtone Soft-Deleted'
- return {
- data,
- }
- } catch (err) {
- reply.raw.statusMessage = 'Soft-Delete Ringtone Error'
- reply.internalServerError(err.message)
- }
- }
-
- undoDelete = async (request: any, reply: any) => {
- try {
- // TODO validate data
- const data = await this.ringtoneService.undoDelete(request.params['id'])
- if (!data) {
- reply.raw.statusMessage = 'Ringtone Not Found'
- reply.notFound()
- return
- }
- reply.raw.statusMessage = 'Ringtone Restored'
- return {
- data,
- }
- } catch (err) {
- reply.raw.statusMessage = 'Restore Ringtone Error'
- reply.internalServerError(err.message)
- }
- }
-
- hardDelete = async (request: any, reply: any) => {
- try {
- // TODO validate data
- await this.ringtoneService.hardDelete(request.params['id'])
- reply.status(204)
- reply.raw.statusMessage = 'Ringtone Hard-Deleted'
- } catch (err) {
- if (err instanceof DoubleDeletionError) {
- reply.raw.statusMessage = 'Ringtone Not Found'
- reply.notFound(err.message)
- }
- reply.raw.statusMessage = 'Delete Ringtone Error'
- reply.internalServerError(err.message)
- }
- }
- }
|