Files
2026-06-25 17:41:06 +08:00

63 lines
2.2 KiB
Python

from typing import List
import json
from app.core.crud import CRUDBase
from app.models.admin import Api, Menu, Codegen
from app.schemas.codegen import CodegenCreate, CodegenUpdate
from app.utils.db import DatabaseInfo
from app.utils.codegen import CodeGenerator
class CodegenController(CRUDBase[Codegen, CodegenCreate, CodegenUpdate]):
def __init__(self):
super().__init__(model=Codegen)
async def is_exist(self, name: str) -> bool:
return await self.model.filter(name=name).exists()
async def import_table(self, connect: str='', importTables: List[str] = None) -> Codegen:
default_frontend_config = {
"editable": True,
"listable": True,
"sortable": True,
"filterable": False,
"filter_operator": '=', # = | >= 默认过滤操作符为包含
"display_type": 'text', # 默认显示类型为文本
}
cnt = 0
with DatabaseInfo(
host="lt.330770.xyz",
port=3307,
user="root",
password="rap_sky",
database="rpa"
) as db:
for table_name in importTables:
table = db.get_table_structure(table_name)
# result.append(fields)
fields = table.get('fields')
for field in fields:
# if field.name in ['id']:
if 'editable' not in field:
field['editable'] = field['required']
new_data = {**default_frontend_config, **field}
field.update(**new_data)
description = table.get('tableComment')
await self.create(CodegenCreate(name=table_name, description=description , fields=json.dumps(fields,ensure_ascii=False)))
cnt += 1
return cnt
async def preview(self, table_id):
generator = CodeGenerator()
config_orm = await self.get(id=table_id)
entity_config = await config_orm.to_dict()
generated_files = generator.generate_files(entity_config, 'relation-demo', {})
return generated_files
codegen_controller = CodegenController()