This repository was archived by the owner on Mar 20, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 555
/
Copy pathreservations.ts
153 lines (134 loc) · 3.76 KB
/
reservations.ts
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
import { HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
import { initializeDatabaseConfiguration } from "../config";
import { findReservationById, findReservationsByUserId, updateReservationStatus } from "../models/reservation";
import { Reservation } from "../models/reservation.schema";
import { ReservationStatus } from "../models/reservation-status";
// GET: Get Reservation by Id
export async function getReservationById(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log(`Http function getReservationById processed request for url "${request.url}"`);
await initializeDatabaseConfiguration();
const id = request.params.id ?? "";
const reservation = await findReservationById(id);
if (reservation) {
return {
jsonBody: reservation,
};
} else {
return {
status: 404,
jsonBody: {
error: "Reservation record not found",
},
};
}
}
// GET: Get Reservations
export async function getReservations(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log(`Http function getReservations processed request for url "${request.url}"`);
await initializeDatabaseConfiguration();
const offset = Number(request.query.get("offset")) || 0;
const limit = Number(request.query.get("limit")) || 10;
const userId = request.query.get("userId");
// UserID is the only required parameter
if (!userId || userId === "undefined") {
return {
status: 400,
jsonBody: {
error: "userId is missing",
},
};
}
if (offset < 0) {
return {
status: 400,
jsonBody: {
error: "Offset must be greater than or equal to 0",
},
};
} else if (limit < 0) {
return {
status: 400,
jsonBody: {
error: "Limit must be greater than or equal to 0",
},
};
} else if (offset > limit) {
return {
status: 400,
jsonBody: {
error: "Offset must be less than or equal to limit",
},
};
}
try {
const reservations = await findReservationsByUserId(userId, offset, limit);
if (reservations) {
return {
jsonBody: reservations,
};
} else {
return {
status: 404,
jsonBody: {
error: "Reservation not found",
},
};
}
} catch (error) {
return {
status: 500,
jsonBody: {
error: "Internal Server Error",
},
};
}
}
// PATCH: Reservation by Id
export async function patchReservationById(
request: HttpRequest,
context: InvocationContext,
): Promise<HttpResponseInit> {
context.log(`Http function patchReservationById processed request for url "${request.url}"`);
await initializeDatabaseConfiguration();
const id = request.params.id as string;
const status = (await request.json()) as Reservation["status"];
if (!status) {
return {
status: 400,
jsonBody: {
error: "Reservation status is missing",
},
};
} else if (status !== ReservationStatus.Active && status !== ReservationStatus.Cancelled) {
return {
status: 400,
jsonBody: {
error: "Reservation status must be either 'active' or 'canceled'",
},
};
}
try {
const recordReservation = await updateReservationStatus(id, status);
if (recordReservation) {
return {
jsonBody: recordReservation,
};
} else {
return {
status: 404,
jsonBody: {
error: "Reservation not found for specified id",
},
};
}
} catch (error) {
const err = error as Error;
context.error(`Error updating reservation status: ${err.message}`);
return {
status: 500,
jsonBody: {
error: "Error updating reservation status",
},
};
}
}