103 lines
3.5 KiB
TypeScript
103 lines
3.5 KiB
TypeScript
import { Response } from 'express';
|
|
import { {{ nameCamel }}Mapper } from './{{ nameKebab }}';
|
|
import { isAdmin } from '../../middleware/is-admin';
|
|
import { RequestContext } from '../../util/request-context.type';
|
|
import { {{ nameFirst }} } from '@baseline/types/{{ nameKebab }}';
|
|
import { getErrorMessage } from '../../util/error-message';
|
|
import createApp from '../../util/express-app';
|
|
import createAuthenticatedHandler from '../../util/create-authenticated-handler';
|
|
import { {{ nameCamel }}Service } from './{{ nameKebab }}.service';
|
|
|
|
const app = createApp();
|
|
// app.use(isAdmin); // All private endpoints require the user to be an admin
|
|
export const handler = createAuthenticatedHandler(app);
|
|
|
|
app.post('/{{ nameKebab }}', [
|
|
isAdmin,
|
|
async (req: RequestContext, res: Response) => {
|
|
try {
|
|
const { {{ apiCreateFields }} } = req.body as {{ nameFirst }};
|
|
const {{ nameCamel }}Data: Partial<{{ nameFirst }}> = {
|
|
{{ apiCreateFields }},
|
|
};
|
|
const {{ nameCamel }} = await {{ nameCamel }}Service.create({{ nameCamel }}Data);
|
|
res.json({{ nameCamel }}Mapper({{ nameCamel }}));
|
|
} catch (error) {
|
|
const message = getErrorMessage(error);
|
|
console.error(`Failed to create {{ nameLower }} ${message}`);
|
|
res.status(400).json({ error: 'Failed to create {{ nameLower }}' });
|
|
}
|
|
},
|
|
]);
|
|
|
|
app.patch('/{{ nameKebab }}', [
|
|
isAdmin,
|
|
async (req: RequestContext, res: Response) => {
|
|
try {
|
|
const { {{ apiUpdateFields }} } = req.body as {{ nameFirst }};
|
|
const {{ nameCamel }}Data: Partial<{{ nameFirst }}> = {
|
|
{{ apiUpdateFields }}
|
|
};
|
|
const {{ nameCamel }} = await {{ nameCamel }}Service.update({{ nameCamel }}Data);
|
|
res.json({{ nameCamel }}Mapper({{ nameCamel }}));
|
|
} catch (error) {
|
|
const message = getErrorMessage(error);
|
|
console.error(`Failed to update {{ nameLower }}: ${message}`);
|
|
res.status(400).json({
|
|
error: 'Failed to update {{ nameLower }}',
|
|
});
|
|
}
|
|
},
|
|
]);
|
|
|
|
app.delete('/{{ nameKebab }}/:{{ primaryKey }}', [
|
|
isAdmin,
|
|
async (req: RequestContext, res: Response) => {
|
|
try {
|
|
const {{ primaryKey }} = req.params.{{ primaryKey }};
|
|
await {{ nameCamel }}Service.delete({{ primaryKey }});
|
|
res.status(200);
|
|
res.send();
|
|
} catch (error) {
|
|
const message = getErrorMessage(error);
|
|
console.error(`Failed to delete {{ nameLower }}: ${message}`);
|
|
res.status(400).json({
|
|
error: 'Failed to delete {{ nameLower }}',
|
|
});
|
|
}
|
|
},
|
|
]);
|
|
|
|
app.get('/{{ nameKebab }}/list', [
|
|
isAdmin,
|
|
async (req: RequestContext, res: Response) => {
|
|
try {
|
|
const {{ nameCamel }}s = await {{ nameCamel }}Service.getAll();
|
|
const formatted{{ nameFirst }}s = {{ nameCamel }}s.map({{ nameCamel }}Mapper);
|
|
res.json(formatted{{ nameFirst }}s);
|
|
} catch (error) {
|
|
const message = getErrorMessage(error);
|
|
console.error(`Failed to get {{ nameLower }}s: ${message}`);
|
|
res.status(400).json({
|
|
error: 'Failed to get {{ nameLower }}s',
|
|
});
|
|
}
|
|
},
|
|
]);
|
|
|
|
app.get('/{{ nameKebab }}/:{{ primaryKey }}', [
|
|
isAdmin,
|
|
async (req: RequestContext, res: Response) => {
|
|
try {
|
|
const {{ nameCamel }} = await {{ nameCamel }}Service.get(req.params.{{ primaryKey }});
|
|
res.json({{ nameCamel }}Mapper({{ nameCamel }}));
|
|
} catch (error) {
|
|
const message = getErrorMessage(error);
|
|
console.error(`Failed to get {{ nameLower }}: ${message}`);
|
|
res.status(400).json({
|
|
error: 'Failed to get {{ nameLower }}',
|
|
});
|
|
}
|
|
},
|
|
]);
|