#!/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 "$@"