basaHoushanApi/migrations/models/0_20250106094716_init.py

174 lines
7.3 KiB
Python

from tortoise import BaseDBAsyncClient
async def upgrade(db: BaseDBAsyncClient) -> str:
return """
CREATE TABLE IF NOT EXISTS "categories" (
"id" SERIAL NOT NULL PRIMARY KEY,
"name" VARCHAR(255) NOT NULL
);
CREATE TABLE IF NOT EXISTS "discounts" (
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"id" SERIAL NOT NULL PRIMARY KEY,
"code" VARCHAR(8) NOT NULL,
"percent" INT,
"value" INT,
"max_value" INT,
"expires_at" TIMESTAMPTZ
);
CREATE TABLE IF NOT EXISTS "users" (
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"id" UUID NOT NULL PRIMARY KEY,
"mobile_number" VARCHAR(11) UNIQUE,
"password" VARCHAR(255),
"name" VARCHAR(255),
"image" VARCHAR(255),
"email" VARCHAR(255) UNIQUE,
"username" VARCHAR(255) UNIQUE,
"verified" BOOL NOT NULL DEFAULT False,
"otp" VARCHAR(6),
"otp_expires_at" TIMESTAMPTZ,
"code" VARCHAR(6),
"card_number" VARCHAR(16),
"income" DOUBLE PRECISION NOT NULL DEFAULT 0,
"credit" INT NOT NULL DEFAULT 0,
"free_credit" INT NOT NULL DEFAULT 100
);
CREATE INDEX IF NOT EXISTS "idx_users_mobile__c5f07a" ON "users" ("mobile_number");
CREATE INDEX IF NOT EXISTS "idx_users_email_133a6f" ON "users" ("email");
CREATE INDEX IF NOT EXISTS "idx_users_usernam_266d85" ON "users" ("username");
CREATE TABLE IF NOT EXISTS "billings" (
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"id" SERIAL NOT NULL PRIMARY KEY,
"amount" INT NOT NULL,
"credit" INT NOT NULL,
"discount" INT NOT NULL DEFAULT 0,
"authority" VARCHAR(255) UNIQUE,
"ref_id" VARCHAR(255) UNIQUE,
"type" VARCHAR(9) NOT NULL DEFAULT 'purchase',
"status" VARCHAR(7) NOT NULL DEFAULT 'pending',
"user_id" UUID REFERENCES "users" ("id") ON DELETE SET NULL
);
COMMENT ON COLUMN "billings"."type" IS 'FREE: free\nCODE: code\nINVITE: invite\nWELCOME: welcome\nPURCHASE: purchase\nINSTAGRAM: instagram';
COMMENT ON COLUMN "billings"."status" IS 'SUCCESS: success\nFAILED: failed\nPENDING: pending';
CREATE TABLE IF NOT EXISTS "bots" (
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"id" SERIAL NOT NULL PRIMARY KEY,
"name" VARCHAR(255),
"model" VARCHAR(255) NOT NULL,
"description" TEXT,
"image" VARCHAR(255) NOT NULL,
"attachment" INT NOT NULL DEFAULT 0,
"attachment_type" JSONB,
"tool" BOOL NOT NULL DEFAULT False,
"public" BOOL NOT NULL DEFAULT True,
"cost" INT NOT NULL DEFAULT 0,
"limit" INT NOT NULL DEFAULT -1,
"prompt" TEXT,
"links" JSONB,
"docs" JSONB,
"status" VARCHAR(9) NOT NULL DEFAULT 'confirmed',
"category_id" INT REFERENCES "categories" ("id") ON DELETE SET NULL,
"user_id" UUID REFERENCES "users" ("id") ON DELETE SET NULL
);
COMMENT ON COLUMN "bots"."status" IS 'CONFIRMED: confirmed\nREJECTED: rejected\nPENDING: pending';
CREATE TABLE IF NOT EXISTS "chatbots" (
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"id" SERIAL NOT NULL PRIMARY KEY,
"title" VARCHAR(255),
"archive" BOOL NOT NULL DEFAULT False,
"bot_id" INT NOT NULL REFERENCES "bots" ("id") ON DELETE CASCADE,
"user_id" UUID NOT NULL REFERENCES "users" ("id") ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS "comments" (
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"id" SERIAL NOT NULL PRIMARY KEY,
"text" TEXT NOT NULL,
"image" VARCHAR(255),
"category_id" INT NOT NULL REFERENCES "categories" ("id") ON DELETE CASCADE,
"parent_id" INT REFERENCES "comments" ("id") ON DELETE SET NULL,
"replied_user_id" UUID REFERENCES "users" ("id") ON DELETE SET NULL,
"user_id" UUID NOT NULL REFERENCES "users" ("id") ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS "feedbacks" (
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"id" SERIAL NOT NULL PRIMARY KEY,
"status" VARCHAR(8) NOT NULL,
"comment_id" INT NOT NULL REFERENCES "comments" ("id") ON DELETE CASCADE,
"user_id" UUID NOT NULL REFERENCES "users" ("id") ON DELETE CASCADE,
CONSTRAINT "uid_feedbacks_user_id_c72030" UNIQUE ("user_id", "comment_id")
);
COMMENT ON COLUMN "feedbacks"."status" IS 'LIKED: liked\nDISLIKED: disliked';
CREATE TABLE IF NOT EXISTS "marks" (
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"id" SERIAL NOT NULL PRIMARY KEY,
"bot_id" INT NOT NULL REFERENCES "bots" ("id") ON DELETE CASCADE,
"user_id" UUID NOT NULL REFERENCES "users" ("id") ON DELETE CASCADE,
CONSTRAINT "uid_marks_user_id_76ce59" UNIQUE ("user_id", "bot_id")
);
CREATE TABLE IF NOT EXISTS "messages" (
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"id" SERIAL NOT NULL PRIMARY KEY,
"input_tokens" INT NOT NULL,
"output_tokens" INT NOT NULL,
"chatbot_id" INT REFERENCES "chatbots" ("id") ON DELETE SET NULL
);
CREATE TABLE IF NOT EXISTS "notifications" (
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"id" SERIAL NOT NULL PRIMARY KEY,
"title" VARCHAR(255) NOT NULL,
"message" VARCHAR(255) NOT NULL,
"seen" BOOL NOT NULL DEFAULT False,
"user_id" UUID NOT NULL REFERENCES "users" ("id") ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS "rates" (
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"id" SERIAL NOT NULL PRIMARY KEY,
"text" TEXT NOT NULL,
"score" INT NOT NULL,
"bot_id" INT NOT NULL REFERENCES "bots" ("id") ON DELETE CASCADE,
"user_id" UUID NOT NULL REFERENCES "users" ("id") ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS "settlements" (
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"id" SERIAL NOT NULL PRIMARY KEY,
"income" INT NOT NULL,
"confirmed" BOOL NOT NULL DEFAULT False,
"type" VARCHAR(5) NOT NULL,
"user_id" UUID NOT NULL REFERENCES "users" ("id") ON DELETE CASCADE
);
COMMENT ON COLUMN "settlements"."type" IS 'COIN: coin\nMONEY: money';
CREATE TABLE IF NOT EXISTS "tickets" (
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"id" SERIAL NOT NULL PRIMARY KEY,
"text" TEXT,
"role" VARCHAR(5) NOT NULL DEFAULT 'user',
"file" VARCHAR(255),
"user_id" UUID NOT NULL REFERENCES "users" ("id") ON DELETE CASCADE
);
COMMENT ON COLUMN "tickets"."role" IS 'USER: user\nADMIN: admin';
CREATE TABLE IF NOT EXISTS "aerich" (
"id" SERIAL NOT NULL PRIMARY KEY,
"version" VARCHAR(255) NOT NULL,
"app" VARCHAR(100) NOT NULL,
"content" JSONB NOT NULL
);"""
async def downgrade(db: BaseDBAsyncClient) -> str:
return """
"""