50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import { Request, Response, NextFunction } from 'express';
|
|
import { OrganizationService } from '../services/organization.service';
|
|
import { z } from 'zod';
|
|
|
|
const orgSchema = z.object({
|
|
name: z.string().min(2),
|
|
});
|
|
|
|
const orgUpdateSchema = z.object({
|
|
name: z.string().min(2).optional(),
|
|
status: z.string().optional(),
|
|
});
|
|
|
|
export class OrganizationController {
|
|
private orgService = new OrganizationService();
|
|
|
|
public create = async (req: Request, res: Response, next: NextFunction) => {
|
|
try {
|
|
const data = orgSchema.parse(req.body);
|
|
const org = await this.orgService.create(data);
|
|
res.status(201).json(org);
|
|
} catch(err) { next(err); }
|
|
}
|
|
|
|
public getAll = async (req: Request, res: Response, next: NextFunction) => {
|
|
try {
|
|
const orgs = await this.orgService.getAll();
|
|
res.status(200).json(orgs);
|
|
} catch(err) { next(err); }
|
|
}
|
|
|
|
public getById = async (req: Request, res: Response, next: NextFunction) => {
|
|
try {
|
|
const org = await this.orgService.getById(req.params.id);
|
|
if (!org) {
|
|
return res.status(404).json({ error: 'Organization not found' });
|
|
}
|
|
res.status(200).json(org);
|
|
} catch(err) { next(err); }
|
|
}
|
|
|
|
public update = async (req: Request, res: Response, next: NextFunction) => {
|
|
try {
|
|
const data = orgUpdateSchema.parse(req.body);
|
|
const org = await this.orgService.update(req.params.id, data);
|
|
res.status(200).json(org);
|
|
} catch(err) { next(err); }
|
|
}
|
|
}
|