feat: 完成数据库种子数据系统开发
- 创建完整的种子数据系统 (seed_data.sql) - 6个用户数据 (管理员 + 5个摄影师) - 9个分类数据 (风景、人像、建筑、街拍、艺术、宠物、食物、旅行、黑白) - 35张照片数据 (涵盖所有分类,均衡分布) - 自动化执行脚本 (run_seed_data.sh) - 数据质量测试脚本 (test_seed_data.sh) - Makefile 集成 (make seed, make test-seed, make db-status) - 完整的使用文档 (SEED_DATA_README.md) - 数据库备份机制,时间戳命名 - 9项自动化测试全部通过,数据质量保证 任务12完成,项目完成率达到40%
This commit is contained in:
205
backend/run_seed_data.sh
Executable file
205
backend/run_seed_data.sh
Executable file
@ -0,0 +1,205 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 摄影作品集项目 - 种子数据执行脚本
|
||||
# 用于向 SQLite 数据库中插入测试数据
|
||||
|
||||
set -e
|
||||
|
||||
# 配置
|
||||
DB_PATH="./data/photography.db"
|
||||
SEED_FILE="./seed_data.sql"
|
||||
BACKUP_DIR="./data/backups"
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 日志函数
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# 检查文件是否存在
|
||||
check_files() {
|
||||
if [ ! -f "$DB_PATH" ]; then
|
||||
log_error "数据库文件不存在: $DB_PATH"
|
||||
log_info "请先启动后端服务以创建数据库"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$SEED_FILE" ]; then
|
||||
log_error "种子数据文件不存在: $SEED_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "文件检查通过"
|
||||
}
|
||||
|
||||
# 创建备份目录
|
||||
create_backup_dir() {
|
||||
if [ ! -d "$BACKUP_DIR" ]; then
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
log_info "创建备份目录: $BACKUP_DIR"
|
||||
fi
|
||||
}
|
||||
|
||||
# 备份数据库
|
||||
backup_database() {
|
||||
local timestamp=$(date +"%Y%m%d_%H%M%S")
|
||||
local backup_file="$BACKUP_DIR/photography_${timestamp}.db"
|
||||
|
||||
log_info "备份数据库到: $backup_file"
|
||||
cp "$DB_PATH" "$backup_file"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
log_success "数据库备份成功"
|
||||
else
|
||||
log_error "数据库备份失败"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 显示当前数据统计
|
||||
show_current_stats() {
|
||||
log_info "当前数据库统计:"
|
||||
|
||||
echo "用户数量:"
|
||||
sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM user;"
|
||||
|
||||
echo "分类数量:"
|
||||
sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM category;"
|
||||
|
||||
echo "照片数量:"
|
||||
sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM photo;"
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 执行种子数据
|
||||
run_seed_data() {
|
||||
log_info "开始执行种子数据..."
|
||||
|
||||
# 执行 SQL 文件
|
||||
sqlite3 "$DB_PATH" < "$SEED_FILE"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
log_success "种子数据执行成功"
|
||||
else
|
||||
log_error "种子数据执行失败"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 验证数据插入
|
||||
verify_data() {
|
||||
log_info "验证数据插入结果:"
|
||||
|
||||
local user_count=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM user;")
|
||||
local category_count=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM category;")
|
||||
local photo_count=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM photo;")
|
||||
|
||||
echo "用户数量: $user_count"
|
||||
echo "分类数量: $category_count"
|
||||
echo "照片数量: $photo_count"
|
||||
|
||||
# 验证期望的数据量
|
||||
if [ "$user_count" -ge 6 ] && [ "$category_count" -ge 10 ] && [ "$photo_count" -ge 30 ]; then
|
||||
log_success "数据验证通过"
|
||||
else
|
||||
log_warning "数据量可能不符合预期"
|
||||
fi
|
||||
}
|
||||
|
||||
# 显示分类统计
|
||||
show_category_stats() {
|
||||
log_info "各分类照片数量统计:"
|
||||
sqlite3 "$DB_PATH" "
|
||||
SELECT
|
||||
c.name as '分类名称',
|
||||
COUNT(p.id) as '照片数量'
|
||||
FROM category c
|
||||
LEFT JOIN photo p ON c.id = p.category_id
|
||||
GROUP BY c.id, c.name
|
||||
ORDER BY COUNT(p.id) DESC;
|
||||
"
|
||||
}
|
||||
|
||||
# 显示用户统计
|
||||
show_user_stats() {
|
||||
log_info "各用户照片数量统计:"
|
||||
sqlite3 "$DB_PATH" "
|
||||
SELECT
|
||||
u.username as '用户名',
|
||||
COUNT(p.id) as '照片数量'
|
||||
FROM user u
|
||||
LEFT JOIN photo p ON u.id = p.user_id
|
||||
GROUP BY u.id, u.username
|
||||
ORDER BY COUNT(p.id) DESC;
|
||||
"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
log_info "开始执行摄影作品集种子数据脚本"
|
||||
echo "=================================================="
|
||||
|
||||
# 检查文件
|
||||
check_files
|
||||
|
||||
# 显示当前统计
|
||||
echo "执行前数据统计:"
|
||||
show_current_stats
|
||||
|
||||
# 询问是否继续
|
||||
echo -n "是否继续执行种子数据? (y/N): "
|
||||
read -r response
|
||||
|
||||
if [[ ! "$response" =~ ^[Yy]$ ]]; then
|
||||
log_info "用户取消操作"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 创建备份目录
|
||||
create_backup_dir
|
||||
|
||||
# 备份数据库
|
||||
backup_database
|
||||
|
||||
# 执行种子数据
|
||||
run_seed_data
|
||||
|
||||
# 验证数据
|
||||
verify_data
|
||||
|
||||
echo ""
|
||||
echo "=================================================="
|
||||
|
||||
# 显示详细统计
|
||||
show_category_stats
|
||||
echo ""
|
||||
show_user_stats
|
||||
|
||||
echo ""
|
||||
echo "=================================================="
|
||||
log_success "种子数据脚本执行完成!"
|
||||
log_info "备份文件已保存在: $BACKUP_DIR"
|
||||
log_info "可以启动后端服务测试数据: go run cmd/api/main.go"
|
||||
}
|
||||
|
||||
# 脚本入口
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user