From 98653d6fde600eb5b5100e254f228e79b5c93e2a Mon Sep 17 00:00:00 2001 From: inmake Date: Mon, 24 Mar 2025 12:24:39 +0500 Subject: [PATCH] upd --- src/controllers/clientsController.ts | 17 +++++++---- src/db/schema/clients.ts | 10 +++++-- src/db/schema/servers.ts | 4 +-- src/db/schema/sessions.ts | 4 ++- src/index.ts | 3 ++ src/services/clients/create.ts | 44 ++++++++++++++++++++++++++++ src/services/servers/get.ts | 5 +++- src/services/sessions/create.ts | 1 - 8 files changed, 75 insertions(+), 13 deletions(-) create mode 100644 src/services/clients/create.ts diff --git a/src/controllers/clientsController.ts b/src/controllers/clientsController.ts index bcdabf6..9b97223 100644 --- a/src/controllers/clientsController.ts +++ b/src/controllers/clientsController.ts @@ -1,6 +1,13 @@ -// import Elysia from "elysia"; -// import authMiddleware from "../middlewares/auth"; +import Elysia, { t } from "elysia"; +import authMiddleware from "../middlewares/auth"; +import createClient from "../services/clients/create"; -// export const clientsController = new Elysia({ prefix: "/clients" }) -// .use(authMiddleware) -// .get("/", async ({auth:{companyId}}) => {}, {}); +export const clientsController = new Elysia({ prefix: "/clients" }) + .use(authMiddleware) + .post("/", async ({ auth, body }) => createClient(auth, body), { + body: t.Object({ + name: t.String(), + phone: t.String(), + email: t.Optional(t.String()), + }), + }); diff --git a/src/db/schema/clients.ts b/src/db/schema/clients.ts index d473bda..98662a9 100644 --- a/src/db/schema/clients.ts +++ b/src/db/schema/clients.ts @@ -2,12 +2,16 @@ import { pgTable, timestamp, uuid, varchar } from "drizzle-orm/pg-core"; import { companiesTable } from "./companies"; import { relations } from "drizzle-orm"; import { sessionsTable } from "./sessions"; +import { usersTable } from "./users"; export const clientsTable = pgTable("clients", { id: uuid("id").defaultRandom().primaryKey(), - fullname: varchar("fullname").notNull(), - email: varchar("email").notNull(), - phone: varchar("phone", { length: 15 }), + name: varchar("name").notNull(), + phone: varchar("phone", { length: 11 }).notNull(), + email: varchar("email"), + ownerId: uuid("owner_id") + .notNull() + .references(() => usersTable.id), companyId: uuid("company_id") .notNull() .references(() => companiesTable.id), diff --git a/src/db/schema/servers.ts b/src/db/schema/servers.ts index 655f076..c314297 100644 --- a/src/db/schema/servers.ts +++ b/src/db/schema/servers.ts @@ -1,8 +1,8 @@ import { pgTable, timestamp, uuid, varchar } from "drizzle-orm/pg-core"; import { companiesTable } from "./companies"; -import { actionsTable } from "./actions"; import { relations } from "drizzle-orm"; import { sessionsTable } from "./sessions"; +import { appsTable } from "./apps"; export const serversTable = pgTable("servers", { id: uuid("id").primaryKey().defaultRandom(), @@ -27,5 +27,5 @@ export const serversRelations = relations(serversTable, ({ one, many }) => ({ references: [companiesTable.id], }), sessions: many(sessionsTable), - actions: many(actionsTable), + apps: many(appsTable), })); diff --git a/src/db/schema/sessions.ts b/src/db/schema/sessions.ts index 9b4a363..04e151b 100644 --- a/src/db/schema/sessions.ts +++ b/src/db/schema/sessions.ts @@ -19,7 +19,9 @@ export const sessionsTable = pgTable( id: uuid("id").defaultRandom().primaryKey(), status: varchar("status", { enum: ["starting", "started", "restarting", "ending", "ended"], - }).notNull(), + }) + .notNull() + .default("starting"), appId: uuid("app_id") .notNull() .references(() => appsTable.id), diff --git a/src/index.ts b/src/index.ts index 60b32fb..4f530af 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ import usersController from "./controllers/usersController"; import sessionsController from "./controllers/sessionsController"; import serversController from "./controllers/serversController"; import appsController from "./controllers/appsController"; +import { clientsController } from "./controllers/clientsController"; const app = new Elysia(); @@ -13,11 +14,13 @@ app.use( origin: "*", }) ); + app.use(authController); app.use(usersController); app.use(serversController); app.use(sessionsController); app.use(appsController); +app.use(clientsController); app.listen(3000); diff --git a/src/services/clients/create.ts b/src/services/clients/create.ts new file mode 100644 index 0000000..9451369 --- /dev/null +++ b/src/services/clients/create.ts @@ -0,0 +1,44 @@ +import { eq } from "drizzle-orm"; +import db from "../../db"; +import { clientsTable } from "../../db/schema"; +import { error } from "elysia"; + +async function createClient( + auth: { + userId: string; + companyId: string; + }, + body: { + name: string; + phone: string; + email?: string; + } +) { + try { + // Check for existing client + const [existingClient] = await db + .select() + .from(clientsTable) + .where(eq(clientsTable.name, body.name)); + + if (existingClient) { + return existingClient; + } + + // Create new client + const [newClient] = await db + .insert(clientsTable) + .values({ + ...body, + ownerId: auth.userId, + companyId: auth.companyId, + }) + .returning(); + + return newClient; + } catch (err) { + return error(500, "Internal Server Error"); + } +} + +export default createClient; diff --git a/src/services/servers/get.ts b/src/services/servers/get.ts index 9caa563..2d9cf6b 100644 --- a/src/services/servers/get.ts +++ b/src/services/servers/get.ts @@ -32,7 +32,9 @@ export default async function getServers( with: { client: { columns: { - fullname: true, + name: true, + phone: true, + email: true, }, }, app: { @@ -42,6 +44,7 @@ export default async function getServers( }, }, }, + apps: true, } : undefined), }, diff --git a/src/services/sessions/create.ts b/src/services/sessions/create.ts index f14c695..f159712 100644 --- a/src/services/sessions/create.ts +++ b/src/services/sessions/create.ts @@ -40,7 +40,6 @@ async function createSession( ...body, ownerId: auth.userId, companyId: auth.companyId, - status: "starting", }) .returning();