174 lines
7.3 KiB
Python
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 """
|
|
"""
|