diff --git a/packages/db/src/schema/bans.ts b/packages/db/src/schema/bans.ts new file mode 100644 index 00000000..370ab57a --- /dev/null +++ b/packages/db/src/schema/bans.ts @@ -0,0 +1,16 @@ +import { mysqlTable, int, varchar, mysqlEnum } from "drizzle-orm/mysql-core"; + +export const bans = mysqlTable("bans", { + id: int("id").autoincrement().primaryKey(), + userId: int("user_id").notNull(), + ip: varchar("ip", { length: 50 }).notNull().default(""), + machineId: varchar("machine_id", { length: 255 }).notNull().default(""), + userStaffId: int("user_staff_id").notNull(), + timestamp: int("timestamp").notNull(), + banExpire: int("ban_expire").notNull().default(0), + banReason: varchar("ban_reason", { length: 200 }).notNull().default(""), + type: mysqlEnum("type", ["account", "ip", "machine", "super"]) + .notNull() + .default("account"), + cfhTopic: int("cfh_topic").notNull().default(-1), +}); diff --git a/packages/db/src/schema/index.ts b/packages/db/src/schema/index.ts new file mode 100644 index 00000000..25a10c89 --- /dev/null +++ b/packages/db/src/schema/index.ts @@ -0,0 +1,4 @@ +export { users } from "./users.js"; +export { usersCurrency } from "./users-currency.js"; +export { bans } from "./bans.js"; +export { websiteSettings } from "./website-settings.js"; diff --git a/packages/db/src/schema/users-currency.ts b/packages/db/src/schema/users-currency.ts new file mode 100644 index 00000000..4ac6690e --- /dev/null +++ b/packages/db/src/schema/users-currency.ts @@ -0,0 +1,13 @@ +import { mysqlTable, int, primaryKey } from "drizzle-orm/mysql-core"; + +// MyISAM table with a composite primary key and no surrogate id column. +// This is the canonical test of the introspect-only / composite-key design. +export const usersCurrency = mysqlTable( + "users_currency", + { + userId: int("user_id").notNull(), + type: int("type").notNull(), + amount: int("amount").notNull().default(0), + }, + (t) => [primaryKey({ columns: [t.userId, t.type] })], +); diff --git a/packages/db/src/schema/users.ts b/packages/db/src/schema/users.ts new file mode 100644 index 00000000..de771306 --- /dev/null +++ b/packages/db/src/schema/users.ts @@ -0,0 +1,25 @@ +import { mysqlTable, int, varchar, mysqlEnum } from "drizzle-orm/mysql-core"; + +// Subset of the real `users` table — the columns the web tier needs first. +// The complete column set will be regenerated via `db:pull` against the live DB. +export const users = mysqlTable("users", { + id: int("id").autoincrement().primaryKey(), + username: varchar("username", { length: 25 }).notNull(), + realName: varchar("real_name", { length: 25 }).notNull(), + password: varchar("password", { length: 64 }).notNull(), + mail: varchar("mail", { length: 500 }), + mailVerified: mysqlEnum("mail_verified", ["0", "1"]).notNull().default("0"), + accountCreated: int("account_created").notNull(), + lastLogin: int("last_login").notNull().default(0), + motto: varchar("motto", { length: 127 }).notNull().default(""), + look: varchar("look", { length: 256 }).notNull(), + gender: mysqlEnum("gender", ["M", "F"]).notNull().default("M"), + rank: int("rank").notNull().default(1), + credits: int("credits").notNull().default(2500), + pixels: int("pixels").notNull().default(500), + points: int("points").notNull().default(10), + online: mysqlEnum("online", ["0", "1", "2"]).notNull().default("0"), + authTicket: varchar("auth_ticket", { length: 256 }).notNull().default(""), + ipRegister: varchar("ip_register", { length: 45 }).notNull(), + ipCurrent: varchar("ip_current", { length: 45 }).notNull(), +}); diff --git a/packages/db/src/schema/website-settings.ts b/packages/db/src/schema/website-settings.ts new file mode 100644 index 00000000..9958c07f --- /dev/null +++ b/packages/db/src/schema/website-settings.ts @@ -0,0 +1,10 @@ +import { mysqlTable, bigint, varchar, text } from "drizzle-orm/mysql-core"; + +// CMS-owned table (created by Laravel migration, not in default.sql). +// `value` was widened from varchar(255) to TEXT by a later migration. +export const websiteSettings = mysqlTable("website_settings", { + id: bigint("id", { mode: "number", unsigned: true }).autoincrement().primaryKey(), + key: varchar("key", { length: 255 }).notNull(), + value: text("value").notNull(), + comment: varchar("comment", { length: 255 }).notNull(), +});