feat(schema): add user, product, stock, comment and purchase tables
This commit adds several new tables to the schema for the drizzle ORM, including tables for users, products, stock, comments, and purchase history. Each table contains defined fields with appropriate data types and constraints. This forms the basis for storage and retrieval of relevant data within the application.
This commit is contained in:
parent
a3433bf5da
commit
573d4eac9c
172
src/drizzle/schema.ts
Normal file
172
src/drizzle/schema.ts
Normal file
@ -0,0 +1,172 @@
|
||||
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(),
|
||||
|
||||
})
|
Loading…
x
Reference in New Issue
Block a user