CREATE TABLE "classes" ( "id" bigint PRIMARY KEY NOT NULL, "name" varchar(255) NOT NULL, "balance" bigint DEFAULT 0, "role_id" varchar(255), CONSTRAINT "classes_name_unique" UNIQUE("name") ); --> statement-breakpoint CREATE TABLE "inventory" ( "user_id" bigint NOT NULL, "item_id" integer NOT NULL, "quantity" bigint DEFAULT 1, CONSTRAINT "inventory_user_id_item_id_pk" PRIMARY KEY("user_id","item_id"), CONSTRAINT "quantity_check" CHECK ("inventory"."quantity" > 0) ); --> statement-breakpoint CREATE TABLE "item_transactions" ( "id" bigserial PRIMARY KEY NOT NULL, "user_id" bigint NOT NULL, "related_user_id" bigint, "item_id" integer NOT NULL, "quantity" bigint NOT NULL, "type" varchar(50) NOT NULL, "description" text, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "items" ( "id" serial PRIMARY KEY NOT NULL, "name" varchar(255) NOT NULL, "description" text, "rarity" varchar(20) DEFAULT 'Common', "type" varchar(50) DEFAULT 'MATERIAL' NOT NULL, "usage_data" jsonb DEFAULT '{}'::jsonb, "price" bigint, "icon_url" text NOT NULL, "image_url" text NOT NULL, CONSTRAINT "items_name_unique" UNIQUE("name") ); --> statement-breakpoint CREATE TABLE "lootdrops" ( "message_id" varchar(255) PRIMARY KEY NOT NULL, "channel_id" varchar(255) NOT NULL, "reward_amount" integer NOT NULL, "currency" varchar(50) NOT NULL, "claimed_by" bigint, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "expires_at" timestamp with time zone ); --> statement-breakpoint CREATE TABLE "quests" ( "id" serial PRIMARY KEY NOT NULL, "name" varchar(255) NOT NULL, "description" text, "trigger_event" varchar(50) NOT NULL, "requirements" jsonb DEFAULT '{}'::jsonb NOT NULL, "rewards" jsonb DEFAULT '{}'::jsonb NOT NULL ); --> statement-breakpoint CREATE TABLE "transactions" ( "id" bigserial PRIMARY KEY NOT NULL, "user_id" bigint, "related_user_id" bigint, "amount" bigint NOT NULL, "type" varchar(50) NOT NULL, "description" text, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "user_quests" ( "user_id" bigint NOT NULL, "quest_id" integer NOT NULL, "progress" integer DEFAULT 0, "completed_at" timestamp with time zone, CONSTRAINT "user_quests_user_id_quest_id_pk" PRIMARY KEY("user_id","quest_id") ); --> statement-breakpoint CREATE TABLE "user_timers" ( "user_id" bigint NOT NULL, "type" varchar(50) NOT NULL, "key" varchar(100) NOT NULL, "expires_at" timestamp with time zone NOT NULL, "metadata" jsonb DEFAULT '{}'::jsonb, CONSTRAINT "user_timers_user_id_type_key_pk" PRIMARY KEY("user_id","type","key") ); --> statement-breakpoint CREATE TABLE "users" ( "id" bigint PRIMARY KEY NOT NULL, "class_id" bigint, "username" varchar(255) NOT NULL, "is_active" boolean DEFAULT true, "balance" bigint DEFAULT 0, "xp" bigint DEFAULT 0, "level" integer DEFAULT 1, "daily_streak" integer DEFAULT 0, "settings" jsonb DEFAULT '{}'::jsonb, "created_at" timestamp with time zone DEFAULT now(), "updated_at" timestamp with time zone DEFAULT now(), CONSTRAINT "users_username_unique" UNIQUE("username") ); --> statement-breakpoint ALTER TABLE "inventory" ADD CONSTRAINT "inventory_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "inventory" ADD CONSTRAINT "inventory_item_id_items_id_fk" FOREIGN KEY ("item_id") REFERENCES "public"."items"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "item_transactions" ADD CONSTRAINT "item_transactions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "item_transactions" ADD CONSTRAINT "item_transactions_related_user_id_users_id_fk" FOREIGN KEY ("related_user_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "item_transactions" ADD CONSTRAINT "item_transactions_item_id_items_id_fk" FOREIGN KEY ("item_id") REFERENCES "public"."items"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "lootdrops" ADD CONSTRAINT "lootdrops_claimed_by_users_id_fk" FOREIGN KEY ("claimed_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "transactions" ADD CONSTRAINT "transactions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "transactions" ADD CONSTRAINT "transactions_related_user_id_users_id_fk" FOREIGN KEY ("related_user_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "user_quests" ADD CONSTRAINT "user_quests_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "user_quests" ADD CONSTRAINT "user_quests_quest_id_quests_id_fk" FOREIGN KEY ("quest_id") REFERENCES "public"."quests"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "user_timers" ADD CONSTRAINT "user_timers_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "users" ADD CONSTRAINT "users_class_id_classes_id_fk" FOREIGN KEY ("class_id") REFERENCES "public"."classes"("id") ON DELETE no action ON UPDATE no action;