Files
pokemon/src/db/schema.ts

63 lines
2.8 KiB
TypeScript
Raw Normal View History

2026-02-07 14:02:03 -05:00
// src/db/schema.ts
2026-02-12 15:22:20 -05:00
import { mysqlTable, varchar, int, boolean, decimal, datetime, index } from 'drizzle-orm/mysql-core';
2026-02-07 14:02:03 -05:00
2026-02-12 15:22:20 -05:00
export const cards = mysqlTable('cards', {
productId: int().notNull().primaryKey(),
productName: varchar({ length: 255 }).notNull(),
productLineName: varchar({ length: 255 }).notNull().default(''),
productLineUrlName: varchar({ length: 255 }).notNull().default(''),
productStatusId: int().notNull().default(0),
productTypeId: int().notNull().default(0),
productUrlName: varchar({ length: 255 }).notNull().default(''),
rarityName: varchar({ length: 100 }).notNull().default(''),
score: decimal({ precision: 10, scale: 2 }).notNull().default('0'),
sealed: boolean().notNull().default(false),
sellerListable: boolean().notNull().default(false),
setId: int().notNull().default(0),
shippingCategoryId: int().notNull().default(0),
duplicate: boolean().notNull().default(false),
foilOnly: boolean().notNull().default(false),
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: int().notNull().default(0),
number: varchar({ length: 50 }).notNull().default(''),
releaseDate: datetime(),
resistance: varchar({ length: 100 }),
retreatCost: varchar({ length: 100 }),
stage: varchar({ length: 100 }),
weakness: varchar({ length: 100 }),
lowestPrice: decimal({ precision: 10, scale: 2 }).notNull().default('0'),
lowestPriceWithShipping: decimal({ precision: 10, scale: 2 }).notNull().default('0'),
marketPrice: decimal({ precision: 10, scale: 2 }).notNull().default('0'),
maxFulfillableQuantity: int().notNull().default(0),
medianPrice: decimal({ precision: 10, scale: 2 }).notNull().default('0'),
totalListings: int().notNull().default(0),
2026-02-07 14:02:03 -05:00
});
2026-02-12 15:22:20 -05:00
export const sets = mysqlTable('sets', {
setId: int().notNull().primaryKey(),
setCode: varchar({ length: 100 }).notNull(),
setName: varchar({ length: 255 }).notNull(),
setUrlName: varchar({ length: 255 }).notNull(),
});
export const skus = mysqlTable('skus', {
skuId: int().notNull().primaryKey(),
productId: int().notNull(),
condition: varchar({ length: 255 }).notNull(),
language: varchar({ length: 100 }).notNull(),
variant: varchar({ length: 100 }).notNull(),
calculatedAt: datetime(),
highestPrice: decimal({ precision: 10, scale: 2 }),
lowestPrice: decimal({ precision: 10, scale: 2 }),
marketPrice: decimal({ precision: 10, scale: 2 }),
priceCount: int(),
},(table) => ({
productIdIdx: index('productIdIdx').on(table.productId),
}));