145 lines
5.4 KiB
TypeScript
145 lines
5.4 KiB
TypeScript
//import { mysqlTable, int, varchar, boolean, decimal, datetime, index } from "drizzle-orm/mysql-core"
|
|
import { integer, varchar, boolean, decimal, timestamp, index, pgSchema, uuid, primaryKey } from "drizzle-orm/pg-core";
|
|
|
|
export const pokeSchema = pgSchema("pokemon");
|
|
|
|
export const tcgcards = pokeSchema.table('tcg_cards', {
|
|
productId: integer().primaryKey(),
|
|
productName: varchar({ length: 255 }).notNull(),
|
|
productLineName: varchar({ length: 255 }).default("").notNull(),
|
|
productLineUrlName: varchar({ length: 255 }).default("").notNull(),
|
|
productStatusId: integer().default(0).notNull(),
|
|
productTypeId: integer().default(0).notNull(),
|
|
productUrlName: varchar({ length: 255 }).default("").notNull(),
|
|
rarityName: varchar({ length: 100 }).default("").notNull(),
|
|
sealed: boolean().default(false).notNull(),
|
|
sellerListable: boolean().default(false).notNull(),
|
|
setId: integer(),
|
|
shippingCategoryId: integer(),
|
|
duplicate: boolean().default(false).notNull(),
|
|
foilOnly: boolean().default(false).notNull(),
|
|
maxFulfillableQuantity: integer(),
|
|
totalListings: integer(),
|
|
score: decimal({ precision: 10, scale: 2, mode: 'number' }),
|
|
lowestPrice: decimal({ precision: 10, scale: 2, mode: 'number' }),
|
|
lowestPriceWithShipping: decimal({ precision: 10, scale: 2, mode: 'number' }),
|
|
marketPrice: decimal({ precision: 10, scale: 2, mode: 'number' }),
|
|
medianPrice: decimal({ precision: 10, scale: 2, mode: 'number' }),
|
|
attack1: varchar({ length: 1024 }),
|
|
attack2: varchar({ length: 1024 }),
|
|
attack3: varchar({ length: 1024 }),
|
|
attack4: varchar({ length: 1024 }),
|
|
cardType: varchar({ length: 100 }),
|
|
cardTypeB: varchar({ length: 100 }),
|
|
energyType: varchar({ length: 100 }),
|
|
flavorText: varchar({ length: 1000 }),
|
|
hp: integer(),
|
|
number: varchar({ length: 50 }).default("").notNull(),
|
|
releaseDate: timestamp(),
|
|
resistance: varchar({ length: 100 }),
|
|
retreatCost: varchar({ length: 100 }),
|
|
stage: varchar({ length: 100 }),
|
|
weakness: varchar({ length: 100 }),
|
|
artist: varchar({ length: 255 }),
|
|
});
|
|
|
|
export const cards = pokeSchema.table('cards', {
|
|
cardId: integer().notNull().primaryKey().generatedAlwaysAsIdentity(),
|
|
productId: integer().notNull(),
|
|
variant: varchar({ length: 100 }).notNull(),
|
|
productName: varchar({ length: 255 }),
|
|
productLineName: varchar({ length: 255 }),
|
|
productUrlName: varchar({ length: 255 }).default("").notNull(),
|
|
rarityName: varchar({ length: 100 }),
|
|
sealed: boolean().default(false).notNull(),
|
|
setId: integer(),
|
|
cardType: varchar({ length: 100 }),
|
|
energyType: varchar({ length: 100 }),
|
|
number: varchar({ length: 50 }),
|
|
artist: varchar({ length: 255 }),
|
|
},
|
|
(table) => [
|
|
index('idx_card_product_id').on(table.productId, table.variant),
|
|
]);
|
|
|
|
export const tcg_overrides = pokeSchema.table('tcg_overrides', {
|
|
productId: integer().primaryKey(),
|
|
productName: varchar({ length: 255 }),
|
|
productLineName: varchar({ length: 255 }),
|
|
productUrlName: varchar({ length: 255 }).default('').notNull(),
|
|
rarityName: varchar({ length: 100 }),
|
|
sealed: boolean().default(false).notNull(),
|
|
setId: integer(),
|
|
cardType: varchar({ length: 100 }),
|
|
energyType: varchar({ length: 100 }),
|
|
number: varchar({ length: 50 }),
|
|
artist: varchar({ length: 255 }),
|
|
});
|
|
|
|
export const sets = pokeSchema.table('sets', {
|
|
setId: integer().primaryKey(),
|
|
setName: varchar({ length: 255 }).notNull(),
|
|
setUrlName: varchar({ length: 255 }).notNull(),
|
|
setCode: varchar({ length: 100 }).notNull(),
|
|
});
|
|
|
|
export const skus = pokeSchema.table('skus', {
|
|
skuId: integer().primaryKey(),
|
|
cardId: integer().default(0).notNull(),
|
|
productId: integer().notNull(),
|
|
condition: varchar({ length: 255 }).notNull(),
|
|
language: varchar({ length: 100 }).notNull(),
|
|
variant: varchar({ length: 100 }).notNull(),
|
|
calculatedAt: timestamp(),
|
|
highestPrice: decimal({ precision: 10, scale: 2 }),
|
|
lowestPrice: decimal({ precision: 10, scale: 2 }),
|
|
marketPrice: decimal({ precision: 10, scale: 2 }),
|
|
priceCount: integer(),
|
|
},
|
|
(table) => [
|
|
index('idx_product_id_condition').on(table.productId, table.variant, table.condition),
|
|
index('idx_card_id_condition').on(table.cardId, table.condition),
|
|
]);
|
|
|
|
export const priceHistory = pokeSchema.table('price_history', {
|
|
skuId: integer().notNull(),
|
|
calculatedAt: timestamp().notNull(),
|
|
marketPrice: decimal({ precision: 10, scale: 2 }),
|
|
},
|
|
(table) => [
|
|
primaryKey({ name: 'pk_price_history', columns: [table.skuId, table.calculatedAt] })
|
|
]);
|
|
|
|
export const salesHistory = pokeSchema.table('sales_history',{
|
|
skuId: integer().notNull(),
|
|
orderDate: timestamp().notNull(),
|
|
title: varchar({ length: 255 }),
|
|
customListingId: varchar({ length: 255 }),
|
|
language: varchar({ length: 100 }),
|
|
listingType: varchar({ length: 100 }),
|
|
purchasePrice: decimal({ precision: 10, scale: 2 }),
|
|
quantity: integer(),
|
|
shippingPrice: decimal({ precision: 10, scale: 2 })
|
|
},
|
|
(table) => [
|
|
primaryKey({ name: 'pk_sales_history', columns: [table.skuId, table.orderDate] })
|
|
]);
|
|
|
|
export const inventory = pokeSchema.table('inventory',{
|
|
inventoryId: uuid().primaryKey().notNull().defaultRandom(),
|
|
userId: varchar({ length: 100 }).notNull(),
|
|
catalogName: varchar({ length: 100 }),
|
|
skuId: integer().notNull(),
|
|
quantity: integer(),
|
|
purchasePrice: decimal({ precision: 10, scale: 2 }),
|
|
note: varchar({ length:255 }),
|
|
createdAt: timestamp().notNull().defaultNow(),
|
|
},
|
|
(table) => [
|
|
index('idx_userid_skuId').on(table.userId, table.skuId)
|
|
]);
|
|
|
|
export const processingSkus = pokeSchema.table('processing_skus', {
|
|
skuId: integer().primaryKey(),
|
|
});
|