import { FastifyReply, FastifyRequest } from "fastify"; import { createUser, deleteUser, ErrMissingOrdId, ErrOpNotValid, ErrUserNotFound, getUser, listUsers, resetUser, updateUser, } from "./user.service"; import { CreateUserInput, UpdateUserInput } from "./user.schema"; export async function createUserHandler( req: FastifyRequest, res: FastifyReply ) { const body = req.body as CreateUserInput; try { const user = await createUser(body, req.user); return res.code(201).send(user); } catch (err) { if ( err instanceof Error && (err.message == ErrOpNotValid.message || err.message == ErrMissingOrdId.message) ) return res.code(400).send({ error: err.message }); return err; } } export async function resetUserHandler(req: FastifyRequest, res: FastifyReply) { const { userId } = req.params as { userId: string }; try { await resetUser(userId, req.user); return res.code(200).send({ msg: "Account reset mail sent" }); } catch (err) { if ( err instanceof Error && (err.message == ErrOpNotValid.message || err.message == ErrUserNotFound.message) ) return res.code(400).send({ error: err.message }); return err; } } export async function getCurrentUserHandler( req: FastifyRequest, res: FastifyReply ) { if (req.user.type !== "user") { return res.code(400).send(); } try { const user = await getUser(req.user.userId); if (user == null) return res.code(404).send({ error: "resource not found" }); return res.code(200).send(user); } catch (err) { return err; } } export async function getUserHandler(req: FastifyRequest, res: FastifyReply) { const { userId } = req.params as { userId: string }; try { const user = await getUser(userId); if (user == null) return res.code(404).send({ error: "resource not found" }); return res.code(200).send(user); } catch (err) { return err; } } export async function listUserHandler(req: FastifyRequest, res: FastifyReply) { try { const users = await listUsers(req.user); return res.code(200).send({ users: users }); } catch (err) { return err; } } export async function updateUserHandler( req: FastifyRequest, res: FastifyReply ) { const input = req.body as UpdateUserInput; const { userId } = req.params as { userId: string }; try { const updatedUser = await updateUser(userId, input, req.user); if (!updateUser) return res.code(404).send({ error: "resource not found" }); return res.code(200).send(updatedUser); } catch (err) { return err; } } export async function deleteUserHandler( req: FastifyRequest, res: FastifyReply ) { const { userId } = req.params as { userId: string }; try { const deleteResult = await deleteUser(userId, req.user.tenantId); if (deleteResult.deletedCount == 0) return res.code(404).send({ error: "resource not found" }); return res.code(204).send(); } catch (err) { return err; } }