Files
ai_trading_api/create
2025-12-26 17:08:48 +08:00
..
add
2025-12-26 17:06:47 +08:00
add
2025-12-26 16:57:36 +08:00
add
2025-12-26 17:07:53 +08:00
add
2025-12-26 17:08:48 +08:00
add
2025-12-26 17:06:47 +08:00

代码一:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
create_src.py - 在services目录下创建服务文件夹和文件结构
"""

import os
import sys

def create_service_structure(table_name):
    """创建服务文件夹结构"""
    
    # 获取项目根目录
    project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    services_dir = os.path.join(project_root, 'services')
    
    # 创建服务目录
    service_dir = os.path.join(services_dir, table_name)
    
    print(f"🚀 开始创建服务结构: {table_name}")
    print(f"📁 目标目录: {service_dir}")
    
    try:
        # 创建主目录
        os.makedirs(service_dir, exist_ok=True)
        print(f"✅ 创建主目录: {service_dir}")
        
        # 创建子目录
        subdirs = ['src', 'src/crud', 'src/infra', 'src/model']
        for subdir in subdirs:
            dir_path = os.path.join(service_dir, subdir)
            os.makedirs(dir_path, exist_ok=True)
            print(f"✅ 创建子目录: {dir_path}")
        
        # 定义要创建的文件列表
        files_to_create = [
            'dev.sh',
            'README.md',
            'src/Dockerfile',
            'src/go.mod',
            'src/go.sum',
            'src/main.go',
            'src/crud/create.go',
            'src/crud/read.go',
            'src/crud/update.go',
            'src/crud/delete.go',
            'src/infra/launch.go',
            'src/infra/logger.go',
            'src/infra/postgres.go',
            'src/model/payload.go'
        ]
        
        # 创建所有文件
        for file_path in files_to_create:
            full_path = os.path.join(service_dir, file_path)
            os.makedirs(os.path.dirname(full_path), exist_ok=True)  # 确保目录存在
            
            # 创建空文件
            with open(full_path, 'w', encoding='utf-8') as f:
                f.write('')  # 创建空文件
                
            print(f"✅ 创建文件: {full_path}")
        
        print(f"🎉 服务结构创建完成: {table_name}")
        return True
        
    except Exception as e:
        print(f"❌ 创建服务结构时出错: {e}")
        return False

if __name__ == "__main__":
    # 从环境变量获取表名
    table_name = os.environ.get('TABLE_NAME')
    
    if not table_name:
        print("❌ 错误: 未设置 TABLE_NAME 环境变量")
        sys.exit(1)
    
    print(f"📋 接收到的表名: {table_name}")
    success = create_service_structure(table_name)
    
    if success:
        sys.exit(0)
    else:
        sys.exit(1)

代码二:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
create.py - 动态生成PostgreSQL建表SQL语句
"""

import os
import re

# 1. 从环境变量获取表名,如果没有设置则使用默认值
table_name = os.environ.get('TABLE_NAME', 'records')

# 2. 定义SQL模板
sql_template = f"""DO $$
BEGIN
    IF NOT EXISTS (
        SELECT 1
        FROM information_schema.tables
        WHERE table_schema = 'public'
          AND table_name   = '{table_name}'
    ) THEN
        CREATE TABLE {table_name} (
            id            UUID         DEFAULT gen_random_uuid() PRIMARY KEY,  -- id
            payload       JSONB        NOT NULL,                               -- 数据
            deleted       BOOLEAN      NOT NULL DEFAULT FALSE,                 -- 删除状态
            created_at    TIMESTAMPTZ  NOT NULL DEFAULT CURRENT_TIMESTAMP,     -- 记录创建时间
            updated_at    TIMESTAMPTZ  NOT NULL DEFAULT CURRENT_TIMESTAMP      -- 记录修改时间
        );

        -- 3 触发器:自动刷新 updated_at
        CREATE TRIGGER trg_{table_name}_at
            BEFORE UPDATE ON {table_name}
            FOR EACH ROW
            EXECUTE FUNCTION moddatetime(updated_at);

        RAISE NOTICE '{table_name} 表已创建';
    ELSE
        RAISE NOTICE '{table_name} 表已存在,跳过';
    END IF;
END $$;"""

def normalize_blank_lines(text):
    """规范化空行确保END $$;和DO $$之间只有一个空行"""
    # 将多个空行替换为单个空行
    text = re.sub(r'\n{3,}', '\n\n', text)
    
    # 确保END $$;后面有一个空行再接DO $$
    text = re.sub(r'END \$\$;(\s*)DO \$\$', r'END $$;\n\nDO $$', text)
    
    # 清理开头和结尾的多余空行
    text = text.strip() + '\n'
    
    return text

def update_sql_file():
    """将生成的SQL语句追加到03_create_table.sql文件中"""
    
    # 定义文件路径
    sql_file_path = os.path.join(
        os.path.dirname(os.path.dirname(__file__)), 
        'infra', 
        'postgres', 
        'sql', 
        '03_create_table.sql'
    )
    
    try:
        # 读取现有文件内容
        with open(sql_file_path, 'r', encoding='utf-8') as f:
            content = f.read()
        
        # 查找插入位置(在\"部署完成\"日志前)
        insert_pattern = r'(DO \$\$.*?RAISE NOTICE \'🚀============ 数据库表部署开始 ============🚀\'.*?END \$\$;)(.*?)(DO \$\$.*?RAISE NOTICE \'✅============ 数据库表部署完成 ============✅\'.*?END \$\$;)'
        
        match = re.search(insert_pattern, content, re.DOTALL)
        
        if match:
            # 分割内容
            before_insert = match.group(1)
            existing_middle = match.group(2)
            after_insert = match.group(3)
            
            # 规范化空行
            existing_middle = normalize_blank_lines(existing_middle)
            
            # 组合新内容
            new_content = f"""{before_insert}\n\n{sql_template}\n\n{existing_middle}\n{after_insert}"""
            
            # 规范化整个内容的空行
            new_content = normalize_blank_lines(new_content)
            
            # 写回文件
            with open(sql_file_path, 'w', encoding='utf-8') as f:
                f.write(new_content)
            
            print(f"✅ 成功更新 {sql_file_path}")
            print(f"📋 生成的表名: {table_name}")
            print(f"📝 SQL内容已追加到文件中")
            
        else:
            print("❌ 无法找到插入位置,请检查文件格式")
            
    except FileNotFoundError:
        print(f"❌ 文件 {sql_file_path} 不存在")
    except Exception as e:
        print(f"❌ 处理文件时出错: {e}")

if __name__ == "__main__":
    print(f"🚀 开始生成表 '{table_name}' 的SQL语句...")
    update_sql_file()