Home Manual Reference Source Test API Healthcheck

src/controllers/note.controller.js

/**
 * @flow
 */
import { HapiRequest, HapiHandler } from '../base/request/hapi-request.interface.js';
import NoteDataservice, { Note } from '../dataservices/note.service.js';

/**
 * Container Controller for Note CRUD Functions
 */
export class NoteController {
  /**
   * Returns a note, specified by Id
   * @param  {HapiRequest} request RequestObject
   * @param  {any} handler Hapi Handler object for rejecting/setting errors
   * @return {Note}         Note corresponding to Id passed in
   */
  static async getNoteById({ params }: HapiRequest, handler: HapiHandler): Promise<Note | HapiHandler> {
    try {
      return await NoteDataservice.getNote({ id: params.id });
    } catch (err) {
      // Get resp(HapiHandler) to return http code if number
      const resp: HapiHandler = handler.response({
        message: err.message,
        code: err.code
      });
      if (typeof(err.code) === 'number')  {
        resp.code(err.code);
      } else {
        throw err;
      }
      return resp;
    }
  }

  /**
   * Create a new Note
   * @param  {HapiRequest} request RequestObject
   * @param  {any} handler Hapi Handler
   * @return {Note}        [description]
   */
  static createNote({ payload }: HapiRequest, handler: HapiHandler): Promise<Note | Array<Note>> {
    if (payload.name) {
      return NoteDataservice.createNote({ name: payload.name });
    } else if (Array.isArray(payload)) {
      return NoteDataservice.createNotes(payload);
    } else {
      return handler.response('Missing Note(s) to create').code(500);
    }
  }

  /**
   * Update a note, specified by id
   * @param  {HapiRequest} request RequestObject
   * @return {Note}        [description]
   */
  static updateNote({ payload, logger }: HapiRequest): Promise<Note | HapiHandler> {
    logger.trace({ data: payload });

    // TODO: Actually update / catch error on update

    return NoteDataservice.getNote({ id: payload.id });
  }

  /**
   * Delete a note, specified by id
   * @param  {HapiRequest} request RequestObject
   * @return {boolean}        [description]
   */
  static deleteNote({ params, logger }: HapiRequest): boolean {
    logger.info({ data: params });

    return true;
  }
}

export default [
  {
    path: '/note/{id}',
    method: 'GET',
    controller: NoteController.getNoteById
  },
  {
    path: '/note',
    method: 'POST',
    controller: NoteController.createNote
  },
  {
    path: '/note/{id?}',
    method: 'PUT',
    controller: NoteController.updateNote
  },
  {
    path: '/note/{id}',
    method: 'DELETE',
    controller: NoteController.deleteNote
  }
];