Passed
Pull Request — master (#34)
by Kyungmi
02:04
created

src/router/status-type-api-router.js   A

Complexity

Total Complexity 22
Complexity/F 1.38

Size

Lines of Code 96
Function Count 16

Duplication

Duplicated Lines 0
Ratio 0 %

Test Coverage

Coverage 93.55%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 0
wmc 22
c 1
b 0
f 0
nc 6
mnd 1
bc 10
fnc 16
dl 0
loc 96
ccs 29
cts 31
cp 0.9355
crap 0
rs 10
bpm 0.625
cpm 1.375
noi 2

1 Function

Rating   Name   Duplication   Size   Complexity  
A status-type-api-router.js ➔ ??? 0 8 1
1
/**
2
 * StatusType Service API router
3
 *
4
 * @since 1.0.0
5
 */
6
7 3
const Joi = require('joi');
8 3
const StatusType = require('./../repository/StatusType');
9 3
const config = require('../config/server.config').url;
10 3
const dateUtil = require('../common/date-util');
11 3
const NotifierError = require('../common/Error');
12 3
const logger = require('winston');
0 ignored issues
show
Unused Code introduced by
The constant logger seems to be never used. Consider removing it.
Loading history...
13
14 3
module.exports = [
15
  {
16
    method: 'GET',
17
    path: `${config.statusTypeApiPrefix}`,
18
    handler: (request, reply) => {
19 1
      StatusType.find().then((list) => {
20 1
        reply({
21
          data: dateUtil.formatDates(list),
22
          totalCount: list.length,
23
        });
24
      }).catch(err => reply(err));
25
    },
26
  },
27
  {
28
    method: 'POST',
29
    path: `${config.statusTypeApiPrefix}`,
30
    handler: (request, reply) => {
31 3
      const statusType = Object.assign({}, request.payload);
32 3
      StatusType.find({ value: statusType.value })
33
        .then((result) => {
34 3
          if (result && result.length > 0) {
35 1
            throw new NotifierError(NotifierError.Types.CONFLICT, { value: statusType.value });
36
          }
37 2
          return true;
38
        })
39 2
        .then(() => StatusType.add(statusType))
40 2
        .then(result => reply(result))
41 1
        .catch(err => reply(err));
42
    },
43
    config: {
44
      validate: {
45
        payload: {
46
          label: Joi.string().required(),
47
          value: Joi.string().required(),
48
          template: Joi.string(),
49
        },
50
      },
51
    },
52
  },
53
  {
54
    method: 'PUT',
55
    path: `${config.statusTypeApiPrefix}/{statusTypeId}`,
56
    handler: (request, reply) => {
57 4
      const statusType = Object.assign({}, request.payload);
58
      let unset;
59 4
      if (!statusType.template) {
60 2
        unset = { template: 1 };
61
      }
62 4
      StatusType.find({ value: statusType.value })
63
        .then((result) => {
64 4
          if (result && result.length > 0 && request.params.statusTypeId !== result[0]._id) {
65 1
            throw new NotifierError(NotifierError.Types.CONFLICT, { value: statusType.value });
66
          }
67 3
          return true;
68
        })
69 3
        .then(() => StatusType.update(request.params.statusTypeId, statusType, unset))
0 ignored issues
show
Bug introduced by
The variable unset does not seem to be initialized in case !statusType.template on line 59 is false. Are you sure the function update handles undefined variables?
Loading history...
70 3
        .then(result => reply(result))
71 1
        .catch(err => reply(err));
72
    },
73
    config: {
74
      validate: {
75
        params: {
76
          statusTypeId: Joi.string().required(),
77
        },
78
        payload: {
79
          label: Joi.string().required(),
80
          value: Joi.string().required(),
81
          template: Joi.string(),
82
        },
83
      },
84
    },
85
  },
86
  {
87
    method: 'DELETE',
88
    path: `${config.statusTypeApiPrefix}/{statusTypeId}`,
89
    handler: (request, reply) => {
90 2
      StatusType.remove(request.params.statusTypeId)
91 2
        .then(result => reply(result))
92
        .catch(err => reply(err));
93
    },
94
    config: {
95
      validate: {
96
        params: {
97
          statusTypeId: Joi.string().required(),
98
        },
99
      },
100
    },
101
  },
102
];
103