hotspot / migrations /models /0_20241204103359_init.py
Mbonea's picture
changes
41eef54
raw
history blame
4.77 kB
from tortoise import BaseDBAsyncClient
async def upgrade(db: BaseDBAsyncClient) -> str:
return """
CREATE TABLE IF NOT EXISTS "messages" (
"id" UUID NOT NULL PRIMARY KEY,
"device_id" VARCHAR(100),
"event" VARCHAR(100),
"message_id" VARCHAR(100),
"webhook_id" VARCHAR(100),
"message_content" TEXT NOT NULL,
"phone_number" VARCHAR(20) NOT NULL,
"received_at" TIMESTAMPTZ NOT NULL,
"sim_number" INT,
"parsed_data" JSONB,
"created_time" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS "plans" (
"id" UUID NOT NULL PRIMARY KEY,
"name" VARCHAR(100) NOT NULL UNIQUE,
"amount" DECIMAL(10,2) NOT NULL,
"duration" INT NOT NULL,
"download_speed" DOUBLE PRECISION NOT NULL,
"upload_speed" DOUBLE PRECISION NOT NULL,
"expire_date" TIMESTAMPTZ,
"is_promo" BOOL NOT NULL DEFAULT False,
"promo_duration_days" INT,
"is_valid" BOOL NOT NULL DEFAULT True
);
COMMENT ON COLUMN "plans"."name" IS 'Name of the subscription plan';
COMMENT ON COLUMN "plans"."amount" IS 'Cost of the plan';
COMMENT ON COLUMN "plans"."duration" IS 'Duration of the subscription in hours';
COMMENT ON COLUMN "plans"."download_speed" IS 'Download speed in Mbps';
COMMENT ON COLUMN "plans"."upload_speed" IS 'Upload speed in Mbps';
COMMENT ON COLUMN "plans"."expire_date" IS 'Expiration date of the plan';
COMMENT ON COLUMN "plans"."is_promo" IS 'Indicates if the plan is a promotional plan';
COMMENT ON COLUMN "plans"."promo_duration_days" IS 'Number of days the promotion is valid';
COMMENT ON COLUMN "plans"."is_valid" IS 'Indicates if the plan is valid';
CREATE TABLE IF NOT EXISTS "portals" (
"id" SERIAL NOT NULL PRIMARY KEY,
"name" VARCHAR(50) NOT NULL UNIQUE,
"description" VARCHAR(255) NOT NULL,
"url" VARCHAR(255) NOT NULL
);
COMMENT ON COLUMN "portals"."name" IS 'Name of the portal, e.g., Android or MikroTik';
COMMENT ON COLUMN "portals"."description" IS 'Description of the portal';
COMMENT ON COLUMN "portals"."url" IS 'URL of the portal, must start with http or https';
CREATE TABLE IF NOT EXISTS "users" (
"id" VARCHAR(5) NOT NULL PRIMARY KEY,
"name" VARCHAR(100) NOT NULL,
"password" VARCHAR(100) NOT NULL,
"phoneNumber" VARCHAR(15) NOT NULL UNIQUE,
"balance" DECIMAL(10,2) NOT NULL DEFAULT 0,
"mac_address" VARCHAR(17) NOT NULL,
"createdAt" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"lastLogin" TIMESTAMPTZ NOT NULL,
"failed_attempts" INT NOT NULL DEFAULT 0,
"account_locked" BOOL NOT NULL DEFAULT False,
"reset_token" VARCHAR(6) UNIQUE,
"reset_token_expiration" TIMESTAMPTZ
);
CREATE TABLE IF NOT EXISTS "payments" (
"id" UUID NOT NULL PRIMARY KEY,
"amount" DECIMAL(10,2) NOT NULL,
"status" VARCHAR(50) NOT NULL DEFAULT 'pending',
"payment_method" VARCHAR(50) NOT NULL,
"transaction_id" VARCHAR(100) UNIQUE,
"created_time" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_time" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"plan_id" UUID REFERENCES "plans" ("id") ON DELETE CASCADE,
"user_id" VARCHAR(5) REFERENCES "users" ("id") ON DELETE CASCADE
);
COMMENT ON COLUMN "payments"."amount" IS 'Payment amount';
COMMENT ON COLUMN "payments"."status" IS 'Payment status (e.g., pending, completed, failed, balance-assigned)';
COMMENT ON COLUMN "payments"."payment_method" IS 'Payment method';
COMMENT ON COLUMN "payments"."transaction_id" IS 'Unique transaction ID for payment (for methods like Lipa Number)';
COMMENT ON COLUMN "payments"."plan_id" IS 'Plan associated with the payment';
CREATE TABLE IF NOT EXISTS "subscriptions" (
"id" UUID NOT NULL PRIMARY KEY,
"active" BOOL NOT NULL DEFAULT True,
"duration" INT NOT NULL,
"download_mb" DOUBLE PRECISION NOT NULL DEFAULT 0,
"upload_mb" DOUBLE PRECISION NOT NULL DEFAULT 0,
"created_time" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"expiration_time" TIMESTAMPTZ,
"plan_id" UUID REFERENCES "plans" ("id") ON DELETE CASCADE,
"user_id" VARCHAR(5) NOT NULL REFERENCES "users" ("id") ON DELETE CASCADE
);
COMMENT ON COLUMN "subscriptions"."duration" IS 'Duration in hours';
COMMENT ON COLUMN "subscriptions"."download_mb" IS 'Download usage in megabytes';
COMMENT ON COLUMN "subscriptions"."upload_mb" IS 'Upload usage in megabytes';
COMMENT ON COLUMN "subscriptions"."plan_id" IS 'Plan associated with the subscription';
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 """
"""