bms-repository/commands/add-object/template/api/blank-api.ts
pfych 0029086b3f
Some checks failed
Build & Lint / build-lint (push) Failing after 2m10s
Deploy / setup (push) Failing after 1m3s
Init
2024-10-12 14:08:09 +11:00

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 }}',
});
}
},
]);