company-router.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // router
  2. import express from "express";
  3. const router = express.Router();
  4. export default router;
  5. // db
  6. import { db } from "#db";
  7. import { ZDbShema } from "#db-shema";
  8. import { sql } from "slonik";
  9. // api
  10. import { CompanyManagerApi } from "#api/company-manager-api.ts";
  11. // error
  12. import { ApiError } from "#exceptions/api-error.ts";
  13. // dayjs
  14. import dayjs from "dayjs";
  15. import utc from "dayjs/plugin/utc.js";
  16. dayjs.extend(utc);
  17. import timezone from "dayjs/plugin/timezone.js";
  18. dayjs.extend(timezone);
  19. // other
  20. import { z } from "zod";
  21. import { v7 as uuidv7 } from "uuid";
  22. // import { logger } from "#logger";
  23. import { UserUtils } from "#utils/user-utils.js";
  24. dayjs.extend(utc);
  25. router.post("/add-company", async (req, res, next) => {
  26. try {
  27. // функция валидации ответа
  28. const ZResType = CompanyManagerApi.ZAddCompany.res; //change
  29. const sendRes = (
  30. status: 200 | 400 | 500,
  31. resData: z.infer<typeof ZResType>,
  32. ) => {
  33. const response = ZResType.parse(resData);
  34. res.status(status).json(response);
  35. };
  36. //
  37. // валидация запроса
  38. const { name } = CompanyManagerApi.ZAddCompany.req.parse(req.body);
  39. const userId = UserUtils.getUserFromReq(req).userId;
  40. const companyId = uuidv7();
  41. // company
  42. await db.query(
  43. sql.unsafe`
  44. insert into users.companies
  45. (company_id, name, owner_id)
  46. values
  47. (${companyId}, ${name}, ${userId})`,
  48. );
  49. sendRes(200, { code: "success" });
  50. } catch (e) {
  51. next(e);
  52. }
  53. });