core/baas-control-plane/src/modules/tenants/tenants.routes.ts

85 lines
2.2 KiB
TypeScript

import { Router } from 'express';
import { z } from 'zod';
import {
addAppwriteProject,
createTenant,
listTenantProjects,
listTenants,
redactProject,
removeTenantProject,
updateTenantProject,
} from './tenants.service.js';
const tenantSchema = z.object({
name: z.string().min(2),
slug: z.string().optional(),
});
const projectSchema = z.object({
name: z.string().min(2),
endpoint: z.string().url(),
projectId: z.string().optional(),
apiKey: z.string().min(10),
createProject: z.boolean().optional(),
});
const projectUpdateSchema = projectSchema.partial();
export const tenantsRouter = Router();
tenantsRouter.post('/', async (request, response, next) => {
try {
const payload = tenantSchema.parse(request.body);
const tenant = await createTenant(payload);
response.status(201).json(tenant);
} catch (error) {
next(error);
}
});
tenantsRouter.get('/', async (_request, response, next) => {
try {
const tenants = await listTenants();
response.json(tenants);
} catch (error) {
next(error);
}
});
tenantsRouter.post('/:id/appwrite-project', async (request, response, next) => {
try {
const payload = projectSchema.parse(request.body);
const project = await addAppwriteProject(request.params.id, payload);
response.status(201).json(redactProject(project));
} catch (error) {
next(error);
}
});
tenantsRouter.get('/:id/appwrite-projects', async (request, response, next) => {
try {
const projects = await listTenantProjects(request.params.id);
response.json(projects);
} catch (error) {
next(error);
}
});
tenantsRouter.patch('/:id/appwrite-projects/:projectRef', async (request, response, next) => {
try {
const payload = projectUpdateSchema.parse(request.body);
const project = await updateTenantProject(request.params.id, request.params.projectRef, payload);
response.json(redactProject(project));
} catch (error) {
next(error);
}
});
tenantsRouter.delete('/:id/appwrite-projects/:projectRef', async (request, response, next) => {
try {
await removeTenantProject(request.params.id, request.params.projectRef);
response.status(204).send();
} catch (error) {
next(error);
}
});