From 189f06184318e3e9e9b8d7fd11cd83bd4d18ce41 Mon Sep 17 00:00:00 2001 From: inter Date: Mon, 8 Sep 2025 16:36:19 +0800 Subject: [PATCH] Add File --- backend/apps/datasource/models/datasource.py | 128 +++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 backend/apps/datasource/models/datasource.py diff --git a/backend/apps/datasource/models/datasource.py b/backend/apps/datasource/models/datasource.py new file mode 100644 index 0000000..6496a85 --- /dev/null +++ b/backend/apps/datasource/models/datasource.py @@ -0,0 +1,128 @@ +from datetime import datetime +from typing import List, Optional + +from pydantic import BaseModel +from sqlalchemy import Column, Text, BigInteger, DateTime, Integer, Identity +from sqlmodel import SQLModel, Field + + +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) + type: str = Field(max_length=64) + type_name: str = Field(max_length=64, nullable=True) + configuration: str = Field(sa_column=Column(Text)) + create_time: datetime = Field(sa_column=Column(DateTime(timezone=False), nullable=True)) + create_by: int = Field(sa_column=Column(BigInteger())) + status: str = Field(max_length=64, nullable=True) + num: str = Field(max_length=256, nullable=True) + oid: int = Field(sa_column=Column(BigInteger())) + + +class CoreTable(SQLModel, table=True): + __tablename__ = "core_table" + id: int = Field(sa_column=Column(Integer, Identity(always=True), nullable=False, primary_key=True)) + ds_id: int = Field(sa_column=Column(BigInteger())) + checked: bool = Field(default=True) + table_name: str = Field(sa_column=Column(Text)) + table_comment: str = Field(sa_column=Column(Text)) + custom_comment: str = Field(sa_column=Column(Text)) + + +class CoreField(SQLModel, table=True): + __tablename__ = "core_field" + id: int = Field(sa_column=Column(Integer, Identity(always=True), nullable=False, primary_key=True)) + ds_id: int = Field(sa_column=Column(BigInteger())) + table_id: int = Field(sa_column=Column(BigInteger())) + checked: bool = Field(default=True) + field_name: str = Field(sa_column=Column(Text)) + field_type: str = Field(max_length=128, nullable=True) + field_comment: str = Field(sa_column=Column(Text)) + custom_comment: str = Field(sa_column=Column(Text)) + field_index: int = Field(sa_column=Column(BigInteger())) + + +# datasource create obj +class CreateDatasource(BaseModel): + id: int = None + name: str = '' + description: str = '' + type: str = '' + configuration: str = '' + create_time: Optional[datetime] = None + create_by: int = 0 + status: str = '' + num: str = '' + oid: int = 1 + tables: List[CoreTable] = [] + + +# edit local saved table and fields +class TableObj(BaseModel): + table: CoreTable = None + fields: List[CoreField] = [] + + +# datasource config info +class DatasourceConf(BaseModel): + host: str = '' + port: int = 0 + username: str = '' + password: str = '' + database: str = '' + driver: str = '' + extraJdbc: str = '' + dbSchema: str = '' + filename: str = '' + sheets: List = '' + mode: str = '' + timeout: int = 30 + + def to_dict(self): + return { + "host": self.host, + "port": self.port, + "username": self.username, + "password": self.password, + "database": self.database, + "driver": self.driver, + "extraJdbc": self.extraJdbc, + "dbSchema": self.dbSchema, + "filename": self.filename, + "sheets": self.sheets, + "mode": self.mode, + "timeout": self.timeout + } + + +class TableSchema: + def __init__(self, attr1, attr2): + self.tableName = attr1 + self.tableComment = attr2 if attr2 is None or isinstance(attr2, str) else attr2.decode("utf-8") + + tableName: str + tableComment: str + + +class ColumnSchema: + def __init__(self, attr1, attr2, attr3): + self.fieldName = attr1 + self.fieldType = attr2 + self.fieldComment = attr3 if attr3 is None or isinstance(attr3, str) else attr3.decode("utf-8") + + fieldName: str + fieldType: str + fieldComment: str + + +class TableAndFields: + def __init__(self, schema, table, fields): + self.schema = schema + self.table = table + self.fields = fields + + schema: str + table: CoreTable + fields: List[CoreField]