diff --git a/api/kiwi_vpn_api/config.py b/api/kiwi_vpn_api/config.py index bc7b45c..017f2ed 100644 --- a/api/kiwi_vpn_api/config.py +++ b/api/kiwi_vpn_api/config.py @@ -32,14 +32,37 @@ class DBType(Enum): class DBConfig(BaseModel): - db_type: DBType = DBType.sqlite + type: DBType = DBType.sqlite + user: str | None = None + password: str | None = None + host: str | None = None + database: str | None = "./tmp/vpn.db" + + mysql_driver: str = "pymysql" + mysql_args: list[str] = ["charset=utf8mb4"] @property async def db_engine(self) -> Engine: - return create_engine( - "sqlite:///./tmp/vpn.db", - connect_args={"check_same_thread": False}, - ) + if self.type is DBType.sqlite: + # SQLite backend + return create_engine( + f"sqlite:///{self.database}", + connect_args={"check_same_thread": False}, + ) + + elif self.type is DBType.mysql: + # MySQL backend + if self.mysql_args: + args_str = "?" + "&".join(self.mysql_args) + else: + args_str = "" + + return create_engine( + f"mysql+{self.mysql_driver}://" + f"{self.user}:{self.password}@{self.host}" + f"/{self.database}{args_str}", + pool_recycle=3600, + ) class JWTConfig(BaseModel):