feat: datasource api

This commit is contained in:
junjun
2025-05-06 16:28:33 +08:00
parent b3c329eade
commit 6948523299
3 changed files with 59 additions and 8 deletions
+11 -2
View File
@@ -1,9 +1,18 @@
from fastapi import APIRouter, HTTPException
from ..crud.datasource import get_datasource_list
from ..crud.datasource import get_datasource_list, check_status, create_ds
from common.core.deps import SessionDep
from ..models.datasource import DatasourceConf, CoreDatasource
router = APIRouter(tags=["datasource"], prefix="/datasource")
@router.get("/list")
def datasource_list(session: SessionDep):
return get_datasource_list(session=session)
return get_datasource_list(session=session)
@router.post("/check")
def check(session: SessionDep, conf: DatasourceConf):
return check_status(session, conf)
@router.post("/add", response_model=CoreDatasource)
def check(session: SessionDep, ds: CoreDatasource):
return create_ds(session, ds)
+36 -4
View File
@@ -1,7 +1,39 @@
from sqlmodel import Session, select
from ..models.datasource import core_datasource
from ..models.datasource import CoreDatasource, DatasourceConf
import pyodbc
import datetime
def get_datasource_list(session: Session) -> core_datasource | None:
statement = select(core_datasource)
def get_datasource_list(session: Session) -> CoreDatasource:
statement = select(CoreDatasource)
datasource_list = session.exec(statement).fetchall()
return datasource_list
return datasource_list
def check_status(session: Session, conf: DatasourceConf):
conn_str = (
"DRIVER={MySQL ODBC 9.3 Unicode Driver};" # todo driver config
f"SERVER={conf.host};"
f"DATABASE={conf.database};"
f"UID={conf.username};"
f"PWD={conf.password};"
f"PORT={conf.port};"
)
conn = None
try:
conn = pyodbc.connect(conn_str)
print("Connect Success")
return True
except pyodbc.Error as e:
print(f"Connect Fail:{e}")
return False
finally:
if conn is not None:
conn.close()
def create_ds(session: Session, ds: CoreDatasource):
record = CoreDatasource(**ds.model_dump())
record.create_time = datetime.datetime.now()
record.status = "Success" # todo check status
session.add(record)
session.commit()
return record
+12 -2
View File
@@ -1,8 +1,10 @@
from sqlmodel import SQLModel, Field
from sqlalchemy import Column, Text, BigInteger, DateTime, Integer, Identity
from datetime import datetime
from pydantic import BaseModel
class core_datasource(SQLModel, table=True):
class CoreDatasource(SQLModel, table=True):
__tablename__ = "core_datasource"
id: int = Field(sa_column=Column(Integer, Identity(always=True), nullable=False, primary_key=True))
name: str = Field(max_length=128, nullable=False)
description: str = Field(max_length=512, nullable=True)
@@ -10,4 +12,12 @@ class core_datasource(SQLModel, table=True):
configuration: str = Field(sa_column=Column(Text))
create_time: datetime = Field(sa_column=Column(DateTime(timezone=True), nullable=True))
create_by: int = Field(sa_column=Column(BigInteger()))
status: str = Field(max_length=64, nullable=True)
status: str = Field(max_length=64, nullable=True)
class DatasourceConf(BaseModel):
host: str
port: int
username: str
password: str
database: str
driver: str