from datetime import datetime from enum import Enum from typing import Optional from sqlmodel import Field, SQLModel from sqlalchemy import Column, DateTime, func class InstanceStatus(Enum): FREE = "FREE" BUSY = "BUSY" INACTIVE = "INACTIVE" DELETED = "DELETED" class DBInstance(SQLModel, table=True): id: int = Field(default=None, primary_key=True) db_host: str = Field(max_length=64, default=None, nullable=False) db_port: int = Field(default=4000, nullable=False) db_user: str = Field(max_length=64, default=None, nullable=False) db_password: str = Field(max_length=128, default=None, nullable=False) tidb_cloud_cluster_id: Optional[str] = Field( max_length=64, default=None, nullable=True ) tidb_cloud_cluster_name: Optional[str] = Field( max_length=256, default=None, nullable=True ) tidb_cloud_branch_id: Optional[str] = Field( max_length=64, default=None, nullable=True ) tidb_cloud_branch_display_name: Optional[str] = Field( max_length=64, default=None, nullable=True ) status: InstanceStatus = Field(default=InstanceStatus.FREE) created_at: Optional[datetime] = Field( default=None, sa_type=DateTime(timezone=True), sa_column_kwargs={"server_default": func.now()}, ) updated_at: Optional[datetime] = Field( default=None, sa_type=DateTime(timezone=True), sa_column_kwargs={"server_default": func.now(), "onupdate": func.now()}, ) __tablename__ = "db_instances"