2024-12-10 14:27:30 -05:00
|
|
|
import { pgTable, integer, varchar, timestamp, text, numeric, unique, foreignKey, doublePrecision, real } from "drizzle-orm/pg-core"
|
2024-11-25 16:51:47 -05:00
|
|
|
import { sql } from "drizzle-orm"
|
|
|
|
|
|
2024-11-26 11:58:39 -05:00
|
|
|
|
|
|
|
|
|
2024-11-25 16:51:47 -05:00
|
|
|
export const productFeeds = pgTable("product_feeds", {
|
|
|
|
|
id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "productfeeds_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }),
|
|
|
|
|
resellerId: integer("reseller_id").notNull(),
|
|
|
|
|
feedUrl: varchar("feed_url", { length: 255 }).notNull(),
|
|
|
|
|
lastUpdate: timestamp("last_update", { mode: 'string' }),
|
|
|
|
|
updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
deletedAt: timestamp("deleted_at", { mode: 'string' }),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export const products = pgTable("products", {
|
|
|
|
|
id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "products_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }),
|
|
|
|
|
name: varchar({ length: 255 }).notNull(),
|
|
|
|
|
description: text().notNull(),
|
|
|
|
|
price: numeric().notNull(),
|
|
|
|
|
resellerId: integer("reseller_id").notNull(),
|
|
|
|
|
categoryId: integer("category_id").notNull(),
|
|
|
|
|
stockQty: integer("stock_qty").default(0),
|
|
|
|
|
updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
deletedAt: timestamp("deleted_at", { mode: 'string' }),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export const categories = pgTable("categories", {
|
|
|
|
|
id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "categories_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }),
|
|
|
|
|
name: varchar({ length: 100 }).notNull(),
|
|
|
|
|
parentCategoryId: integer("parent_category_id"),
|
|
|
|
|
updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
deletedAt: timestamp("deleted_at", { mode: 'string' }),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export const brands = pgTable("brands", {
|
|
|
|
|
id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "brands_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }),
|
|
|
|
|
name: varchar({ length: 100 }).notNull(),
|
|
|
|
|
updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
deletedAt: timestamp("deleted_at", { mode: 'string' }),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export const manufacturer = pgTable("manufacturer", {
|
|
|
|
|
id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "manufacturer_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }),
|
|
|
|
|
name: varchar({ length: 100 }).notNull(),
|
|
|
|
|
updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
deletedAt: timestamp("deleted_at", { mode: 'string' }),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export const componentType = pgTable("component_type", {
|
|
|
|
|
id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "component_type_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }),
|
|
|
|
|
name: varchar({ length: 100 }).notNull(),
|
|
|
|
|
updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
deletedAt: timestamp("deleted_at", { mode: 'string' }),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export const states = pgTable("states", {
|
|
|
|
|
id: integer().primaryKey().generatedByDefaultAsIdentity({ name: "states_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }),
|
|
|
|
|
state: varchar({ length: 50 }),
|
|
|
|
|
abbreviation: varchar({ length: 50 }),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export const balAccounts = pgTable("bal_accounts", {
|
|
|
|
|
id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "accountsid_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }),
|
|
|
|
|
firstName: varchar("first_name", { length: 40 }),
|
|
|
|
|
lastName: varchar("last_name", { length: 40 }),
|
|
|
|
|
updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
deletedAt: timestamp("deleted_at", { mode: 'string' }),
|
|
|
|
|
email: varchar({ length: 100 }),
|
|
|
|
|
username: varchar({ length: 50 }).notNull(),
|
|
|
|
|
passwordHash: varchar("password_hash", { length: 255 }).notNull(),
|
2024-12-10 14:27:30 -05:00
|
|
|
}, (table) => {
|
2024-11-25 16:51:47 -05:00
|
|
|
return {
|
|
|
|
|
balAccountsUsernameUnique: unique("bal_accounts_username_unique").on(table.username),
|
|
|
|
|
balAccountsPasswordHashUnique: unique("bal_accounts_password_hash_unique").on(table.passwordHash),
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2024-11-26 11:58:39 -05:00
|
|
|
export const buildsComponents = pgTable("builds_components", {
|
|
|
|
|
id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "build_components_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }),
|
|
|
|
|
buildId: integer("build_id").notNull(),
|
|
|
|
|
productId: integer("product_id").notNull(),
|
2024-11-25 16:51:47 -05:00
|
|
|
updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
deletedAt: timestamp("deleted_at", { mode: 'string' }),
|
|
|
|
|
});
|
|
|
|
|
|
2024-11-26 11:58:39 -05:00
|
|
|
export const builds = pgTable("builds", {
|
|
|
|
|
id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "build_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }),
|
|
|
|
|
accountId: integer("account_id").notNull(),
|
|
|
|
|
name: varchar({ length: 255 }).notNull(),
|
|
|
|
|
description: text(),
|
2024-11-25 16:51:47 -05:00
|
|
|
updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
deletedAt: timestamp("deleted_at", { mode: 'string' }),
|
2024-11-26 11:58:39 -05:00
|
|
|
}, (table) => {
|
|
|
|
|
return {
|
|
|
|
|
buildsBalAccountsFk: foreignKey({
|
|
|
|
|
columns: [table.accountId],
|
|
|
|
|
foreignColumns: [balAccounts.id],
|
|
|
|
|
name: "builds_bal_accounts_fk"
|
|
|
|
|
}),
|
|
|
|
|
}
|
2024-11-25 16:51:47 -05:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export const lipseycatalog = pgTable("lipseycatalog", {
|
|
|
|
|
id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "lipseycatalog_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }),
|
|
|
|
|
itemno: varchar({ length: 20 }).notNull(),
|
|
|
|
|
description1: text(),
|
|
|
|
|
description2: text(),
|
|
|
|
|
upc: varchar({ length: 20 }),
|
|
|
|
|
manufacturermodelno: varchar({ length: 30 }),
|
|
|
|
|
msrp: doublePrecision(),
|
|
|
|
|
model: text(),
|
|
|
|
|
calibergauge: text(),
|
|
|
|
|
manufacturer: text(),
|
|
|
|
|
type: text(),
|
|
|
|
|
action: text(),
|
|
|
|
|
barrellength: text(),
|
|
|
|
|
capacity: text(),
|
|
|
|
|
finish: text(),
|
|
|
|
|
overalllength: text(),
|
|
|
|
|
receiver: text(),
|
|
|
|
|
safety: text(),
|
|
|
|
|
sights: text(),
|
|
|
|
|
stockframegrips: text(),
|
|
|
|
|
magazine: text(),
|
|
|
|
|
weight: text(),
|
|
|
|
|
imagename: text(),
|
|
|
|
|
chamber: text(),
|
|
|
|
|
drilledandtapped: text(),
|
|
|
|
|
rateoftwist: text(),
|
|
|
|
|
itemtype: text(),
|
|
|
|
|
additionalfeature1: text(),
|
|
|
|
|
additionalfeature2: text(),
|
|
|
|
|
additionalfeature3: text(),
|
|
|
|
|
shippingweight: text(),
|
|
|
|
|
boundbookmanufacturer: text(),
|
|
|
|
|
boundbookmodel: text(),
|
|
|
|
|
boundbooktype: text(),
|
|
|
|
|
nfathreadpattern: text(),
|
|
|
|
|
nfaattachmentmethod: text(),
|
|
|
|
|
nfabaffletype: text(),
|
|
|
|
|
silencercanbedisassembled: text(),
|
|
|
|
|
silencerconstructionmaterial: text(),
|
|
|
|
|
nfadbreduction: text(),
|
|
|
|
|
silenceroutsidediameter: text(),
|
|
|
|
|
nfaform3Caliber: text(),
|
|
|
|
|
opticmagnification: text(),
|
|
|
|
|
maintubesize: text(),
|
|
|
|
|
adjustableobjective: text(),
|
|
|
|
|
objectivesize: text(),
|
|
|
|
|
opticadjustments: text(),
|
|
|
|
|
illuminatedreticle: text(),
|
|
|
|
|
reticle: text(),
|
|
|
|
|
exclusive: text(),
|
|
|
|
|
quantity: varchar({ length: 10 }).default(sql`NULL`),
|
|
|
|
|
allocated: text(),
|
|
|
|
|
onsale: text(),
|
|
|
|
|
price: doublePrecision(),
|
|
|
|
|
currentprice: doublePrecision(),
|
|
|
|
|
retailmap: doublePrecision(),
|
|
|
|
|
fflrequired: text(),
|
|
|
|
|
sotrequired: text(),
|
|
|
|
|
exclusivetype: text(),
|
|
|
|
|
scopecoverincluded: text(),
|
|
|
|
|
special: text(),
|
|
|
|
|
sightstype: text(),
|
|
|
|
|
case: text(),
|
|
|
|
|
choke: text(),
|
|
|
|
|
dbreduction: text(),
|
|
|
|
|
family: text(),
|
|
|
|
|
finishtype: text(),
|
|
|
|
|
frame: text(),
|
|
|
|
|
griptype: varchar({ length: 30 }),
|
|
|
|
|
handgunslidematerial: text(),
|
|
|
|
|
countryoforigin: varchar({ length: 4 }),
|
|
|
|
|
itemlength: text(),
|
|
|
|
|
itemwidth: text(),
|
|
|
|
|
itemheight: text(),
|
|
|
|
|
packagelength: doublePrecision(),
|
|
|
|
|
packagewidth: doublePrecision(),
|
|
|
|
|
packageheight: doublePrecision(),
|
|
|
|
|
itemgroup: varchar({ length: 40 }),
|
|
|
|
|
updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
deletedAt: timestamp("deleted_at", { mode: 'string' }),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export const balResellers = pgTable("bal_resellers", {
|
|
|
|
|
id: integer().primaryKey().generatedAlwaysAsIdentity({ name: "resellers_id_seq", startWith: 1, increment: 1, minValue: 1, maxValue: 2147483647, cache: 1 }),
|
|
|
|
|
name: varchar({ length: 100 }).notNull(),
|
|
|
|
|
websiteUrl: varchar("website_url", { length: 255 }),
|
|
|
|
|
contactEmail: varchar("contact_email", { length: 100 }),
|
|
|
|
|
updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(),
|
|
|
|
|
deletedAt: timestamp("deleted_at", { mode: 'string' }),
|
|
|
|
|
});
|
2024-12-10 14:27:30 -05:00
|
|
|
|
|
|
|
|
export const psa = pgTable("psa", {
|
|
|
|
|
sku: varchar("SKU", { length: 50 }),
|
|
|
|
|
manufacturerId: varchar("Manufacturer Id", { length: 50 }),
|
|
|
|
|
brandName: varchar("Brand Name", { length: 50 }),
|
|
|
|
|
productName: varchar("Product Name", { length: 256 }),
|
|
|
|
|
longDescription: text("Long Description"),
|
|
|
|
|
shortDescription: varchar("Short Description", { length: 50 }),
|
|
|
|
|
department: varchar("Department", { length: 50 }),
|
|
|
|
|
category: varchar("Category", { length: 50 }),
|
|
|
|
|
subCategory: varchar("SubCategory", { length: 50 }),
|
|
|
|
|
thumbUrl: varchar("Thumb URL", { length: 150 }),
|
|
|
|
|
imageUrl: varchar("Image URL", { length: 150 }),
|
|
|
|
|
buyLink: varchar("Buy Link", { length: 128 }),
|
|
|
|
|
keywords: varchar("Keywords", { length: 50 }),
|
|
|
|
|
reviews: varchar("Reviews", { length: 50 }),
|
|
|
|
|
retailPrice: real("Retail Price"),
|
|
|
|
|
salePrice: real("Sale Price"),
|
|
|
|
|
brandPageLink: varchar("Brand Page Link", { length: 50 }),
|
|
|
|
|
brandLogoImage: varchar("Brand Logo Image", { length: 50 }),
|
|
|
|
|
productPageViewTracking: varchar("Product Page View Tracking", { length: 256 }),
|
|
|
|
|
parentGroupId: varchar("Parent Group ID", { length: 50 }),
|
|
|
|
|
fineline: varchar("Fineline", { length: 50 }),
|
|
|
|
|
superFineline: varchar("SuperFineline", { length: 250 }),
|
|
|
|
|
modelNumber: varchar("ModelNumber", { length: 50 }),
|
|
|
|
|
caliber: varchar("Caliber", { length: 255 }),
|
|
|
|
|
upc: varchar("UPC", { length: 75 }),
|
|
|
|
|
mediumImageUrl: varchar("Medium Image URL", { length: 50 }),
|
|
|
|
|
productContentWidget: varchar("Product Content Widget", { length: 256 }),
|
|
|
|
|
googleCategorization: varchar("Google Categorization", { length: 50 }),
|
|
|
|
|
itemBasedCommission: varchar("Item Based Commission", { length: 50 }),
|
|
|
|
|
});
|