-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi-result.js
More file actions
120 lines (110 loc) · 3.26 KB
/
api-result.js
File metadata and controls
120 lines (110 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
'use strict';
/**
* Class encapsulating a result from the API
* May be used for both successful responses
* and error message propagation
*/
class APIResult {
/**
* @param {number} status HTTP status code
* @param {Object} [data] response data
* @param {Object} [error] an error
*/
constructor(status, data, error) {
if (!status) {
throw new Error('failed to construct APIResult, status is missing');
}
this.status = status;
this.data = data;
this.error = error;
}
/**
* Create APIResult with status and message
* @param {number} status HTTP StatusCode
* @param {(string | Object)} [message] message String or Object
* @return {APIResult} APIResult with status and message
*/
static create(status, message) {
if (message && typeof message == 'string') {
return new APIResult(status, { message: message });
}
if (message && (typeof message == 'object' || Array.isArray(message))) {
return new APIResult(status, message);
}
return new APIResult(status);
}
/**
* @param {(string | Object)} [message] (optional) message String or Object
* @return {APIResult} APIResult with status 200
*/
static success(message) {
if (message) {
return APIResult.create(200, message);
}
return success;
}
/**
* @param {(string | Object)} [message] (optional) message String or Object
* @return {APIResult} APIResult with status 201
*/
static created(message) {
if (message) {
return APIResult.create(201, message);
}
return created;
}
/**
* @param {(string | Object)} [message] (optional) message String or Object
* @return {APIResult} APIResult with status 202
*/
static accepted(message) {
if (message) {
return APIResult.create(202, message);
}
return accepted;
}
/**
* @return {APIResult} APIResult with status 204
*/
static noContent() {
return noContent;
}
/**
* @param {(string | Object)} [message] (optional) message String or Object
* @return {APIResult} APIResult with status 400
*/
static badRequest(message) {
if (message) {
return APIResult.create(400, message);
}
return badRequest;
}
/**
* @param {(string | Object)} [message] (optional) message String or Object
* @return {APIResult} APIResult with status 403
*/
static forbidden(message) {
if (message) {
return APIResult.create(403, message);
}
return forbidden;
}
/**
* @param {(string | Object)} [message] (optional) message String or Object
* @return {APIResult} APIResult with status 404
*/
static notFound(message) {
if (message) {
return APIResult.create(404, message);
}
return notFound;
}
}
const success = new APIResult(200);
const created = new APIResult(201);
const accepted = new APIResult(202);
const noContent = new APIResult(204);
const badRequest = new APIResult(400);
const forbidden = new APIResult(403);
const notFound = new APIResult(404);
module.exports = APIResult;