// AUTO-GENERATED by scripts/generate-drizzle-schema.mjs — DO NOT EDIT. // TS field names come from the previous src/db/schema.ts; column types from the // live MySQL DB. Run `pnpm db:schema:generate` after schema/map changes. import { sql } from "drizzle-orm"; import { bigint, binary, boolean, customType, datetime, decimal, double, int, longtext, mediumtext, mysqlEnum, mysqlTable, primaryKey, text, timestamp, tinyint, uniqueIndex, varchar, } from "drizzle-orm/mysql-core"; // MySQL TIME / DATE columns are hydrated as JS Date (epoch 1970-01-01 // for TIME). Mirror that so existing call sites keep working unchanged. const timeAsDate = customType<{ data: Date; driverData: string }>({ dataType() { return "time"; }, toDriver(value) { return value.toISOString().slice(11, 19); }, fromDriver(value) { return new Date(`1970-01-01T${value}Z`); }, }); const dateAsDate = customType<{ data: Date; driverData: string }>({ dataType() { return "date"; }, toDriver(value) { return value.toISOString().slice(0, 10); }, fromDriver(value) { return new Date(`${value}T00:00:00Z`); }, }); export const User = mysqlTable("users", { id: int("id").autoincrement().primaryKey().notNull(), username: varchar("username", { length: 25 }).unique().notNull(), realName: varchar("real_name", { length: 25 }).notNull().default("KREWS DEV"), password: varchar("password", { length: 255 }).notNull(), mail: varchar("mail", { length: 500 }), mailVerified: varchar("mail_verified", { length: 1 }).notNull().default("0"), accountCreated: int("account_created").notNull(), accountDayOfBirth: int("account_day_of_birth").notNull().default(0), lastLogin: int("last_login").notNull().default(0), lastOnline: int("last_online").notNull().default(0), motto: varchar("motto", { length: 127 }).notNull().default(""), look: varchar("look", { length: 256 }).notNull().default(""), 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: varchar("online", { length: 1 }).notNull().default("0"), authTicket: varchar("auth_ticket", { length: 256 }).notNull().default(""), ipRegister: varchar("ip_register", { length: 255 }).notNull(), ipCurrent: varchar("ip_current", { length: 255 }).notNull(), machineId: varchar("machine_id", { length: 64 }).notNull().default(""), homeRoom: int("home_room").notNull().default(0), secretKey: varchar("secret_key", { length: 40 }), pincode: varchar("pincode", { length: 11 }), termsAccepted: boolean("terms_accepted").notNull().default(false), ageVerified: boolean("age_verified").notNull().default(false), extraRank: int("extra_rank"), twoFactorSecret: text("two_factor_secret"), twoFactorRecoveryCodes: text("two_factor_recovery_codes"), twoFactorConfirmedAt: timestamp("two_factor_confirmed_at"), websiteJwtVersion: int("website_jwt_version").notNull().default(0), }); 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] })], ); export const Ban = mysqlTable("bans", { id: int("id").autoincrement().primaryKey().notNull(), 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), }); export const WebsiteSetting = mysqlTable("website_settings", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), key: varchar("key", { length: 255 }).unique().notNull(), value: text("value").notNull(), comment: varchar("comment", { length: 255 }), }); export const PasswordReset = mysqlTable("password_resets", { email: varchar("email", { length: 255 }).primaryKey().notNull(), token: varchar("token", { length: 255 }).notNull(), createdAt: timestamp("created_at"), }); export const Achievements = mysqlTable( "achievements", { id: int("id").autoincrement().unique().notNull(), name: varchar("name", { length: 64 }).notNull().default("ACH_"), category: varchar("category", { length: 12 }).notNull().default("identity"), level: int("level").notNull().default(1), rewardAmount: int("reward_amount").notNull().default(100), rewardType: int("reward_type").notNull().default(0), points: int("points").default(10), progressNeeded: int("progress_needed").notNull().default(1), }, (t) => [primaryKey({ columns: [t.name, t.level] })], ); export const CalendarCampaigns = mysqlTable("calendar_campaigns", { id: int("id").autoincrement().primaryKey().notNull(), name: varchar("name", { length: 255 }).notNull().default(""), image: varchar("image", { length: 255 }).notNull().default(""), startTimestamp: int("start_timestamp").notNull().default(0), totalDays: int("total_days").notNull().default(30), lockExpired: varchar("lock_expired", { length: 1 }).notNull().default("1"), enabled: varchar("enabled", { length: 1 }).notNull().default("1"), }); export const CalendarRewards = mysqlTable("calendar_rewards", { id: int("id").autoincrement().primaryKey().notNull(), campaignId: int("campaign_id").notNull().default(0), productName: varchar("product_name", { length: 128 }).notNull().default(""), customImage: varchar("custom_image", { length: 128 }).notNull().default(""), credits: int("credits").notNull().default(0), pixels: int("pixels").notNull().default(0), points: int("points").notNull().default(0), pointsType: int("points_type").notNull().default(0), badge: varchar("badge", { length: 25 }).notNull().default(""), itemId: int("item_id").notNull().default(0), subscriptionType: varchar("subscription_type", { length: 128 }).default(""), subscriptionDays: int("subscription_days").notNull().default(0), }); export const CameraWeb = mysqlTable("camera_web", { id: int("id").autoincrement().primaryKey().notNull(), userId: int("user_id").notNull(), roomId: int("room_id").notNull().default(0), timestamp: int("timestamp").notNull(), url: varchar("url", { length: 128 }).notNull().default(""), }); export const CatalogItems = mysqlTable("catalog_items", { id: int("id").autoincrement().primaryKey().notNull(), itemIds: varchar("item_ids", { length: 666 }).notNull(), pageId: int("page_id").notNull(), catalogName: varchar("catalog_name", { length: 100 }).notNull(), costCredits: int("cost_credits").notNull().default(3), costPoints: int("cost_points").notNull().default(0), pointsType: int("points_type").notNull().default(0), amount: int("amount").notNull().default(1), limitedStack: int("limited_stack").notNull().default(0), limitedSells: int("limited_sells").notNull().default(0), orderNumber: int("order_number").notNull().default(1), offerId: int("offer_id").notNull().default(-1), songId: int("song_id", { unsigned: true }).notNull().default(0), extradata: varchar("extradata", { length: 500 }).notNull().default(""), haveOffer: varchar("haveOffer", { length: 255 }).notNull().default("1"), clubOnly: varchar("club_only", { length: 1 }).notNull().default("0"), }); export const CatalogItemsBc = mysqlTable("catalog_items_bc", { id: int("id").autoincrement().primaryKey().notNull(), itemIds: varchar("item_ids", { length: 666 }).notNull(), pageId: int("page_id").notNull(), catalogName: varchar("catalog_name", { length: 100 }).notNull(), orderNumber: int("order_number").notNull().default(1), extradata: varchar("extradata", { length: 500 }).notNull().default(""), }); export const CatalogPages = mysqlTable("catalog_pages", { id: int("id").autoincrement().primaryKey().notNull(), parentId: int("parent_id").notNull().default(-1), captionSave: varchar("caption_save", { length: 25 }).notNull().default(""), caption: varchar("caption", { length: 128 }).notNull(), pageLayout: varchar("page_layout", { length: 26 }) .notNull() .default("default_3x3"), iconColor: int("icon_color").notNull().default(1), iconImage: int("icon_image").notNull().default(1), minRank: int("min_rank").notNull().default(1), orderNum: int("order_num").notNull().default(1), visible: varchar("visible", { length: 1 }).notNull().default("1"), enabled: varchar("enabled", { length: 1 }).notNull().default("1"), clubOnly: varchar("club_only", { length: 1 }).notNull().default("0"), vipOnly: varchar("vip_only", { length: 1 }).notNull().default("0"), pageHeadline: varchar("page_headline", { length: 1024 }) .notNull() .default(""), pageTeaser: varchar("page_teaser", { length: 64 }).notNull().default(""), pageSpecial: varchar("page_special", { length: 2048 }), pageText1: text("page_text1"), pageText2: text("page_text2"), pageTextDetails: text("page_text_details"), pageTextTeaser: text("page_text_teaser"), roomId: int("room_id").default(0), includes: varchar("includes", { length: 128 }).notNull().default(""), }); export const CatalogPagesBc = mysqlTable("catalog_pages_bc", { id: int("id").autoincrement().primaryKey().notNull(), parentId: int("parent_id").notNull().default(-1), caption: varchar("caption", { length: 128 }).notNull(), pageLayout: varchar("page_layout", { length: 26 }) .notNull() .default("default_3x3"), iconColor: int("icon_color").notNull().default(1), iconImage: int("icon_image").notNull().default(1), orderNum: int("order_num").notNull().default(1), visible: varchar("visible", { length: 1 }).notNull().default("1"), enabled: varchar("enabled", { length: 1 }).notNull().default("1"), pageHeadline: varchar("page_headline", { length: 1024 }) .notNull() .default(""), pageTeaser: varchar("page_teaser", { length: 64 }).notNull().default(""), pageSpecial: varchar("page_special", { length: 2048 }), pageText1: text("page_text1"), pageText2: text("page_text2"), pageTextDetails: text("page_text_details"), pageTextTeaser: text("page_text_teaser"), }); export const EmulatorErrors = mysqlTable("emulator_errors", { id: int("id").autoincrement().primaryKey().notNull(), timestamp: int("timestamp").notNull().default(0), version: varchar("version", { length: 64 }).notNull(), buildHash: varchar("build_hash", { length: 64 }).notNull(), type: varchar("type", { length: 32 }).notNull().default("Exception"), stacktrace: binary("stacktrace").notNull(), }); export const EmulatorSettings = mysqlTable("emulator_settings", { key: varchar("key", { length: 100 }).primaryKey().notNull(), value: varchar("value", { length: 512 }).notNull(), }); export const EmulatorTexts = mysqlTable("emulator_texts", { key: varchar("key", { length: 100 }).primaryKey().notNull(), value: varchar("value", { length: 4096 }).notNull(), }); export const Guilds = mysqlTable("guilds", { id: int("id").autoincrement().primaryKey().notNull(), userId: int("user_id").notNull().default(0), name: varchar("name", { length: 50 }).notNull().default(""), description: varchar("description", { length: 250 }).notNull().default(""), roomId: int("room_id").notNull().default(0), state: int("state").notNull().default(0), rights: varchar("rights", { length: 1 }).notNull().default("0"), colorOne: int("color_one").notNull().default(0), colorTwo: int("color_two").notNull().default(0), badge: varchar("badge", { length: 256 }).notNull().default(""), dateCreated: int("date_created").notNull(), forum: varchar("forum", { length: 1 }).notNull().default("0"), readForum: varchar("read_forum", { length: 8 }).notNull().default("EVERYONE"), postMessages: varchar("post_messages", { length: 8 }) .notNull() .default("EVERYONE"), postThreads: varchar("post_threads", { length: 8 }) .notNull() .default("EVERYONE"), modForum: varchar("mod_forum", { length: 6 }).notNull().default("ADMINS"), }); export const GuildsForumsComments = mysqlTable("guilds_forums_comments", { id: int("id", { unsigned: true }).autoincrement().primaryKey().notNull(), threadId: int("thread_id", { unsigned: true }).notNull().default(0), userId: int("user_id").notNull().default(0), message: text("message").notNull(), createdAt: int("created_at").notNull().default(0), state: int("state").notNull().default(0), adminId: int("admin_id").notNull().default(0), }); export const GuildsForumsThreads = mysqlTable("guilds_forums_threads", { id: int("id", { unsigned: true }).autoincrement().primaryKey().notNull(), guildId: int("guild_id").default(0), openerId: int("opener_id").default(0), subject: varchar("subject", { length: 255 }).default(""), postsCount: int("posts_count").default(0), createdAt: int("created_at").default(0), updatedAt: int("updated_at").default(0), state: int("state").default(0), pinned: tinyint("pinned").default(0), locked: tinyint("locked").default(0), adminId: int("admin_id").default(0), }); export const GuildsMembers = mysqlTable("guilds_members", { id: int("id").autoincrement().primaryKey().notNull(), guildId: int("guild_id").notNull().default(0), userId: int("user_id").notNull().default(0), levelId: int("level_id").notNull().default(0), memberSince: int("member_since").notNull().default(0), }); export const Items = mysqlTable("items", { id: int("id").autoincrement().primaryKey().notNull(), userId: int("user_id").notNull().default(0), roomId: int("room_id").notNull().default(0), itemId: int("item_id", { unsigned: true }).default(0), wallPos: varchar("wall_pos", { length: 20 }).notNull().default(""), x: int("x").notNull().default(0), y: int("y").notNull().default(0), z: double("z").notNull().default(0.0), rot: int("rot").notNull().default(0), extraData: varchar("extra_data", { length: 1024 }).notNull().default(""), wiredData: varchar("wired_data", { length: 10000 }).notNull().default(""), limitedData: varchar("limited_data", { length: 10 }).notNull().default("0:0"), guildId: int("guild_id").notNull().default(0), }); export const ItemsBase = mysqlTable("items_base", { id: int("id", { unsigned: true }).autoincrement().primaryKey().notNull(), spriteId: int("sprite_id").notNull().default(0), publicName: varchar("public_name", { length: 56 }).notNull().default(""), itemName: varchar("item_name", { length: 70 }).notNull(), type: varchar("type", { length: 3 }).notNull().default("s"), width: int("width").notNull().default(1), length: int("length").notNull().default(1), stackHeight: double("stack_height").notNull().default(0.0), allowStack: tinyint("allow_stack").notNull().default(1), allowSit: tinyint("allow_sit").notNull().default(0), allowLay: tinyint("allow_lay").notNull().default(0), allowWalk: tinyint("allow_walk").notNull().default(0), allowGift: tinyint("allow_gift").notNull().default(1), allowTrade: tinyint("allow_trade").notNull().default(1), allowRecycle: tinyint("allow_recycle").notNull().default(0), allowMarketplaceSell: tinyint("allow_marketplace_sell").notNull().default(0), allowInventoryStack: tinyint("allow_inventory_stack").notNull().default(1), interactionType: varchar("interaction_type", { length: 500 }) .notNull() .default("default"), interactionModesCount: int("interaction_modes_count").notNull().default(1), vendingIds: varchar("vending_ids", { length: 255 }).notNull().default("0"), multiheight: varchar("multiheight", { length: 50 }).notNull().default("0"), customparams: varchar("customparams", { length: 25600 }) .notNull() .default(""), effectIdMale: int("effect_id_male").notNull().default(0), effectIdFemale: int("effect_id_female").notNull().default(0), clothingOnWalk: varchar("clothing_on_walk", { length: 255 }) .notNull() .default(""), }); export const LogsShopPurchases = mysqlTable("logs_shop_purchases", { id: int("id", { unsigned: true }).autoincrement().primaryKey().notNull(), timestamp: int("timestamp", { unsigned: true }), userId: int("user_id"), catalogItemId: int("catalog_item_id", { unsigned: true }), itemIds: text("item_ids"), catalogName: varchar("catalog_name", { length: 255 }), costCredits: int("cost_credits"), costPoints: int("cost_points"), pointsType: int("points_type"), amount: int("amount"), }); export const LogsFurniImports = mysqlTable("logs_furni_imports", { id: int("id", { unsigned: true }).autoincrement().primaryKey().notNull(), timestamp: int("timestamp", { unsigned: true }).notNull(), userId: int("user_id").notNull(), batch: tinyint("batch").notNull().default(0), totalItems: int("total_items").notNull().default(0), succeeded: int("succeeded").notNull().default(0), failed: int("failed").notNull().default(0), details: text("details").notNull(), rolledBack: tinyint("rolled_back").notNull().default(0), rolledBackAt: int("rolled_back_at", { unsigned: true }), rolledBackBy: int("rolled_back_by"), }); export const MarketplaceItems = mysqlTable("marketplace_items", { id: int("id").autoincrement().primaryKey().notNull(), itemId: int("item_id").notNull(), userId: int("user_id").notNull(), price: int("price").notNull(), timestamp: int("timestamp").notNull(), soldTimestamp: int("sold_timestamp").notNull().default(0), state: int("state").notNull().default(1), }); export const MessengerFriendrequests = mysqlTable("messenger_friendrequests", { id: int("id").autoincrement().primaryKey().notNull(), userToId: int("user_to_id").notNull().default(0), userFromId: int("user_from_id").notNull().default(0), }); export const MessengerFriendships = mysqlTable("messenger_friendships", { id: int("id").autoincrement().primaryKey().notNull(), userOneId: int("user_one_id").notNull().default(0), userTwoId: int("user_two_id").notNull().default(0), relation: int("relation").notNull().default(0), friendsSince: int("friends_since").notNull().default(0), category: int("category").notNull().default(0), }); export const MessengerOffline = mysqlTable("messenger_offline", { id: int("id").autoincrement().primaryKey().notNull(), userId: int("user_id").notNull().default(0), userFromId: int("user_from_id").notNull().default(0), message: varchar("message", { length: 500 }).notNull(), sendedOn: int("sended_on").notNull(), }); export const NavigatorFlatcats = mysqlTable("navigator_flatcats", { id: int("id").autoincrement().primaryKey().notNull(), minRank: int("min_rank").notNull().default(0), captionSave: varchar("caption_save", { length: 32 }) .notNull() .default("caption_save"), caption: varchar("caption", { length: 100 }).notNull(), canTrade: varchar("canTrade", { length: 255 }).notNull().default("1"), maxUserCount: int("max_user_count").notNull().default(100), public: varchar("public", { length: 1 }).notNull().default("0"), listType: int("list_type").notNull().default(0), orderNum: int("order_num").notNull().default(0), }); export const NavigatorPubliccats = mysqlTable("navigator_publiccats", { id: int("id").autoincrement().primaryKey().notNull(), name: varchar("name", { length: 32 }).notNull().default("Staff Picks"), image: varchar("image", { length: 1 }).notNull().default("0"), visible: varchar("visible", { length: 1 }).notNull().default("1"), orderNum: int("order_num").notNull().default(0), }); export const RoomTradeLog = mysqlTable("room_trade_log", { id: int("id").autoincrement().primaryKey().notNull(), userOneId: int("user_one_id").notNull(), userTwoId: int("user_two_id").notNull(), userOneIp: varchar("user_one_ip", { length: 45 }).notNull(), userTwoIp: varchar("user_two_ip", { length: 45 }).notNull(), timestamp: int("timestamp").notNull(), userOneItemCount: int("user_one_item_count").notNull(), userTwoItemCount: int("user_two_item_count").notNull(), }); export const Rooms = mysqlTable("rooms", { id: int("id").autoincrement().primaryKey().notNull(), ownerId: int("owner_id").notNull().default(0), ownerName: varchar("owner_name", { length: 25 }).notNull().default(""), name: varchar("name", { length: 50 }).notNull().default(""), description: varchar("description", { length: 512 }).notNull().default(""), model: varchar("model", { length: 20 }).notNull().default("model_a"), password: varchar("password", { length: 20 }).notNull().default(""), state: varchar("state", { length: 9 }).notNull().default("open"), users: int("users").notNull().default(0), usersMax: int("users_max").notNull().default(25), guildId: int("guild_id").notNull().default(0), category: int("category").notNull().default(1), score: int("score").notNull().default(0), paperFloor: varchar("paper_floor", { length: 50 }).notNull().default("0.0"), paperWall: varchar("paper_wall", { length: 50 }).notNull().default("0.0"), paperLandscape: varchar("paper_landscape", { length: 50 }) .notNull() .default("0.0"), thicknessWall: int("thickness_wall").notNull().default(0), wallHeight: int("wall_height").notNull().default(-1), thicknessFloor: int("thickness_floor").notNull().default(0), moodlightData: varchar("moodlight_data", { length: 254 }) .notNull() .default("2,1,1,#000000,255;2,3,1,#000000,255;2,3,1,#000000,255;"), tags: varchar("tags", { length: 500 }).notNull().default(""), isPublic: varchar("is_public", { length: 1 }).notNull().default("0"), isStaffPicked: varchar("is_staff_picked", { length: 1 }) .notNull() .default("0"), allowOtherPets: varchar("allow_other_pets", { length: 1 }) .notNull() .default("0"), allowOtherPetsEat: varchar("allow_other_pets_eat", { length: 1 }) .notNull() .default("0"), allowWalkthrough: varchar("allow_walkthrough", { length: 1 }) .notNull() .default("1"), allowHidewall: varchar("allow_hidewall", { length: 1 }) .notNull() .default("0"), chatMode: int("chat_mode").notNull().default(0), chatWeight: int("chat_weight").notNull().default(1), chatSpeed: int("chat_speed").notNull().default(1), chatHearingDistance: int("chat_hearing_distance").notNull().default(50), chatProtection: int("chat_protection").notNull().default(2), overrideModel: varchar("override_model", { length: 1 }) .notNull() .default("0"), whoCanMute: int("who_can_mute").notNull().default(0), whoCanKick: int("who_can_kick").notNull().default(0), whoCanBan: int("who_can_ban").notNull().default(0), pollId: int("poll_id").notNull().default(0), rollerSpeed: int("roller_speed").notNull().default(4), promoted: varchar("promoted", { length: 1 }).notNull().default("0"), tradeMode: int("trade_mode").notNull().default(2), moveDiagonally: varchar("move_diagonally", { length: 1 }) .notNull() .default("1"), jukeboxActive: varchar("jukebox_active", { length: 1 }) .notNull() .default("0"), hidewired: varchar("hidewired", { length: 1 }).notNull().default("0"), isForSale: varchar("is_forsale", { length: 1 }).notNull().default("0"), }); export const Soundtracks = mysqlTable("soundtracks", { id: int("id").autoincrement().primaryKey().notNull(), code: varchar("code", { length: 32 }).notNull(), name: varchar("name", { length: 100 }).notNull(), author: varchar("author", { length: 50 }).notNull(), track: text("track").notNull(), length: int("length").notNull().default(0), }); export const SupportTickets = mysqlTable("support_tickets", { id: int("id").autoincrement().primaryKey().notNull(), state: int("state").notNull().default(0), type: int("type").notNull().default(1), timestamp: int("timestamp").notNull().default(0), score: int("score").notNull().default(0), senderId: int("sender_id").notNull().default(0), reportedId: int("reported_id").notNull().default(0), roomId: int("room_id").notNull().default(0), modId: int("mod_id").notNull().default(0), issue: varchar("issue", { length: 500 }).notNull().default(""), category: int("category").notNull().default(0), groupId: int("group_id").notNull(), threadId: int("thread_id").notNull(), commentId: int("comment_id").notNull(), photoItemId: int("photo_item_id").notNull().default(-1), }); export const UsersBadges = mysqlTable("users_badges", { id: int("id").autoincrement().primaryKey().notNull(), userId: int("user_id").notNull().default(0), slotId: int("slot_id").notNull().default(0), badgeCode: varchar("badge_code", { length: 32 }).notNull(), }); export const UsersSettings = mysqlTable("users_settings", { id: int("id").autoincrement().primaryKey().notNull(), userId: int("user_id").unique().notNull().default(0), credits: int("credits").notNull().default(0), achievementScore: int("achievement_score").notNull().default(0), dailyRespectPoints: int("daily_respect_points").notNull().default(3), dailyPetRespectPoints: int("daily_pet_respect_points").notNull().default(3), respectsGiven: int("respects_given").notNull().default(0), respectsReceived: int("respects_received").notNull().default(0), guildId: int("guild_id").notNull().default(0), canChangeName: varchar("can_change_name", { length: 1 }) .notNull() .default("0"), canTrade: varchar("can_trade", { length: 1 }).notNull().default("1"), isCitizen: varchar("is_citizen", { length: 1 }).notNull().default("0"), citizenLevel: int("citizen_level").notNull().default(0), helperLevel: int("helper_level").notNull().default(0), tradelockAmount: int("tradelock_amount").notNull().default(0), cfhSend: int("cfh_send").notNull().default(0), cfhAbusive: int("cfh_abusive").notNull().default(0), cfhWarnings: int("cfh_warnings").notNull().default(0), cfhBans: int("cfh_bans").notNull().default(0), blockFollowing: varchar("block_following", { length: 1 }) .notNull() .default("0"), blockFriendrequests: varchar("block_friendrequests", { length: 1 }) .notNull() .default("0"), blockRoominvites: varchar("block_roominvites", { length: 1 }) .notNull() .default("0"), volumeSystem: int("volume_system").notNull().default(100), volumeFurni: int("volume_furni").notNull().default(100), volumeTrax: int("volume_trax").notNull().default(100), oldChat: varchar("old_chat", { length: 1 }).notNull().default("0"), blockCameraFollow: varchar("block_camera_follow", { length: 1 }) .notNull() .default("0"), chatColor: int("chat_color").notNull().default(0), homeRoom: int("home_room").notNull().default(0), onlineTime: int("online_time").notNull().default(0), tags: varchar("tags", { length: 255 }) .notNull() .default("Arcturus Emulator;"), clubExpireTimestamp: int("club_expire_timestamp").notNull().default(0), loginStreak: int("login_streak").notNull().default(0), rentSpaceId: int("rent_space_id").notNull().default(0), rentSpaceEndtime: int("rent_space_endtime").notNull().default(0), hofPoints: int("hof_points").notNull().default(0), blockAlerts: varchar("block_alerts", { length: 1 }).notNull().default("0"), talentTrackCitizenshipLevel: int("talent_track_citizenship_level") .notNull() .default(-1), talentTrackHelpersLevel: int("talent_track_helpers_level") .notNull() .default(-1), ignoreBots: varchar("ignore_bots", { length: 1 }).notNull().default("0"), ignorePets: varchar("ignore_pets", { length: 1 }).notNull().default("0"), nux: varchar("nux", { length: 1 }).notNull().default("0"), muteEndTimestamp: int("mute_end_timestamp").notNull().default(0), allowNameChange: varchar("allow_name_change", { length: 1 }) .notNull() .default("0"), perkTrade: varchar("perk_trade", { length: 1 }).notNull().default("0"), forumsPostCount: int("forums_post_count").default(0), uiFlags: int("ui_flags").notNull().default(1), hasGottenDefaultSavedSearches: tinyint("has_gotten_default_saved_searches") .notNull() .default(0), hcGiftsClaimed: int("hc_gifts_claimed").default(0), lastHcPayday: int("last_hc_payday").default(0), maxRooms: int("max_rooms").default(50), maxFriends: int("max_friends").default(300), }); export const WebsiteArticles = mysqlTable("website_articles", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), slug: varchar("slug", { length: 255 }).unique().notNull(), title: varchar("title", { length: 255 }).notNull(), shortStory: varchar("short_story", { length: 255 }).notNull(), fullStory: longtext("full_story").notNull(), userId: int("user_id"), image: varchar("image", { length: 255 }).notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), status: varchar("status", { length: 20 }).notNull().default("published"), publishAt: timestamp("publish_at"), publishedAt: timestamp("published_at"), }); export const WebsiteLanguages = mysqlTable("website_languages", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), countryCode: varchar("country_code", { length: 8 }).unique().notNull(), language: varchar("language", { length: 255 }).unique().notNull(), }); export const UserReferrals = mysqlTable("user_referrals", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: int("user_id").notNull(), referralsTotal: bigint("referrals_total", { mode: "bigint", unsigned: true, }).notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const Referrals = mysqlTable("referrals", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: int("user_id").notNull(), referredUserId: bigint("referred_user_id", { mode: "bigint", unsigned: true, }).notNull(), referredUserIp: varchar("referred_user_ip", { length: 255 }).notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const ClaimedReferralLogs = mysqlTable("claimed_referral_logs", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: int("user_id").notNull(), ipAddress: varchar("ip_address", { length: 255 }).notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteHousekeepingPermissions = mysqlTable( "website_housekeeping_permissions", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), permission: varchar("permission", { length: 255 }).unique().notNull(), minRank: int("min_rank").notNull(), description: varchar("description", { length: 255 }), groupName: varchar("group_name", { length: 100 }), dependsOn: varchar("depends_on", { length: 255 }), updatedBy: int("updated_by"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }, ); export const WebsiteIpWhitelist = mysqlTable("website_ip_whitelist", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), ipAddress: varchar("ip_address", { length: 255 }).notNull(), asn: varchar("asn", { length: 255 }), whitelistAsn: boolean("whitelist_asn").notNull().default(false), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteIpBlacklist = mysqlTable("website_ip_blacklist", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), ipAddress: varchar("ip_address", { length: 255 }).notNull(), asn: varchar("asn", { length: 255 }), blacklistAsn: boolean("blacklist_asn").notNull().default(false), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsitePermissions = mysqlTable("website_permissions", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), permission: varchar("permission", { length: 255 }).unique().notNull(), minRank: varchar("min_rank", { length: 255 }).notNull(), description: varchar("description", { length: 255 }), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteArticleReactions = mysqlTable("website_article_reactions", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: int("user_id", { unsigned: true }).notNull(), articleId: bigint("article_id", { mode: "bigint", unsigned: true }).notNull(), reaction: varchar("reaction", { length: 50 }).notNull(), active: boolean("active").notNull().default(true), }); export const WebsiteWordfilter = mysqlTable("website_wordfilter", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), word: varchar("word", { length: 255 }).unique().notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteWriteableBoxes = mysqlTable("website_writeable_boxes", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), title: varchar("title", { length: 255 }).notNull(), icon: varchar("icon", { length: 255 }), content: text("content").notNull(), position: int("position").notNull().default(0), isActive: boolean("is_active").notNull().default(true), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteLoginLogs = mysqlTable("website_login_logs", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: int("user_id").notNull(), ip: varchar("ip", { length: 45 }).notNull(), userAgent: varchar("user_agent", { length: 512 }), createdAt: timestamp("created_at"), }); export const WebsiteBetaCodes = mysqlTable("website_beta_codes", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), code: varchar("code", { length: 255 }).unique().notNull(), userId: int("user_id"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteTeams = mysqlTable("website_teams", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), rankName: varchar("rank_name", { length: 255 }).unique().notNull(), hiddenRank: boolean("hidden_rank").notNull().default(false), badge: varchar("badge", { length: 255 }), jobDescription: varchar("job_description", { length: 255 }), staffColor: varchar("staff_color", { length: 255 }) .notNull() .default("#327fa8"), staffBackground: varchar("staff_background", { length: 255 }) .notNull() .default("staff-bg.png"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteStaffApplications = mysqlTable( "website_staff_applications", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: int("user_id").notNull(), rankId: int("rank_id").notNull(), content: text("content").notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }, ); export const WebsiteOpenPositions = mysqlTable("website_open_positions", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), permissionId: int("permission_id").unique().notNull(), description: text("description").notNull(), applyFrom: timestamp("apply_from"), applyTo: timestamp("apply_to"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteArticleComments = mysqlTable("website_article_comments", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), articleId: bigint("article_id", { mode: "bigint", unsigned: true }).notNull(), userId: int("user_id").notNull(), comment: varchar("comment", { length: 255 }).notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteRareValueCategories = mysqlTable( "website_rare_value_categories", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), name: varchar("name", { length: 255 }).unique().notNull(), badge: varchar("badge", { length: 255 }).notNull(), priority: int("priority", { unsigned: true }).notNull().default(1), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }, ); export const WebsiteRareValues = mysqlTable("website_rare_values", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), categoryId: bigint("category_id", { mode: "bigint", unsigned: true, }).notNull(), itemId: int("item_id"), name: varchar("name", { length: 255 }).notNull(), creditValue: varchar("credit_value", { length: 255 }), currencyValue: varchar("currency_value", { length: 255 }), currencyType: varchar("currency_type", { length: 255 }) .notNull() .default("diamonds"), furnitureIcon: varchar("furniture_icon", { length: 255 }).notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteRuleCategories = mysqlTable("website_rule_categories", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), name: varchar("name", { length: 255 }).unique().notNull(), description: varchar("description", { length: 255 }).notNull(), badge: varchar("badge", { length: 255 }).notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteRules = mysqlTable("website_rules", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), categoryId: bigint("category_id", { mode: "bigint", unsigned: true }), paragraph: varchar("paragraph", { length: 8 }).notNull(), rule: text("rule").notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteInstallation = mysqlTable("website_installation", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), step: int("step", { unsigned: true }).default(0), completed: boolean("completed").notNull().default(false), installationKey: varchar("installation_key", { length: 255 }), userIp: varchar("user_ip", { length: 255 }), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteHelpCenterCategories = mysqlTable( "website_help_center_categories", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), name: varchar("name", { length: 255 }).unique().notNull(), content: text("content").notNull(), position: int("position", { unsigned: true }).notNull().default(1), imageUrl: varchar("image_url", { length: 255 }), buttonText: varchar("button_text", { length: 255 }), buttonUrl: varchar("button_url", { length: 255 }), buttonColor: varchar("button_color", { length: 16 }) .notNull() .default("#eeb425"), buttonBorderColor: varchar("button_border_color", { length: 16 }) .notNull() .default("#facc15"), smallBox: boolean("small_box").notNull().default(false), }, ); export const WebsiteHelpCenterTickets = mysqlTable( "website_help_center_tickets", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: int("user_id"), categoryId: bigint("category_id", { mode: "bigint", unsigned: true }), title: varchar("title", { length: 255 }).notNull(), content: text("content").notNull(), open: boolean("open").notNull().default(true), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }, ); export const WebsitePaypalTransactions = mysqlTable( "website_paypal_transactions", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: int("user_id").notNull(), transactionId: varchar("transaction_id", { length: 255 }).notNull(), status: varchar("status", { length: 255 }), description: varchar("description", { length: 512 }), amount: double("amount").notNull(), currency: varchar("currency", { length: 255 }).notNull().default("USD"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }, ); export const WebsiteShopArticles = mysqlTable("website_shop_articles", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), categoryId: bigint("website_shop_category_id", { mode: "bigint", unsigned: true, }), name: varchar("name", { length: 255 }).unique().notNull(), info: varchar("info", { length: 255 }).notNull(), iconUrl: varchar("icon_url", { length: 255 }).notNull(), color: varchar("color", { length: 255 }).notNull(), costs: int("costs", { unsigned: true }).notNull(), giveRank: int("give_rank"), isGiftable: boolean("is_giftable").notNull().default(false), credits: int("credits", { unsigned: true }), duckets: int("duckets", { unsigned: true }), diamonds: int("diamonds", { unsigned: true }), badges: varchar("badges", { length: 255 }), furniture: longtext("furniture"), position: int("position", { unsigned: true }).notNull().default(0), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteShopVouchers = mysqlTable("website_shop_vouchers", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), code: varchar("code", { length: 255 }).unique().notNull(), maxUses: int("max_uses", { unsigned: true }).notNull().default(1), useCount: int("use_count", { unsigned: true }).notNull().default(0), amount: int("amount", { unsigned: true }).notNull(), expiresAt: timestamp("expires_at"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteUsedShopVouchers = mysqlTable( "website_used_shop_vouchers", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: int("user_id").notNull(), voucherId: bigint("voucher_id", { mode: "bigint", unsigned: true, }).notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }, ); export const WebsiteShopArticleFeatures = mysqlTable( "website_shop_article_features", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), articleId: bigint("article_id", { mode: "bigint", unsigned: true, }).notNull(), content: varchar("content", { length: 255 }).notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }, ); export const WebsiteHelpCenterTicketReplies = mysqlTable( "website_help_center_ticket_replies", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), ticketId: bigint("ticket_id", { mode: "bigint", unsigned: true }).notNull(), userId: int("user_id").notNull(), content: text("content").notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }, ); export const WebsiteTicket = mysqlTable("website_tickets", { id: int("id").autoincrement().primaryKey().notNull(), subject: varchar("subject", { length: 255 }).notNull(), category: varchar("category", { length: 50 }).notNull().default("general"), priority: varchar("priority", { length: 20 }).notNull().default("normal"), status: varchar("status", { length: 20 }).notNull().default("open"), creatorId: int("creator_id").notNull(), assigneeId: int("assignee_id"), closedAt: datetime("closed_at"), createdAt: datetime("created_at").notNull().default(sql`CURRENT_TIMESTAMP`), updatedAt: datetime("updated_at").notNull(), }); export const WebsiteTicketMessage = mysqlTable("website_ticket_messages", { id: int("id").autoincrement().primaryKey().notNull(), ticketId: int("ticket_id").notNull(), userId: int("user_id").notNull(), message: text("message").notNull(), isStaff: int("is_staff").notNull().default(0), createdAt: datetime("created_at").notNull().default(sql`CURRENT_TIMESTAMP`), }); export const WebsiteTicketTemplate = mysqlTable("website_ticket_templates", { id: int("id").autoincrement().primaryKey().notNull(), title: varchar("title", { length: 255 }).notNull(), content: text("content").notNull(), category: varchar("category", { length: 50 }).notNull().default("general"), sortOrder: int("sort_order").notNull().default(0), createdAt: datetime("created_at").notNull().default(sql`CURRENT_TIMESTAMP`), }); export const UserWatch = mysqlTable( "user_watch", { id: int("id").autoincrement().primaryKey().notNull(), staffId: int("staff_id").notNull(), targetUserId: int("target_user_id").notNull(), reason: varchar("reason", { length: 255 }).notNull().default(""), createdAt: datetime("created_at").notNull().default(sql`CURRENT_TIMESTAMP`), }, (t) => [ uniqueIndex("user_watch_staffId_targetUserId").on( t.staffId, t.targetUserId, ), ], ); export const AdminAuditLog = mysqlTable("admin_audit_log", { id: int("id").autoincrement().primaryKey().notNull(), userId: int("user_id").notNull(), action: varchar("action", { length: 191 }).notNull().default(""), target: varchar("target", { length: 191 }).notNull().default(""), targetId: int("target_id"), details: text("details"), before: mediumtext("before"), after: mediumtext("after"), diff: text("diff"), ipAddress: varchar("ip_address", { length: 45 }), createdAt: varchar("created_at", { length: 64 }).notNull().default(""), updatedAt: varchar("updated_at", { length: 64 }), }); export const AclRole = mysqlTable("acl_roles", { id: int("id").autoincrement().primaryKey().notNull(), slug: varchar("slug", { length: 191 }).unique().notNull(), title: varchar("title", { length: 255 }).notNull().default(""), description: text("description"), createdAt: datetime("created_at").default(sql`CURRENT_TIMESTAMP`), updatedAt: datetime("updated_at"), }); export const AclPermission = mysqlTable("acl_permissions", { id: int("id").autoincrement().primaryKey().notNull(), slug: varchar("slug", { length: 191 }).unique().notNull(), title: varchar("title", { length: 255 }).notNull().default(""), createdAt: datetime("created_at").default(sql`CURRENT_TIMESTAMP`), updatedAt: datetime("updated_at"), }); export const AclModelRole = mysqlTable("acl_model_roles", { id: int("id").autoincrement().primaryKey().notNull(), modelType: varchar("model_type", { length: 191 }).notNull().default("User"), modelId: int("model_id").notNull(), roleId: int("role_id").notNull(), }); export const AclModelPermission = mysqlTable("acl_model_permissions", { id: int("id").autoincrement().primaryKey().notNull(), modelType: varchar("model_type", { length: 191 }).notNull().default("Role"), modelId: int("model_id").notNull(), permissionId: int("permission_id").notNull(), }); export const AlertLogs = mysqlTable("alert_logs", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), type: varchar("type", { length: 255 }).notNull(), severity: varchar("severity", { length: 255 }).notNull(), message: text("message").notNull(), context: longtext("context"), sentViaEmail: boolean("sent_via_email").notNull().default(false), sentViaDiscord: boolean("sent_via_discord").notNull().default(false), isRead: boolean("is_read").notNull().default(false), readAt: timestamp("read_at"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteUserGuestbooks = mysqlTable("website_user_guestbooks", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), profileId: int("profile_id").notNull(), userId: int("user_id").notNull(), message: varchar("message", { length: 255 }).notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteShopCategories = mysqlTable("website_shop_categories", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), name: varchar("name", { length: 255 }).notNull(), description: text("description"), icon: varchar("icon", { length: 255 }), order: int("order").notNull().default(0), }); export const WebsiteMaintenanceTasks = mysqlTable("website_maintenance_tasks", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: int("user_id"), task: varchar("task", { length: 255 }).notNull(), completed: boolean("completed").notNull().default(false), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const Tags = mysqlTable("tags", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), name: varchar("name", { length: 255 }).notNull(), backgroundColor: varchar("background_color", { length: 10 }).notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const Taggables = mysqlTable( "taggables", { tagId: bigint("tag_id", { mode: "bigint", unsigned: true }).notNull(), taggableId: bigint("taggable_id", { mode: "bigint", unsigned: true, }).notNull(), taggableType: varchar("taggable_type", { length: 255 }).notNull(), }, (t) => [ uniqueIndex("taggables_tagId_taggableId_taggableType").on( t.tagId, t.taggableId, t.taggableType, ), ], ); export const WebsiteBadges = mysqlTable("website_badges", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), badgeKey: varchar("badge_key", { length: 255 }).unique().notNull(), badgeName: varchar("badge_name", { length: 255 }).notNull(), badgeDescription: text("badge_description").notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteAds = mysqlTable("website_ads", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), image: varchar("image", { length: 255 }).notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteDrawbadges = mysqlTable("website_drawbadges", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: int("user_id").notNull(), badgePath: varchar("badge_path", { length: 255 }).notNull(), badgeUrl: varchar("badge_url", { length: 255 }).notNull(), badgeName: varchar("badge_name", { length: 255 }).notNull(), badgeDesc: varchar("badge_desc", { length: 255 }).notNull(), published: boolean("published").notNull().default(false), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const RadioRanks = mysqlTable("radio_ranks", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), name: varchar("name", { length: 255 }).notNull(), description: varchar("description", { length: 255 }), badgeCode: varchar("badge_code", { length: 255 }), isActive: boolean("is_active").notNull().default(true), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const RadioShouts = mysqlTable("radio_shouts", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: bigint("user_id", { mode: "bigint", unsigned: true }).notNull(), message: text("message").notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const RadioApplications = mysqlTable("radio_applications", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: bigint("user_id", { mode: "bigint", unsigned: true }).notNull(), realName: varchar("real_name", { length: 255 }).notNull(), age: int("age").notNull(), availability: text("availability").notNull(), experience: text("experience"), motivation: text("motivation").notNull(), musicStyle: text("music_style"), discordUsername: varchar("discord_username", { length: 255 }), rankId: bigint("rank_id", { mode: "bigint", unsigned: true }), status: varchar("status", { length: 8 }).notNull().default("pending"), approvedBy: bigint("approved_by", { mode: "bigint", unsigned: true }), approvedAt: timestamp("approved_at"), rejectedBy: bigint("rejected_by", { mode: "bigint", unsigned: true }), rejectedAt: timestamp("rejected_at"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const RadioSchedules = mysqlTable("radio_schedules", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: bigint("user_id", { mode: "bigint", unsigned: true }).notNull(), day: varchar("day", { length: 255 }).notNull(), startTime: timeAsDate("start_time").notNull(), endTime: timeAsDate("end_time").notNull(), showName: varchar("show_name", { length: 255 }), description: text("description"), isActive: boolean("is_active").notNull().default(true), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const RadioBanners = mysqlTable("radio_banners", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: bigint("user_id", { mode: "bigint", unsigned: true }).notNull(), imagePath: varchar("image_path", { length: 255 }).notNull(), title: varchar("title", { length: 255 }), description: text("description"), sortOrder: int("sort_order").notNull().default(0), isActive: boolean("is_active").notNull().default(true), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const RadioHistory = mysqlTable("radio_history", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: bigint("user_id", { mode: "bigint", unsigned: true }).notNull(), showName: varchar("show_name", { length: 255 }), startedAt: timestamp("started_at").notNull(), endedAt: timestamp("ended_at"), listenersCount: int("listeners_count").notNull().default(0), notes: text("notes"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const RadioContests = mysqlTable("radio_contests", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), title: varchar("title", { length: 255 }).notNull(), description: text("description"), prize: varchar("prize", { length: 255 }), startDate: timestamp("start_date"), endDate: timestamp("end_date"), winnerId: bigint("winner_id", { mode: "bigint", unsigned: true }), isActive: boolean("is_active").notNull().default(true), createdBy: bigint("created_by", { mode: "bigint", unsigned: true }), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const RadioGiveaways = mysqlTable("radio_giveaways", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), title: varchar("title", { length: 255 }).notNull(), description: text("description"), prize: varchar("prize", { length: 255 }), prizeAmount: int("prize_amount").notNull().default(0), prizeCurrency: varchar("prize_currency", { length: 50 }), startDate: timestamp("start_date"), endDate: timestamp("end_date"), winnerId: bigint("winner_id", { mode: "bigint", unsigned: true }), isActive: boolean("is_active").notNull().default(true), createdBy: bigint("created_by", { mode: "bigint", unsigned: true }), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const RadioListenerPoints = mysqlTable("radio_listener_points", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: bigint("user_id", { mode: "bigint", unsigned: true }).notNull(), points: decimal("points", { precision: 10, scale: 2, mode: "number" }) .notNull() .default(0), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const RadioSongRequests = mysqlTable("radio_song_requests", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: bigint("user_id", { mode: "bigint", unsigned: true }), songTitle: varchar("song_title", { length: 255 }), artist: varchar("artist", { length: 255 }), isApproved: boolean("is_approved").notNull().default(false), isPlayed: boolean("is_played").notNull().default(false), votes: int("votes").notNull().default(0), submittedAt: timestamp("submitted_at"), playedAt: timestamp("played_at"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const RadioSongVotes = mysqlTable("radio_song_votes", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const GameScores = mysqlTable("game_scores", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: int("user_id", { unsigned: true }).notNull(), game: varchar("game", { length: 50 }).notNull(), score: int("score").notNull().default(0), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const GameRooms = mysqlTable("game_rooms", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), game: varchar("game", { length: 50 }).notNull(), player1Id: int("player1_id", { unsigned: true }).notNull(), player2Id: int("player2_id", { unsigned: true }), state: longtext("state"), turn: int("turn", { unsigned: true }).notNull().default(1), winnerId: int("winner_id", { unsigned: true }), status: varchar("status", { length: 8 }).notNull().default("waiting"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const GameRewardClaims = mysqlTable( "game_reward_claims", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: bigint("user_id", { mode: "bigint", unsigned: true }).notNull(), game: varchar("game", { length: 50 }).notNull(), winsRequired: int("wins_required").notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }, (t) => [ uniqueIndex("game_reward_claims_userId_game_winsRequired").on( t.userId, t.game, t.winsRequired, ), ], ); export const GameChatMessages = mysqlTable("game_chat_messages", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), roomId: bigint("room_id", { mode: "bigint", unsigned: true }).notNull(), userId: bigint("user_id", { mode: "bigint", unsigned: true }).notNull(), message: text("message").notNull(), type: varchar("type", { length: 255 }).notNull().default("chat"), reactions: longtext("reactions"), createdAt: timestamp("created_at").notNull(), }); export const GameReplays = mysqlTable("game_replays", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), game: varchar("game", { length: 255 }).notNull(), player1Id: bigint("player1_id", { mode: "bigint", unsigned: true }).notNull(), player2Id: bigint("player2_id", { mode: "bigint", unsigned: true }), gameData: longtext("game_data").notNull(), moves: longtext("moves").notNull(), winner: varchar("winner", { length: 255 }), player1Score: int("player1_score").notNull().default(0), player2Score: int("player2_score").notNull().default(0), startedAt: timestamp("started_at").notNull(), endedAt: timestamp("ended_at"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const GameRanks = mysqlTable("game_ranks", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), name: varchar("name", { length: 255 }).notNull(), slug: varchar("slug", { length: 255 }).unique().notNull(), icon: varchar("icon", { length: 255 }).notNull().default("⭐"), color: varchar("color", { length: 255 }).notNull().default("#ffffff"), minPoints: int("min_points").notNull().default(0), maxPoints: int("max_points"), tier: int("tier").notNull().default(1), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const UserGameRanks = mysqlTable( "user_game_ranks", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: bigint("user_id", { mode: "bigint", unsigned: true }).notNull(), game: varchar("game", { length: 255 }).notNull(), rankId: bigint("rank_id", { mode: "bigint", unsigned: true }).notNull(), points: int("points").notNull().default(0), wins: int("wins").notNull().default(0), gamesPlayed: int("games_played").notNull().default(0), winStreak: int("win_streak").notNull().default(0), bestStreak: int("best_streak").notNull().default(0), lastPlayedAt: timestamp("last_played_at"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }, (t) => [uniqueIndex("user_game_ranks_userId_game").on(t.userId, t.game)], ); export const GameInvitations = mysqlTable("game_invitations", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), fromUserId: bigint("from_user_id", { mode: "bigint", unsigned: true, }).notNull(), toUserId: bigint("to_user_id", { mode: "bigint", unsigned: true }).notNull(), game: varchar("game", { length: 255 }).notNull(), status: varchar("status", { length: 255 }).notNull().default("pending"), betAmount: int("bet_amount").notNull().default(0), betCurrency: varchar("bet_currency", { length: 255 }) .notNull() .default("credits"), roomId: bigint("room_id", { mode: "bigint", unsigned: true }), expiresAt: timestamp("expires_at"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const UserGameXp = mysqlTable( "user_game_xp", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: bigint("user_id", { mode: "bigint", unsigned: true }).notNull(), game: varchar("game", { length: 255 }).notNull(), xp: int("xp").notNull().default(0), level: int("level").notNull().default(1), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }, (t) => [uniqueIndex("user_game_xp_userId_game").on(t.userId, t.game)], ); export const GameLevelRewards = mysqlTable("game_level_rewards", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), game: varchar("game", { length: 255 }).notNull(), level: int("level").notNull(), rewardType: varchar("reward_type", { length: 255 }).notNull(), rewardCurrency: varchar("reward_currency", { length: 255 }), rewardAmount: int("reward_amount").notNull().default(0), claimed: boolean("claimed").notNull().default(false), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const DailyChallenges = mysqlTable("daily_challenges", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), name: varchar("name", { length: 255 }).notNull(), description: varchar("description", { length: 255 }).notNull(), game: varchar("game", { length: 255 }), type: varchar("type", { length: 255 }).notNull(), target: int("target").notNull(), rewardCurrency: varchar("reward_currency", { length: 255 }) .notNull() .default("credits"), rewardAmount: int("reward_amount").notNull(), date: dateAsDate("date").notNull(), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const UserChallengeProgress = mysqlTable( "user_challenge_progress", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: bigint("user_id", { mode: "bigint", unsigned: true }).notNull(), challengeId: bigint("challenge_id", { mode: "bigint", unsigned: true, }).notNull(), progress: int("progress").notNull().default(0), completed: boolean("completed").notNull().default(false), claimed: boolean("claimed").notNull().default(false), completedAt: timestamp("completed_at"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }, (t) => [ uniqueIndex("user_challenge_progress_userId_challengeId").on( t.userId, t.challengeId, ), ], ); export const PersonalAccessTokens = mysqlTable("personal_access_tokens", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), tokenableId: bigint("tokenable_id", { mode: "bigint", unsigned: true, }).notNull(), tokenableType: varchar("tokenable_type", { length: 255 }).notNull(), name: varchar("name", { length: 255 }).notNull(), token: varchar("token", { length: 64 }).unique().notNull(), abilities: text("abilities"), lastUsedAt: timestamp("last_used_at"), expiresAt: timestamp("expires_at"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const StaffActivities = mysqlTable("staff_activities", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: bigint("user_id", { mode: "bigint", unsigned: true }).notNull(), action: varchar("action", { length: 50 }).notNull(), targetType: varchar("target_type", { length: 100 }), targetId: bigint("target_id", { mode: "bigint", unsigned: true }), description: text("description").notNull(), ipAddress: varchar("ip_address", { length: 45 }), metadata: longtext("metadata"), createdAt: timestamp("created_at").notNull().default(sql`CURRENT_TIMESTAMP`), updatedAt: timestamp("updated_at"), }); export const EmailTemplates = mysqlTable("email_templates", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), name: varchar("name", { length: 255 }).unique().notNull(), subject: varchar("subject", { length: 255 }).notNull(), body: text("body").notNull(), variables: text("variables"), isActive: boolean("is_active").notNull().default(true), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const SocialAccounts = mysqlTable( "social_accounts", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), userId: bigint("user_id", { mode: "bigint", unsigned: true }).notNull(), provider: varchar("provider", { length: 255 }).notNull(), providerId: varchar("provider_id", { length: 255 }).notNull(), avatar: varchar("avatar", { length: 255 }), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }, (t) => [ uniqueIndex("social_accounts_provider_providerId").on( t.provider, t.providerId, ), ], ); export const RadioApiKeys = mysqlTable("radio_api_keys", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), name: varchar("name", { length: 255 }).notNull(), key: varchar("key", { length: 64 }).unique().notNull(), allowedIps: varchar("allowed_ips", { length: 255 }), permissions: longtext("permissions"), rateLimit: int("rate_limit").notNull().default(300), lastUsedAt: timestamp("last_used_at"), expiresAt: timestamp("expires_at"), isActive: boolean("is_active").notNull().default(true), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const RadioSongPlays = mysqlTable("radio_song_plays", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), title: varchar("title", { length: 255 }).notNull(), artist: varchar("artist", { length: 255 }), album: varchar("album", { length: 255 }), artworkUrl: varchar("artwork_url", { length: 255 }), duration: int("duration", { unsigned: true }), playedAt: timestamp("played_at").notNull(), djId: bigint("dj_id", { mode: "bigint", unsigned: true }), metadata: longtext("metadata"), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const RadioAutoDjPlaylist = mysqlTable("radio_auto_dj_playlist", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), title: varchar("title", { length: 255 }).notNull(), artist: varchar("artist", { length: 255 }), album: varchar("album", { length: 255 }), artworkUrl: varchar("artwork_url", { length: 255 }), duration: int("duration", { unsigned: true }), playCount: int("play_count", { unsigned: true }).notNull().default(0), lastPlayedAt: timestamp("last_played_at"), isActive: boolean("is_active").notNull().default(true), sortOrder: int("sort_order", { unsigned: true }).notNull().default(0), createdAt: timestamp("created_at"), updatedAt: timestamp("updated_at"), }); export const WebsiteBanner = mysqlTable("website_banners", { id: int("id").autoincrement().primaryKey().notNull(), title: varchar("title", { length: 255 }).notNull().default(""), subtitle: varchar("subtitle", { length: 500 }).notNull().default(""), image: varchar("image", { length: 500 }).notNull().default(""), link: varchar("link", { length: 500 }).notNull().default(""), color: varchar("color", { length: 20 }).notNull().default(""), isActive: int("is_active").notNull().default(1), sortOrder: int("sort_order").notNull().default(0), startDate: varchar("start_date", { length: 50 }), endDate: varchar("end_date", { length: 50 }), }); export const WebsiteEventType = mysqlTable("website_event_types", { id: int("id").autoincrement().primaryKey().notNull(), name: varchar("name", { length: 100 }).notNull(), slug: varchar("slug", { length: 100 }).unique().notNull(), description: varchar("description", { length: 500 }).notNull().default(""), color: varchar("color", { length: 20 }).notNull().default("#3b82f6"), icon: varchar("icon", { length: 50 }).notNull().default("calendar"), isActive: int("is_active").notNull().default(1), minRank: int("min_rank").notNull().default(0), }); export const WebsiteEvent = mysqlTable("website_events", { id: int("id").autoincrement().primaryKey().notNull(), title: varchar("title", { length: 255 }).notNull(), description: text("description").notNull(), typeId: int("type_id").notNull(), hostUserId: int("host_user_id").notNull(), roomId: int("room_id"), startsAt: datetime("starts_at", { fsp: 3 }).notNull(), endsAt: datetime("ends_at", { fsp: 3 }), maxPlayers: int("max_players"), isRecurring: int("is_recurring").notNull().default(0), recurrenceRule: varchar("recurrence_rule", { length: 255 }), status: varchar("status", { length: 20 }).notNull().default("draft"), image: varchar("image", { length: 500 }), createdAt: datetime("created_at", { fsp: 3 }) .notNull() .default(sql`CURRENT_TIMESTAMP`), updatedAt: datetime("updated_at", { fsp: 3 }).notNull(), }); export const WebsiteEventRegistration = mysqlTable( "website_event_registrations", { id: int("id").autoincrement().primaryKey().notNull(), eventId: int("event_id").notNull(), userId: int("user_id").notNull(), createdAt: datetime("created_at", { fsp: 3 }) .notNull() .default(sql`CURRENT_TIMESTAMP`), }, (t) => [ uniqueIndex("website_event_registrations_eventId_userId").on( t.eventId, t.userId, ), ], ); export const WebsiteEventPrize = mysqlTable("website_event_prizes", { id: int("id").autoincrement().primaryKey().notNull(), eventId: int("event_id").notNull(), position: int("position").notNull().default(1), prizeType: varchar("prize_type", { length: 20 }).notNull().default("badge"), badgeCode: varchar("badge_code", { length: 50 }), credits: int("credits").notNull().default(0), pixels: int("pixels").notNull().default(0), points: int("points").notNull().default(0), itemId: int("item_id"), description: varchar("description", { length: 255 }).notNull().default(""), }); export const WebsiteEventWinner = mysqlTable( "website_event_winners", { id: int("id").autoincrement().primaryKey().notNull(), eventId: int("event_id").notNull(), userId: int("user_id").notNull(), position: int("position").notNull().default(1), createdAt: datetime("created_at", { fsp: 3 }) .notNull() .default(sql`CURRENT_TIMESTAMP`), }, (t) => [ uniqueIndex("website_event_winners_eventId_userId").on(t.eventId, t.userId), ], ); export const WebsitePoll = mysqlTable("website_polls", { id: int("id").autoincrement().primaryKey().notNull(), title: varchar("title", { length: 255 }).notNull(), description: text("description"), status: varchar("status", { length: 20 }).notNull().default("draft"), showResults: int("show_results").notNull().default(1), multipleChoice: int("multiple_choice").notNull().default(0), startsAt: datetime("starts_at", { fsp: 3 }), endsAt: datetime("ends_at", { fsp: 3 }), createdAt: datetime("created_at", { fsp: 3 }) .notNull() .default(sql`CURRENT_TIMESTAMP`), updatedAt: datetime("updated_at", { fsp: 3 }).notNull(), }); export const WebsitePollQuestion = mysqlTable("website_poll_questions", { id: int("id").autoincrement().primaryKey().notNull(), pollId: int("poll_id").notNull(), question: varchar("question", { length: 500 }).notNull(), type: varchar("type", { length: 20 }).notNull().default("single"), sortOrder: int("sort_order").notNull().default(0), options: text("options").notNull(), }); export const WebsitePollVote = mysqlTable( "website_poll_votes", { id: int("id").autoincrement().primaryKey().notNull(), questionId: int("question_id").notNull(), userId: int("user_id").notNull(), answer: varchar("answer", { length: 500 }).notNull(), createdAt: datetime("created_at", { fsp: 3 }) .notNull() .default(sql`CURRENT_TIMESTAMP`), }, (t) => [ uniqueIndex("website_poll_votes_questionId_userId").on( t.questionId, t.userId, ), ], ); export const AchievementsTalents = mysqlTable("achievements_talents", { id: int("id").autoincrement().primaryKey().notNull(), type: varchar("type", { length: 11 }).notNull().default("citizenship"), level: int("level").notNull().default(0), achievementIds: varchar("achievement_ids", { length: 100 }) .notNull() .default(""), achievementLevels: varchar("achievement_levels", { length: 100 }) .notNull() .default(""), rewardFurni: varchar("reward_furni", { length: 100 }).notNull().default(""), rewardPerks: varchar("reward_perks", { length: 100 }).notNull().default(""), rewardBadges: varchar("reward_badges", { length: 100 }).notNull().default(""), }); export const Bots = mysqlTable("bots", { id: int("id").autoincrement().primaryKey().notNull(), userId: int("user_id").notNull().default(0), roomId: int("room_id").notNull().default(0), name: varchar("name", { length: 25 }).notNull().default(""), motto: varchar("motto", { length: 100 }).notNull().default(""), figure: varchar("figure", { length: 500 }).notNull().default(""), gender: varchar("gender", { length: 1 }).notNull().default("M"), x: int("x").notNull().default(0), y: int("y").notNull().default(0), z: double("z").notNull().default(0.0), rot: int("rot").notNull().default(0), chatLines: varchar("chat_lines", { length: 5112 }).notNull().default(""), chatAuto: varchar("chat_auto", { length: 1 }).notNull().default("1"), chatRandom: varchar("chat_random", { length: 1 }).notNull().default("1"), chatDelay: int("chat_delay").notNull().default(5), dance: int("dance").notNull().default(0), freeroam: varchar("freeroam", { length: 1 }).notNull().default("0"), type: varchar("type", { length: 32 }).notNull().default("generic"), effect: int("effect").notNull().default(0), bubbleId: int("bubble_id").default(31), }); export const CatalogClothing = mysqlTable("catalog_clothing", { id: int("id").autoincrement().primaryKey().notNull(), name: varchar("name", { length: 75 }).notNull(), setid: varchar("setid", { length: 200 }).notNull(), }); export const CatalogClubOffers = mysqlTable("catalog_club_offers", { id: int("id").primaryKey().notNull(), enabled: varchar("enabled", { length: 1 }).notNull().default("1"), name: varchar("name", { length: 35 }).notNull(), days: int("days").notNull(), credits: int("credits").notNull().default(10), points: int("points").notNull().default(0), pointsType: int("points_type").notNull().default(0), type: varchar("type", { length: 19 }).notNull().default("HC"), deal: varchar("deal", { length: 1 }).notNull().default("0"), giftable: varchar("giftable", { length: 1 }).notNull().default("0"), }); export const CatalogFeaturedPages = mysqlTable("catalog_featured_pages", { slotId: int("slot_id").primaryKey().notNull(), image: varchar("image", { length: 70 }).notNull().default(""), caption: varchar("caption", { length: 130 }).notNull().default(""), type: varchar("type", { length: 12 }).notNull().default("page_name"), expireTimestamp: int("expire_timestamp").notNull().default(-1), pageName: varchar("page_name", { length: 30 }).notNull().default(""), pageId: int("page_id").notNull().default(0), productName: varchar("product_name", { length: 40 }).notNull().default(""), }); export const CatalogItemsLimited = mysqlTable( "catalog_items_limited", { catalogItemId: int("catalog_item_id").notNull(), number: int("number").notNull(), userId: int("user_id").notNull().default(0), timestamp: int("timestamp").notNull().default(0), itemId: int("item_id").notNull().default(0), }, (t) => [ uniqueIndex("catalog_items_limited_catalogItemId_number").on( t.catalogItemId, t.number, ), ], ); export const CatalogTargetOffers = mysqlTable("catalog_target_offers", { id: int("id").autoincrement().primaryKey().notNull(), offerCode: varchar("offer_code", { length: 32 }).notNull(), title: varchar("title", { length: 128 }).notNull().default(""), description: varchar("description", { length: 2048 }).notNull().default(""), image: varchar("image", { length: 128 }).notNull(), icon: varchar("icon", { length: 128 }).notNull(), endTimestamp: int("end_timestamp").notNull(), credits: int("credits").notNull().default(10), points: int("points").notNull().default(10), pointsType: int("points_type").notNull().default(5), purchaseLimit: int("purchase_limit").notNull().default(5), catalogItem: int("catalog_item").notNull(), vars: varchar("vars", { length: 1024 }).notNull().default(""), }); export const ChatlogsPrivate = mysqlTable("chatlogs_private", { id: int("id").autoincrement().primaryKey().notNull(), userFromId: int("user_from_id").notNull(), userToId: int("user_to_id").notNull(), message: varchar("message", { length: 255 }).notNull(), timestamp: int("timestamp").notNull().default(0), }); export const CraftingAltarsRecipes = mysqlTable( "crafting_altars_recipes", { altarId: int("altar_id").notNull(), recipeId: int("recipe_id").notNull(), }, (t) => [ uniqueIndex("crafting_altars_recipes_altarId_recipeId").on( t.altarId, t.recipeId, ), ], ); export const CraftingRecipes = mysqlTable( "crafting_recipes", { id: int("id").primaryKey().notNull(), productName: varchar("product_name", { length: 64 }).unique().notNull(), reward: int("reward").notNull(), enabled: varchar("enabled", { length: 1 }).notNull().default("1"), achievement: varchar("achievement", { length: 255 }).notNull().default(""), secret: varchar("secret", { length: 1 }).notNull().default("0"), limited: varchar("limited", { length: 1 }).notNull().default("0"), remaining: int("remaining").notNull().default(0), }, (t) => [uniqueIndex("crafting_recipes_productName").on(t.productName)], ); export const GiftWrappers = mysqlTable("gift_wrappers", { id: int("id").autoincrement().primaryKey().notNull(), spriteId: int("sprite_id").notNull(), itemId: int("item_id").notNull(), type: varchar("type", { length: 7 }).notNull().default("wrapper"), }); export const GroupsItems = mysqlTable( "groups_items", { type: varchar("type", { length: 6 }).notNull(), id: int("id").notNull(), firstvalue: varchar("firstvalue", { length: 255 }).notNull(), secondvalue: varchar("secondvalue", { length: 2000 }).notNull(), enabled: varchar("enabled", { length: 1 }).notNull().default("1"), }, (t) => [primaryKey({ columns: [t.id, t.type] })], ); export const GuildForumViews = mysqlTable("guild_forum_views", { id: int("id").autoincrement().primaryKey().notNull(), userId: int("user_id").notNull(), guildId: int("guild_id").notNull(), timestamp: int("timestamp").notNull(), }); export const GuildsElements = mysqlTable( "guilds_elements", { id: int("id").notNull(), firstvalue: varchar("firstvalue", { length: 300 }).notNull(), secondvalue: varchar("secondvalue", { length: 300 }).notNull(), type: varchar("type", { length: 50 }).notNull(), enabled: varchar("enabled", { length: 1 }).notNull().default("1"), }, (t) => [uniqueIndex("guilds_elements_id_type").on(t.id, t.type)], ); export const HotelviewNews = mysqlTable("hotelview_news", { id: int("id").autoincrement().primaryKey().notNull(), title: varchar("title", { length: 100 }).notNull(), text: varchar("text", { length: 500 }).notNull(), buttonText: varchar("button_text", { length: 50 }).notNull(), buttonType: varchar("button_type", { length: 6 }).notNull().default("web"), buttonLink: varchar("button_link", { length: 200 }).notNull(), image: varchar("image", { length: 200 }).notNull(), }); export const ItemsCrackable = mysqlTable("items_crackable", { itemId: int("item_id").primaryKey().notNull(), itemName: varchar("item_name", { length: 255 }).notNull(), count: int("count").notNull(), prizes: varchar("prizes", { length: 860 }).notNull().default("179:1"), achievementTick: varchar("achievement_tick", { length: 64 }).notNull(), achievementCracked: varchar("achievement_cracked", { length: 64 }).notNull(), requiredEffect: int("required_effect").notNull().default(0), subscriptionDuration: int("subscription_duration"), subscriptionType: varchar("subscription_type", { length: 255 }), }); export const ItemsHighscoreData = mysqlTable("items_highscore_data", { id: int("id").autoincrement().primaryKey().notNull(), itemId: int("item_id").notNull(), userIds: varchar("user_ids", { length: 500 }).notNull(), score: int("score").notNull(), isWin: tinyint("is_win").default(0), timestamp: int("timestamp").notNull(), }); export const LogsHcPayday = mysqlTable("logs_hc_payday", { id: int("id", { unsigned: true }).autoincrement().primaryKey().notNull(), timestamp: int("timestamp", { unsigned: true }), userId: int("user_id"), hcStreak: int("hc_streak", { unsigned: true }), totalCoinsSpent: int("total_coins_spent", { unsigned: true }), rewardCoinsSpent: int("reward_coins_spent", { unsigned: true }), rewardStreak: int("reward_streak", { unsigned: true }), totalPayout: int("total_payout", { unsigned: true }), currency: varchar("currency", { length: 255 }), claimed: tinyint("claimed").default(0), }); export const MessengerCategories = mysqlTable("messenger_categories", { id: int("id").autoincrement().primaryKey().notNull(), name: varchar("name", { length: 25 }).notNull(), userId: int("user_id").notNull(), }); export const NavigatorFilter = mysqlTable("navigator_filter", { key: varchar("key", { length: 11 }).primaryKey().notNull(), field: varchar("field", { length: 32 }).notNull(), compare: varchar("compare", { length: 18 }).notNull(), databaseQuery: varchar("database_query", { length: 1024 }).notNull(), }); export const NuxGifts = mysqlTable("nux_gifts", { id: int("id").autoincrement().primaryKey().notNull(), type: varchar("type", { length: 4 }).notNull().default("item"), value: varchar("value", { length: 32 }).notNull(), image: varchar("image", { length: 256 }).notNull(), }); export const OldGuildsForums = mysqlTable("old_guilds_forums", { id: int("id").autoincrement().primaryKey().notNull(), guildId: int("guild_id").notNull(), userId: int("user_id").notNull(), subject: mediumtext("subject").notNull(), message: longtext("message").notNull(), state: varchar("state", { length: 15 }).notNull().default("OPEN"), adminId: int("admin_id").notNull().default(0), pinned: varchar("pinned", { length: 1 }).notNull().default("0"), locked: varchar("locked", { length: 1 }).notNull().default("0"), timestamp: int("timestamp").notNull(), }); export const OldGuildsForumsComments = mysqlTable( "old_guilds_forums_comments", { id: int("id").autoincrement().primaryKey().notNull(), threadId: int("thread_id").notNull(), userId: int("user_id").notNull(), timestamp: int("timestamp").notNull(), message: longtext("message").notNull(), state: varchar("state", { length: 15 }).notNull().default("OPEN"), adminId: int("admin_id").notNull().default(0), }, ); export const PetActions = mysqlTable("pet_actions", { id: int("ID").autoincrement().primaryKey().notNull(), petType: int("pet_type").notNull(), petName: varchar("pet_name", { length: 32 }).notNull(), offspringType: int("offspring_type").notNull().default(-1), happyActions: varchar("happy_actions", { length: 100 }).notNull().default(""), tiredActions: varchar("tired_actions", { length: 100 }).notNull().default(""), randomActions: varchar("random_actions", { length: 100 }) .notNull() .default(""), canSwim: varchar("can_swim", { length: 1 }).default("0"), }); export const PetBreeds = mysqlTable( "pet_breeds", { race: int("race").notNull(), colorOne: int("color_one").notNull(), colorTwo: int("color_two").notNull(), hasColorOne: varchar("has_color_one", { length: 1 }).notNull().default("0"), hasColorTwo: varchar("has_color_two", { length: 1 }).notNull().default("0"), }, (t) => [ uniqueIndex("pet_breeds_race_colorOne_colorTwo_hasColorOne_hasColorTwo").on( t.race, t.colorOne, t.colorTwo, t.hasColorOne, t.hasColorTwo, ), ], ); export const PetCommandsData = mysqlTable("pet_commands_data", { commandId: int("command_id").primaryKey().notNull(), text: varchar("text", { length: 15 }).notNull(), requiredLevel: int("required_level").notNull(), rewardXp: int("reward_xp").notNull().default(5), costHappyness: int("cost_happyness").notNull().default(0), costEnergy: int("cost_energy").notNull().default(0), }); export const Polls = mysqlTable("polls", { id: int("id").autoincrement().primaryKey().notNull(), title: varchar("title", { length: 255 }) .notNull() .default( "Hey! We'd appreciate it if you could take some time to answer these questions. It will help improve our hotel.", ), thanksMessage: varchar("thanks_message", { length: 255 }).notNull(), rewardBadge: varchar("reward_badge", { length: 10 }).notNull().default(""), }); export const PollsAnswers = mysqlTable( "polls_answers", { pollId: int("poll_id").notNull(), userId: int("user_id").notNull(), questionId: int("question_id").notNull(), answer: varchar("answer", { length: 255 }).notNull(), }, (t) => [ uniqueIndex("polls_answers_pollId_userId_questionId").on( t.pollId, t.userId, t.questionId, ), ], ); export const PollsQuestions = mysqlTable("polls_questions", { id: int("id").autoincrement().primaryKey().notNull(), parentId: int("parent_id").notNull().default(0), pollId: int("poll_id").notNull(), order: int("order").notNull(), question: varchar("question", { length: 255 }).notNull(), type: int("type").notNull().default(2), minSelections: int("min_selections").notNull().default(1), options: varchar("options", { length: 255 }).notNull(), }); export const RoomModels = mysqlTable("room_models", { name: varchar("name", { length: 100 }).primaryKey().notNull(), doorX: int("door_x").notNull(), doorY: int("door_y").notNull(), doorDir: int("door_dir").notNull().default(2), heightmap: text("heightmap").notNull(), publicItems: text("public_items").notNull(), clubOnly: varchar("club_only", { length: 1 }).notNull().default("0"), }); export const RoomTradeLogItems = mysqlTable( "room_trade_log_items", { id: int("id").notNull(), itemId: int("item_id").notNull(), userId: int("user_id").notNull(), }, (t) => [ uniqueIndex("room_trade_log_items_id_itemId_userId").on( t.id, t.itemId, t.userId, ), ], ); export const RoomWordfilter = mysqlTable( "room_wordfilter", { roomId: int("room_id").notNull(), word: varchar("word", { length: 25 }).notNull(), }, (t) => [uniqueIndex("room_wordfilter_roomId_word").on(t.roomId, t.word)], ); export const SanctionLevels = mysqlTable("sanction_levels", { level: int("level").primaryKey().notNull(), type: varchar("type", { length: 5 }).notNull(), hourLength: int("hour_length").notNull(), probationDays: int("probation_days").notNull(), }); export const Sanctions = mysqlTable("sanctions", { id: int("id").autoincrement().primaryKey().notNull(), habboId: int("habbo_id").notNull().default(0), sanctionLevel: int("sanction_level").notNull().default(0), probationTimestamp: int("probation_timestamp").notNull().default(0), reason: varchar("reason", { length: 255 }).notNull().default(""), tradeLockedUntil: int("trade_locked_until").notNull().default(0), isMuted: tinyint("is_muted").notNull().default(0), muteDuration: int("mute_duration").notNull().default(0), }); export const SupportCfhCategories = mysqlTable("support_cfh_categories", { id: int("id").autoincrement().primaryKey().notNull(), nameInternal: varchar("name_internal", { length: 255 }), nameExternal: varchar("name_external", { length: 255 }), }); export const SupportCfhTopics = mysqlTable("support_cfh_topics", { id: int("id").autoincrement().primaryKey().notNull(), categoryId: int("category_id"), nameInternal: varchar("name_internal", { length: 255 }), nameExternal: varchar("name_external", { length: 255 }), action: varchar("action", { length: 11 }).default("mods"), ignoreTarget: varchar("ignore_target", { length: 1 }).notNull().default("0"), autoReply: text("auto_reply"), defaultSanction: int("default_sanction").notNull().default(0), }); export const SupportIssueCategories = mysqlTable("support_issue_categories", { id: int("id").autoincrement().primaryKey().notNull(), name: varchar("name", { length: 255 }).notNull().default("PII"), }); export const SupportIssuePresets = mysqlTable("support_issue_presets", { id: int("id").autoincrement().primaryKey().notNull(), category: int("category").notNull().default(1), name: varchar("name", { length: 100 }).notNull().default(""), message: varchar("message", { length: 300 }).notNull().default(""), reminder: varchar("reminder", { length: 100 }).notNull(), banFor: int("ban_for").notNull().default(0), muteFor: int("mute_for").notNull().default(0), }); export const SupportPresets = mysqlTable("support_presets", { id: int("id").autoincrement().primaryKey().notNull(), type: varchar("type", { length: 4 }).notNull().default("user"), preset: varchar("preset", { length: 200 }).notNull(), }); export const UsersAchievements = mysqlTable( "users_achievements", { userId: int("user_id").notNull(), achievementName: varchar("achievement_name", { length: 255 }).notNull(), progress: int("progress").notNull().default(1), }, (t) => [ uniqueIndex("users_achievements_userId_achievementName").on( t.userId, t.achievementName, ), ], ); export const UsersAchievementsQueue = mysqlTable( "users_achievements_queue", { userId: int("user_id").notNull(), achievementId: int("achievement_id").notNull(), amount: int("amount").notNull(), }, (t) => [ uniqueIndex("users_achievements_queue_userId_achievementId").on( t.userId, t.achievementId, ), ], ); export const UsersClothing = mysqlTable( "users_clothing", { userId: int("user_id").notNull(), clothingId: int("clothing_id").notNull(), }, (t) => [ uniqueIndex("users_clothing_userId_clothingId").on(t.userId, t.clothingId), ], ); export const UsersEffects = mysqlTable( "users_effects", { userId: int("user_id").notNull(), effect: int("effect").notNull(), duration: int("duration").notNull().default(86400), activationTimestamp: int("activation_timestamp").notNull().default(-1), total: int("total").notNull().default(1), }, (t) => [uniqueIndex("users_effects_userId_effect").on(t.userId, t.effect)], ); export const UsersFavoriteRooms = mysqlTable( "users_favorite_rooms", { userId: int("user_id").notNull(), roomId: int("room_id").notNull(), }, (t) => [ uniqueIndex("users_favorite_rooms_userId_roomId").on(t.userId, t.roomId), ], ); export const UsersPets = mysqlTable("users_pets", { id: int("id").autoincrement().primaryKey().notNull(), userId: int("user_id").notNull(), roomId: int("room_id").notNull(), name: varchar("name", { length: 15 }).notNull().default("User Pet"), race: int("race").notNull(), type: int("type").notNull(), color: varchar("color", { length: 6 }).notNull(), happyness: int("happyness").notNull().default(100), experience: int("experience").notNull().default(0), energy: int("energy").notNull().default(100), hunger: int("hunger").notNull().default(0), thirst: int("thirst").notNull().default(0), respect: int("respect").notNull().default(0), created: int("created").notNull(), x: int("x").notNull().default(0), y: int("y").notNull().default(0), z: double("z").notNull().default(0), rot: int("rot").notNull().default(0), hairStyle: int("hair_style").notNull().default(-1), hairColor: int("hair_color").notNull().default(0), saddle: varchar("saddle", { length: 1 }).notNull().default("0"), ride: varchar("ride", { length: 1 }).notNull().default("0"), mpType: int("mp_type").notNull().default(0), mpColor: int("mp_color").notNull().default(0), mpNose: int("mp_nose").notNull().default(0), mpNoseColor: tinyint("mp_nose_color").notNull().default(0), mpEyes: int("mp_eyes").notNull().default(0), mpEyesColor: tinyint("mp_eyes_color").notNull().default(0), mpMouth: int("mp_mouth").notNull().default(0), mpMouthColor: tinyint("mp_mouth_color").notNull().default(0), mpDeathTimestamp: int("mp_death_timestamp").notNull().default(0), mpBreedable: varchar("mp_breedable", { length: 1 }).notNull().default("0"), mpAllowBreed: varchar("mp_allow_breed", { length: 1 }).notNull().default("0"), gnomeData: varchar("gnome_data", { length: 80 }).notNull().default(""), mpIsDead: tinyint("mp_is_dead").notNull().default(0), saddleItemId: int("saddle_item_id"), }); export const UsersRecipes = mysqlTable( "users_recipes", { userId: int("user_id").notNull(), recipe: int("recipe").notNull(), }, (t) => [uniqueIndex("users_recipes_userId_recipe").on(t.userId, t.recipe)], ); export const UsersSavedSearches = mysqlTable("users_saved_searches", { id: int("id").autoincrement().primaryKey().notNull(), searchCode: varchar("search_code", { length: 255 }).notNull(), filter: varchar("filter", { length: 255 }), userId: int("user_id").notNull(), }); export const UsersSubscriptions = mysqlTable("users_subscriptions", { id: int("id", { unsigned: true }).autoincrement().primaryKey().notNull(), userId: int("user_id"), subscriptionType: varchar("subscription_type", { length: 255 }), timestampStart: int("timestamp_start", { unsigned: true }), duration: int("duration", { unsigned: true }), active: tinyint("active").default(1), }); export const UsersTargetOfferPurchases = mysqlTable( "users_target_offer_purchases", { userId: int("user_id").notNull(), offerId: int("offer_id").notNull(), state: int("state").notNull().default(0), amount: int("amount").notNull().default(0), lastPurchase: int("last_purchase").notNull().default(0), }, (t) => [ uniqueIndex("users_target_offer_purchases_userId_offerId").on( t.userId, t.offerId, ), ], ); export const UsersWardrobe = mysqlTable("users_wardrobe", { id: int("id").autoincrement().primaryKey().notNull(), userId: int("user_id").notNull().default(0), slotId: int("slot_id").notNull().default(0), look: varchar("look", { length: 256 }).notNull(), gender: varchar("gender", { length: 1 }).notNull().default("F"), }); export const VoucherHistory = mysqlTable("voucher_history", { id: int("id").autoincrement().primaryKey().notNull(), voucherId: int("voucher_id").notNull(), userId: int("user_id").notNull(), timestamp: int("timestamp").notNull(), }); export const Vouchers = mysqlTable("vouchers", { id: int("id").autoincrement().primaryKey().notNull(), code: varchar("code", { length: 10 }).notNull(), credits: int("credits").notNull().default(0), points: int("points").notNull().default(0), pointsType: int("points_type").notNull().default(0), catalogItemId: int("catalog_item_id").notNull().default(0), amount: int("amount").notNull().default(1), limit: int("limit").notNull().default(-1), }); export const YoutubePlaylists = mysqlTable( "youtube_playlists", { itemId: int("item_id").notNull(), playlistId: varchar("playlist_id", { length: 255 }).notNull(), order: int("order").notNull(), }, (t) => [ uniqueIndex("youtube_playlists_itemId_playlistId_order").on( t.itemId, t.playlistId, t.order, ), ], ); // ─── Theme Builder: scoped theme system ────────────────────────────────────── export const ThemeScope = mysqlTable("theme_scopes", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), name: varchar("name", { length: 100 }).notNull(), type: mysqlEnum("type", ["global", "site", "module", "route"]).notNull(), parentId: bigint("parent_id", { mode: "bigint", unsigned: true }), siteDomain: varchar("site_domain", { length: 255 }), routePath: varchar("route_path", { length: 255 }), moduleId: varchar("module_id", { length: 100 }), isActive: boolean("is_active").notNull().default(true), sortOrder: int("sort_order").notNull().default(0), createdAt: datetime("created_at").notNull(), updatedAt: datetime("updated_at").notNull(), }); export const ThemeScopeValue = mysqlTable( "theme_scope_values", { id: bigint("id", { mode: "bigint", unsigned: true }) .autoincrement() .primaryKey() .notNull(), scopeId: bigint("scope_id", { mode: "bigint", unsigned: true }).notNull(), settingKey: varchar("setting_key", { length: 100 }).notNull(), settingVal: varchar("setting_val", { length: 255 }).notNull(), mode: mysqlEnum("mode", ["light", "dark"]).notNull().default("light"), createdAt: datetime("created_at").notNull(), updatedAt: datetime("updated_at").notNull(), }, (t) => [ uniqueIndex("theme_scope_values_unique").on( t.scopeId, t.settingKey, t.mode, ), ], );