From ba8799f0c920101ac21b71a160e9f14535a5b4c8 Mon Sep 17 00:00:00 2001 From: Xiaole Su Date: Tue, 21 Jan 2025 22:13:32 -0500 Subject: [PATCH 1/4] feat: set up company request schema and status --- packages/db/src/schema/misc.ts | 9 ++++++ packages/db/src/schema/requests.ts | 52 ++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 packages/db/src/schema/requests.ts diff --git a/packages/db/src/schema/misc.ts b/packages/db/src/schema/misc.ts index c74be81..c140677 100644 --- a/packages/db/src/schema/misc.ts +++ b/packages/db/src/schema/misc.ts @@ -54,3 +54,12 @@ export const WorkTerm = { } as const; export type WorkTermType = (typeof WorkTerm)[keyof typeof WorkTerm]; + +export const RequestStatus = { + PENDING: "PENDING", + APPROVED: "APPROVED", + REJECTED: "REJECTED", +} as const; + +export type RequestStatusType = + (typeof RequestStatus)[keyof typeof RequestStatus]; diff --git a/packages/db/src/schema/requests.ts b/packages/db/src/schema/requests.ts new file mode 100644 index 0000000..d301c2a --- /dev/null +++ b/packages/db/src/schema/requests.ts @@ -0,0 +1,52 @@ +import { relations, sql } from "drizzle-orm"; +import { pgTable, text, timestamp, uuid, varchar } from "drizzle-orm/pg-core"; +import { createInsertSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { Industry, RequestStatus } from "./misc"; + +export const CompanyRequest = pgTable("company_request", { + id: uuid("id").notNull().primaryKey().defaultRandom(), + companyName: varchar("name").notNull(), + companyDescription: text("description"), + industry: varchar("industry").notNull(), + location: varchar("location").notNull(), + roleTitle: varchar("title").notNull(), + roleDescription: text("description"), + createdAt: timestamp("createdAt").defaultNow().notNull(), + updatedAt: timestamp("updatedAt", { + mode: "date", + withTimezone: true, + }).$onUpdateFn(() => sql`now()`), + status: varchar("status", { + enum: ["PENDING", "APPROVED", "REJECTED"], // Explicitly list the enum values + }) + .notNull() + .default("PENDING"), +}); + +export type CompanyRequestType = typeof CompanyRequest.$inferSelect; + +// export const RequestRelations = relations(Role, ({ one }) => ({ +// company: one(Company, { +// fields: [Role.companyId], +// references: [Company.id], +// }), +// roles: one(Role), +// })); + +// Zod validation schema for creating a company request +export const CreateCompanyRequestSchema = createInsertSchema(CompanyRequest, { + companyName: z.string(), + companyDescription: z.string().optional(), + industry: z.nativeEnum(Industry), + location: z.string(), + roleTitle: z.string(), + roleDescription: z.string(), + status: z.nativeEnum(RequestStatus), +}).omit({ + id: true, + createdAt: true, + updatedAt: true, +}); +// Example TypeScript type for the Company Request From 3787b05cff9265686adea7056cfed7bd1257b038 Mon Sep 17 00:00:00 2001 From: Xiaole Su Date: Wed, 22 Jan 2025 22:05:34 -0500 Subject: [PATCH 2/4] feat: added role request and updated relations --- .../schema/{requests.ts => companyRequest.ts} | 14 +++--- packages/db/src/schema/roleRequest.ts | 48 +++++++++++++++++++ 2 files changed, 55 insertions(+), 7 deletions(-) rename packages/db/src/schema/{requests.ts => companyRequest.ts} (87%) create mode 100644 packages/db/src/schema/roleRequest.ts diff --git a/packages/db/src/schema/requests.ts b/packages/db/src/schema/companyRequest.ts similarity index 87% rename from packages/db/src/schema/requests.ts rename to packages/db/src/schema/companyRequest.ts index d301c2a..f8fb934 100644 --- a/packages/db/src/schema/requests.ts +++ b/packages/db/src/schema/companyRequest.ts @@ -4,6 +4,7 @@ import { createInsertSchema } from "drizzle-zod"; import { z } from "zod"; import { Industry, RequestStatus } from "./misc"; +import { Profile } from "./profiles"; export const CompanyRequest = pgTable("company_request", { id: uuid("id").notNull().primaryKey().defaultRandom(), @@ -27,13 +28,12 @@ export const CompanyRequest = pgTable("company_request", { export type CompanyRequestType = typeof CompanyRequest.$inferSelect; -// export const RequestRelations = relations(Role, ({ one }) => ({ -// company: one(Company, { -// fields: [Role.companyId], -// references: [Company.id], -// }), -// roles: one(Role), -// })); +export const RequestRelations = relations(CompanyRequest, ({ one }) => ({ + profile: one(Profile, { + fields: [CompanyRequest.id], + references: [Profile.userId], + }), +})); // Zod validation schema for creating a company request export const CreateCompanyRequestSchema = createInsertSchema(CompanyRequest, { diff --git a/packages/db/src/schema/roleRequest.ts b/packages/db/src/schema/roleRequest.ts new file mode 100644 index 0000000..b075edc --- /dev/null +++ b/packages/db/src/schema/roleRequest.ts @@ -0,0 +1,48 @@ +import { relations, sql } from "drizzle-orm"; +import { pgTable, text, timestamp, uuid, varchar } from "drizzle-orm/pg-core"; +import { createInsertSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { Company } from "./companies"; +import { RequestStatus } from "./misc"; + +export const RoleRequest = pgTable("role_request", { + id: uuid("id").notNull().primaryKey().defaultRandom(), + roleTitle: varchar("title").notNull(), + roleDescription: text("description"), + companyId: varchar("companyId").notNull(), + createdAt: timestamp("createdAt").defaultNow().notNull(), + updatedAt: timestamp("updatedAt", { + mode: "date", + withTimezone: true, + }).$onUpdateFn(() => sql`now()`), + status: varchar("status", { + enum: ["PENDING", "APPROVED", "REJECTED"], // Explicitly list the enum values (?) + }) + .notNull() + .default("PENDING"), +}); + +export type CompanyRequestType = typeof RoleRequest.$inferSelect; + +export const RoleRequestRelations = relations(RoleRequest, ({ one }) => ({ + company: one(Company, { + fields: [RoleRequest.companyId], + references: [Company.id], + }), +})); + +/* +What is the relationship between companyRequest/roleRequest/company/role +*/ + +// Zod validation schema for creating a role request +export const CreateCompanyRequestSchema = createInsertSchema(RoleRequest, { + roleTitle: z.string(), + roleDescription: z.string(), + status: z.nativeEnum(RequestStatus), +}).omit({ + id: true, + createdAt: true, + updatedAt: true, +}); From ed6bea75fa9b5c98739f7515fc766e35b6cf7960 Mon Sep 17 00:00:00 2001 From: Xiaole Su Date: Thu, 23 Jan 2025 17:56:44 -0500 Subject: [PATCH 3/4] removed unnecessary field --- packages/db/src/schema/companyRequest.ts | 5 ----- packages/db/src/schema/roleRequest.ts | 10 +++++----- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/packages/db/src/schema/companyRequest.ts b/packages/db/src/schema/companyRequest.ts index f8fb934..954fd0f 100644 --- a/packages/db/src/schema/companyRequest.ts +++ b/packages/db/src/schema/companyRequest.ts @@ -15,10 +15,6 @@ export const CompanyRequest = pgTable("company_request", { roleTitle: varchar("title").notNull(), roleDescription: text("description"), createdAt: timestamp("createdAt").defaultNow().notNull(), - updatedAt: timestamp("updatedAt", { - mode: "date", - withTimezone: true, - }).$onUpdateFn(() => sql`now()`), status: varchar("status", { enum: ["PENDING", "APPROVED", "REJECTED"], // Explicitly list the enum values }) @@ -47,6 +43,5 @@ export const CreateCompanyRequestSchema = createInsertSchema(CompanyRequest, { }).omit({ id: true, createdAt: true, - updatedAt: true, }); // Example TypeScript type for the Company Request diff --git a/packages/db/src/schema/roleRequest.ts b/packages/db/src/schema/roleRequest.ts index b075edc..276568f 100644 --- a/packages/db/src/schema/roleRequest.ts +++ b/packages/db/src/schema/roleRequest.ts @@ -5,6 +5,7 @@ import { z } from "zod"; import { Company } from "./companies"; import { RequestStatus } from "./misc"; +import { Profile } from "./profiles"; export const RoleRequest = pgTable("role_request", { id: uuid("id").notNull().primaryKey().defaultRandom(), @@ -12,10 +13,6 @@ export const RoleRequest = pgTable("role_request", { roleDescription: text("description"), companyId: varchar("companyId").notNull(), createdAt: timestamp("createdAt").defaultNow().notNull(), - updatedAt: timestamp("updatedAt", { - mode: "date", - withTimezone: true, - }).$onUpdateFn(() => sql`now()`), status: varchar("status", { enum: ["PENDING", "APPROVED", "REJECTED"], // Explicitly list the enum values (?) }) @@ -30,6 +27,10 @@ export const RoleRequestRelations = relations(RoleRequest, ({ one }) => ({ fields: [RoleRequest.companyId], references: [Company.id], }), + profile: one(Profile, { + fields: [RoleRequest.id], + references: [Profile.userId], + }), })); /* @@ -44,5 +45,4 @@ export const CreateCompanyRequestSchema = createInsertSchema(RoleRequest, { }).omit({ id: true, createdAt: true, - updatedAt: true, }); From 3fb5d9d55785c5639b99298034519aaca4f85378 Mon Sep 17 00:00:00 2001 From: Xiaole Su Date: Sun, 2 Feb 2025 16:20:26 -0500 Subject: [PATCH 4/4] removed comments --- packages/db/src/schema/companyRequest.ts | 3 +-- packages/db/src/schema/roleRequest.ts | 6 +----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/db/src/schema/companyRequest.ts b/packages/db/src/schema/companyRequest.ts index 954fd0f..68fa032 100644 --- a/packages/db/src/schema/companyRequest.ts +++ b/packages/db/src/schema/companyRequest.ts @@ -1,4 +1,4 @@ -import { relations, sql } from "drizzle-orm"; +import { relations } from "drizzle-orm"; import { pgTable, text, timestamp, uuid, varchar } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { z } from "zod"; @@ -44,4 +44,3 @@ export const CreateCompanyRequestSchema = createInsertSchema(CompanyRequest, { id: true, createdAt: true, }); -// Example TypeScript type for the Company Request diff --git a/packages/db/src/schema/roleRequest.ts b/packages/db/src/schema/roleRequest.ts index 276568f..a87e490 100644 --- a/packages/db/src/schema/roleRequest.ts +++ b/packages/db/src/schema/roleRequest.ts @@ -1,4 +1,4 @@ -import { relations, sql } from "drizzle-orm"; +import { relations } from "drizzle-orm"; import { pgTable, text, timestamp, uuid, varchar } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { z } from "zod"; @@ -33,10 +33,6 @@ export const RoleRequestRelations = relations(RoleRequest, ({ one }) => ({ }), })); -/* -What is the relationship between companyRequest/roleRequest/company/role -*/ - // Zod validation schema for creating a role request export const CreateCompanyRequestSchema = createInsertSchema(RoleRequest, { roleTitle: z.string(),