168 lines
4.9 KiB
TypeScript
168 lines
4.9 KiB
TypeScript
import type { AnyMySqlColumn } from 'drizzle-orm/mysql-core';
|
|
import {
|
|
bigint,
|
|
binary,
|
|
boolean,
|
|
char,
|
|
date,
|
|
datetime,
|
|
decimal,
|
|
double,
|
|
float,
|
|
int,
|
|
json,
|
|
mediumint,
|
|
mysqlEnum,
|
|
mysqlTable,
|
|
real,
|
|
serial,
|
|
smallint,
|
|
text,
|
|
time,
|
|
timestamp,
|
|
tinyint,
|
|
varbinary,
|
|
varchar,
|
|
year,
|
|
} from 'drizzle-orm/mysql-core';
|
|
|
|
export const customers = mysqlTable('customer', {
|
|
id: varchar('id', { length: 256 }).primaryKey(),
|
|
companyName: text('company_name').notNull(),
|
|
contactName: text('contact_name').notNull(),
|
|
contactTitle: text('contact_title').notNull(),
|
|
address: text('address').notNull(),
|
|
city: text('city').notNull(),
|
|
postalCode: text('postal_code'),
|
|
region: text('region'),
|
|
country: text('country').notNull(),
|
|
phone: text('phone').notNull(),
|
|
fax: text('fax'),
|
|
});
|
|
|
|
export const employees = mysqlTable(
|
|
'employee',
|
|
{
|
|
id: int('id').primaryKey(),
|
|
lastName: text('last_name').notNull(),
|
|
firstName: text('first_name'),
|
|
title: text('title').notNull(),
|
|
titleOfCourtesy: text('title_of_courtesy').notNull(),
|
|
birthDate: timestamp('birth_date').notNull(),
|
|
hireDate: timestamp('hire_date').notNull(),
|
|
address: text('address').notNull(),
|
|
city: text('city').notNull(),
|
|
postalCode: text('postal_code').notNull(),
|
|
country: text('country').notNull(),
|
|
homePhone: text('home_phone').notNull(),
|
|
extension: int('extension').notNull(),
|
|
notes: text('notes').notNull(),
|
|
reportsTo: int('reports_to').references((): AnyMySqlColumn => employees.id),
|
|
photoPath: text('photo_path'),
|
|
},
|
|
);
|
|
|
|
export const orders = mysqlTable('order', {
|
|
id: int('id').primaryKey(),
|
|
orderDate: timestamp('order_date').notNull(),
|
|
requiredDate: timestamp('required_date').notNull(),
|
|
shippedDate: timestamp('shipped_date'),
|
|
shipVia: int('ship_via').notNull(),
|
|
freight: float('freight').notNull(),
|
|
shipName: text('ship_name').notNull(),
|
|
shipCity: text('ship_city').notNull(),
|
|
shipRegion: text('ship_region'),
|
|
shipPostalCode: text('ship_postal_code'),
|
|
shipCountry: text('ship_country').notNull(),
|
|
|
|
customerId: varchar('customer_id', { length: 256 })
|
|
.notNull()
|
|
.references(() => customers.id, { onDelete: 'cascade' }),
|
|
|
|
employeeId: int('employee_id')
|
|
.notNull()
|
|
.references(() => employees.id, { onDelete: 'cascade' }),
|
|
});
|
|
|
|
export const suppliers = mysqlTable('supplier', {
|
|
id: int('id').primaryKey(),
|
|
companyName: text('company_name').notNull(),
|
|
contactName: text('contact_name').notNull(),
|
|
contactTitle: text('contact_title').notNull(),
|
|
address: text('address').notNull(),
|
|
city: text('city').notNull(),
|
|
region: text('region'),
|
|
postalCode: text('postal_code').notNull(),
|
|
country: text('country').notNull(),
|
|
phone: text('phone').notNull(),
|
|
});
|
|
|
|
export const products = mysqlTable('product', {
|
|
id: int('id').primaryKey(),
|
|
name: text('name').notNull(),
|
|
quantityPerUnit: text('quantity_per_unit').notNull(),
|
|
unitPrice: float('unit_price').notNull(),
|
|
unitsInStock: int('units_in_stock').notNull(),
|
|
unitsOnOrder: int('units_on_order').notNull(),
|
|
reorderLevel: int('reorder_level').notNull(),
|
|
discontinued: int('discontinued').notNull(),
|
|
|
|
supplierId: int('supplier_id')
|
|
.notNull()
|
|
.references(() => suppliers.id, { onDelete: 'cascade' }),
|
|
});
|
|
|
|
export const details = mysqlTable('order_detail', {
|
|
unitPrice: float('unit_price').notNull(),
|
|
quantity: int('quantity').notNull(),
|
|
discount: float('discount').notNull(),
|
|
|
|
orderId: int('order_id')
|
|
.notNull()
|
|
.references(() => orders.id, { onDelete: 'cascade' }),
|
|
|
|
productId: int('product_id')
|
|
.notNull()
|
|
.references(() => products.id, { onDelete: 'cascade' }),
|
|
});
|
|
|
|
// All data types table -------------------------------
|
|
export const allDataTypes = mysqlTable('all_data_types', {
|
|
int: int('integer'),
|
|
tinyint: tinyint('tinyint'),
|
|
smallint: smallint('smallint'),
|
|
mediumint: mediumint('mediumint'),
|
|
biginteger: bigint('bigint', { mode: 'bigint' }),
|
|
bigintNumber: bigint('bigint_number', { mode: 'number' }),
|
|
real: real('real'),
|
|
decimal: decimal('decimal'),
|
|
double: double('double'),
|
|
float: float('float'),
|
|
serial: serial('serial'),
|
|
binary: binary('binary', { length: 255 }),
|
|
varbinary: varbinary('varbinary', { length: 256 }),
|
|
char: char('char', { length: 255 }),
|
|
varchar: varchar('varchar', { length: 256 }),
|
|
text: text('text'),
|
|
boolean: boolean('boolean'),
|
|
dateString: date('date_string', { mode: 'string' }),
|
|
date: date('date', { mode: 'date' }),
|
|
datetime: datetime('datetime', { mode: 'date' }),
|
|
datetimeString: datetime('datetimeString', { mode: 'string' }),
|
|
time: time('time'),
|
|
year: year('year'),
|
|
timestampDate: timestamp('timestamp_date', { mode: 'date' }),
|
|
timestampString: timestamp('timestamp_string', { mode: 'string' }),
|
|
json: json('json'),
|
|
mysqlEnum: mysqlEnum('popularity', ['unknown', 'known', 'popular']),
|
|
});
|
|
|
|
// All generators tables -------------------------------
|
|
export const datetimeTable = mysqlTable('datetime_table', {
|
|
datetime: datetime('datetime'),
|
|
});
|
|
|
|
export const yearTable = mysqlTable('year_table', {
|
|
year: year('year'),
|
|
});
|