258 lines
7.0 KiB
Markdown
258 lines
7.0 KiB
Markdown
|
||
这是最新的文件夹结构:
|
||
|
||
``` tree
|
||
.
|
||
├── LICENSE
|
||
├── README.md
|
||
├── create
|
||
│ ├── README.md
|
||
│ ├── create.sh
|
||
│ ├── create_src.py
|
||
│ ├── create_src_dockerfile.py
|
||
│ ├── create_src_mod.py
|
||
│ └── create_table.py
|
||
├── docker-compose.yaml
|
||
├── infra
|
||
│ └── postgres
|
||
│ ├── scripts
|
||
│ │ └── db-lanuch-entrypoint.sh
|
||
│ └── sql
|
||
│ ├── 01_uuid_v7_setup.sql
|
||
│ ├── 02_create_function.sql
|
||
│ └── 03_create_table.sql
|
||
└── services
|
||
```
|
||
|
||
|
||
|
||
以下是当前 shell 脚本内容。
|
||
|
||
``` shell
|
||
#!/bin/bash
|
||
# create.sh - 启动Python容器执行create_table.py、create_src.py和create_src_dockerfile.py脚本
|
||
|
||
set -e # 遇到错误立即退出
|
||
|
||
# 定义表名变量,可以根据需要修改
|
||
TABLE_NAME="cn_pmi_records"
|
||
|
||
echo "🚀 开始创建流程,表名: ${TABLE_NAME}"
|
||
echo "=========================================="
|
||
|
||
# ========== 第一部分:创建数据库表 ==========
|
||
echo "📋 第一步:创建数据库表结构..."
|
||
echo "🚀 启动Python容器执行create_table.py..."
|
||
|
||
# 获取脚本所在目录的绝对路径
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
||
|
||
# 容器名称
|
||
CONTAINER_NAME="python-create-runner"
|
||
|
||
# 检查是否已存在同名容器,如果存在则删除
|
||
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
|
||
echo "🧹 清理已存在的容器 ${CONTAINER_NAME}..."
|
||
docker rm -f "${CONTAINER_NAME}" >/dev/null 2>&1
|
||
fi
|
||
|
||
# 运行Python容器执行create_table.py
|
||
echo "📦 启动Python容器执行create_table.py..."
|
||
docker run --rm \
|
||
--name "${CONTAINER_NAME}" \
|
||
-v "${SCRIPT_DIR}:/app/create" \
|
||
-v "${PROJECT_ROOT}/infra/postgres/sql:/app/infra/postgres/sql" \
|
||
-e TABLE_NAME="${TABLE_NAME}" \
|
||
-w /app \
|
||
python:3.13.7-alpine3.22 \
|
||
sh -c "
|
||
echo '📋 容器内环境信息:'
|
||
python --version
|
||
echo ''
|
||
|
||
echo '🔧 安装依赖(如果需要)...'
|
||
pip install --quiet --no-cache-dir psycopg2-binary >/dev/null 2>&1 || true
|
||
|
||
echo '⚙️ 执行 create_table.py...'
|
||
python create/create_table.py
|
||
|
||
echo ''
|
||
echo '✅ create_table.py 执行完成!'
|
||
"
|
||
|
||
# ========== 第二部分:创建服务结构 ==========
|
||
echo ""
|
||
echo "📋 第二步:创建服务文件夹结构..."
|
||
echo "🚀 执行create_src.py..."
|
||
|
||
# 运行Python容器执行create_src.py
|
||
docker run --rm \
|
||
--name "${CONTAINER_NAME}-src" \
|
||
-v "${SCRIPT_DIR}:/app/create" \
|
||
-v "${PROJECT_ROOT}/services:/app/services" \
|
||
-e TABLE_NAME="${TABLE_NAME}" \
|
||
-w /app \
|
||
python:3.13.7-alpine3.22 \
|
||
sh -c "
|
||
echo '📋 容器内环境信息:'
|
||
python --version
|
||
echo ''
|
||
|
||
echo '⚙️ 执行 create_src.py...'
|
||
python create/create_src.py
|
||
|
||
echo ''
|
||
echo '✅ create_src.py 执行完成!'
|
||
"
|
||
|
||
# ========== 第三部分:更新Dockerfile ==========
|
||
echo ""
|
||
echo "📋 第三步:更新Dockerfile内容..."
|
||
echo "🚀 执行create_src_dockerfile.py..."
|
||
|
||
# 运行Python容器执行create_src_dockerfile.py
|
||
docker run --rm \
|
||
--name "${CONTAINER_NAME}-dockerfile" \
|
||
-v "${SCRIPT_DIR}:/app/create" \
|
||
-v "${PROJECT_ROOT}/services:/app/services" \
|
||
-e TABLE_NAME="${TABLE_NAME}" \
|
||
-w /app \
|
||
python:3.13.7-alpine3.22 \
|
||
sh -c "
|
||
echo '📋 容器内环境信息:'
|
||
python --version
|
||
echo ''
|
||
|
||
echo '⚙️ 执行 create_src_dockerfile.py...'
|
||
python create/create_src_dockerfile.py
|
||
|
||
echo ''
|
||
echo '✅ create_src_dockerfile.py 执行完成!'
|
||
"
|
||
|
||
echo ""
|
||
echo "=========================================="
|
||
echo "🎉 所有任务执行完成!"
|
||
echo "📋 表名: ${TABLE_NAME}"
|
||
echo "📁 服务目录: ${PROJECT_ROOT}/services/${TABLE_NAME}"
|
||
echo "🐳 Dockerfile: ${PROJECT_ROOT}/services/${TABLE_NAME}/src/Dockerfile"
|
||
```
|
||
|
||
|
||
|
||
以下是当前 create_src.py 内容:
|
||
|
||
```python
|
||
#!/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)
|
||
```
|
||
|
||
|
||
|
||
你的任务是完成 create_src_mod.py 编写,需求如下:
|
||
|
||
1、读取 create_src.py 中创建的 go.mod 文件。
|
||
|
||
2、清空文件内容后,把以下 xxxxx 替换为 shell 中 TABLE_NAME 变量后写入 go.mod 中。
|
||
|
||
```go
|
||
module xxxxx
|
||
|
||
go 1.25.0
|
||
|
||
require (
|
||
|
||
)
|
||
|
||
require (
|
||
|
||
)
|
||
```
|
||
|
||
5、最后调整以下 shell 脚本逻辑,执行 create_src_dockerfile.py 成功后,立马执行 create_src_mod.py 文件。
|
||
|