diff --git a/src/drizzle/schema.ts b/src/drizzle/schema.ts deleted file mode 100644 index 813948b..0000000 --- a/src/drizzle/schema.ts +++ /dev/null @@ -1,172 +0,0 @@ -import { pgTable } from "drizzle-orm/pg-core"; -import * as p from "drizzle-orm/pg-core"; - -export const UsersTable = pgTable("users", { - // Unique identifier on a technical aspect. - uuid: p.uuid("uuid").unique().primaryKey().defaultRandom().notNull(), - - email: p - .varchar("email", { - length: 64 - }) - .unique() - .notNull(), - - emailCode: p - .varchar("email_code", { - length: 6 - }) - .$defaultFn(()=>{ - return "032745" - }), - - firstName: p - .varchar("first_name", { - length: 24, - }) - .notNull(), - - lastName: p - .varchar("last_name", { - length: 24, - }) - .notNull(), - - //hash (Argonid2 hash) - hash: p - .varchar("hash", { - length: 97, - }) - .notNull(), - - //METADATA - iat: p - .timestamp("issued_at", { - withTimezone: true, - }) - .defaultNow() - .notNull(), - - gdprAcceptance: p - .timestamp("ack_gdpr", { - withTimezone: true, - }) - .defaultNow() - .notNull(), - - isAdmin: p - .boolean("is_admin") - .default(false) - .notNull() -}); - -export const ProductsTable = pgTable("products", { - uuid: p.uuid("uuid").unique().primaryKey().defaultRandom().notNull(), - - //slugName - slugName: p - .varchar("slug_name", { - length: 32, - }) - .notNull(), - - //displayName - displayName: p - .varchar("display_name", { - length: 64, - }) - .notNull(), - - //price - price: p - .decimal("price", { - precision: 10, - scale: 2, - }) - .default("0.0") - .notNull(), - - //imagePath - imagePath: p - .varchar("image_path", { - length: 128, - }) - .notNull(), - - //playload of the description element - -}) - -export const StocksTable = pgTable("stocks", { - productId: p.uuid("product_id") - .references(()=> ProductsTable.uuid) - .notNull(), - - quantity: p - .integer("quantity") - .default(0) - .notNull(), - -}) - -export const CommentsTable = pgTable("comments", { - productId: p.uuid("product_id") - .references(()=> ProductsTable.uuid) - .notNull(), - - authorId: p.uuid("author_id") - .references(()=> UsersTable.uuid) - .notNull(), - - //notation - notation: p - .integer("notation") - .default(0) - .notNull(), - - //json payload with the message - message: p - .jsonb("message") - .notNull(), - - //iat - iat: p - .timestamp("issued_at", { - withTimezone: true, - }) - .defaultNow() - .notNull(), -}) - -export const PurchaseHistory = pgTable("purchases", { - uuid: p.uuid("uuid").unique().primaryKey().defaultRandom().notNull(), - - productId: p.uuid("product_id") - .references(()=> ProductsTable.uuid) - .notNull(), - - unitPrice: p - .decimal("unit_price", { - precision: 10, - scale: 2, - }) - .default("0.0") - .notNull(), - - quantity: p - .integer("quantity") - .default(0) - .notNull(), - - clientId: p.uuid("client_id") - .references(()=> UsersTable.uuid) - .notNull(), - - timestamp: p - .timestamp("timestamp", { - withTimezone: true, - }) - .defaultNow() - .notNull(), - -}) \ No newline at end of file diff --git a/src/schema.ts b/src/schema.ts new file mode 100644 index 0000000..94fdaee --- /dev/null +++ b/src/schema.ts @@ -0,0 +1,177 @@ +import { pgTable } from "drizzle-orm/pg-core"; +import * as p from "drizzle-orm/pg-core"; +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; + + +export const UsersTable = pgTable("users", { + // Unique identifier on a technical aspect. + uuid: p.uuid("uuid").unique().primaryKey().defaultRandom().notNull(), + + email: p + .varchar("email", { + length: 64, + }) + .unique() + .notNull(), + + emailCode: p + .varchar("email_code", { + length: 6, + }) + .$defaultFn(() => { + return "032745"; + }), + + firstName: p + .varchar("first_name", { + length: 24, + }) + .notNull(), + + lastName: p + .varchar("last_name", { + length: 24, + }) + .notNull(), + + //hash (Argonid2 hash) + hash: p + .varchar("hash", { + length: 97, + }) + .notNull(), + + //METADATA + iat: p + .timestamp("issued_at", { + withTimezone: true, + }) + .defaultNow() + .notNull(), + + gdprAcceptance: p + .timestamp("ack_gdpr", { + withTimezone: true, + }) + .defaultNow() + .notNull(), + + isAdmin: p.boolean("is_admin").default(false).notNull(), +}); + +export const ProductsTable = pgTable("products", { + uuid: p.uuid("uuid").unique().primaryKey().defaultRandom().notNull(), + + //slugName + slugName: p + .varchar("slug_name", { + length: 32, + }) + .notNull(), + + //displayName + displayName: p + .varchar("display_name", { + length: 64, + }) + .notNull(), + + //price + price: p + .decimal("price", { + precision: 10, + scale: 2, + }) + .default("0.0") + .notNull(), + + //imagePath + imagePath: p + .varchar("image_path", { + length: 128, + }) + .notNull(), + + //playload of the description element +}); + +export const StocksTable = pgTable("stocks", { + productId: p + .uuid("product_id") + .references(() => ProductsTable.uuid) + .notNull(), + + quantity: p.integer("quantity").default(0).notNull(), +}); + +export const CommentsTable = pgTable("comments", { + productId: p + .uuid("product_id") + .references(() => ProductsTable.uuid) + .notNull(), + + authorId: p + .uuid("author_id") + .references(() => UsersTable.uuid) + .notNull(), + + //notation + notation: p.integer("notation").default(0).notNull(), + + //json payload with the message + message: p.jsonb("message").notNull(), + + //iat + iat: p + .timestamp("issued_at", { + withTimezone: true, + }) + .defaultNow() + .notNull(), +}); + +export const PurchaseHistory = pgTable("purchases", { + uuid: p.uuid("uuid").unique().primaryKey().defaultRandom().notNull(), + + productId: p + .uuid("product_id") + .references(() => ProductsTable.uuid) + .notNull(), + + unitPrice: p + .decimal("unit_price", { + precision: 10, + scale: 2, + }) + .default("0.0") + .notNull(), + + quantity: p.integer("quantity").default(0).notNull(), + + clientId: p + .uuid("client_id") + .references(() => UsersTable.uuid) + .notNull(), + + timestamp: p + .timestamp("timestamp", { + withTimezone: true, + }) + .defaultNow() + .notNull(), +}); + +export const UsersTableSelectSchema = createSelectSchema(UsersTable) +export const UsersTableInsertSchema = createInsertSchema(UsersTable) + +export const ProductsTableSelectSchema = createSelectSchema(ProductsTable); +export const ProductsTableInsertSchema = createInsertSchema(ProductsTable); + +export const StocksTableSelectSchema = createSelectSchema(StocksTable); +export const StocksTableInsertSchema = createInsertSchema(StocksTable); + +export const CommentsTableSelectSchema = createSelectSchema(CommentsTable); +export const CommentsTableInsertSchema = createInsertSchema(CommentsTable); + +export const PurchaseHistorySelectSchema = createSelectSchema(PurchaseHistory); +export const PurchaseHistoryInsertSchema = createInsertSchema(PurchaseHistory);