HaniBlindBox/.kiro/specs/float-ball-migration/requirements.md
2026-01-03 21:06:26 +08:00

4.3 KiB

Requirements Document

Introduction

悬浮球功能迁移 - 将悬浮球配置管理功能从 PHP (ThinkPHP) 后端迁移到 .NET 10 后端。包括数据库表迁移、数据迁移和 API 接口迁移。悬浮球是首页显示的可点击浮动图标,支持展示图片弹窗或跳转页面两种交互方式。

Glossary

  • Float_Ball_System: 悬浮球系统,负责管理和展示首页悬浮球配置
  • Float_Ball_Config: 悬浮球配置实体,存储单个悬浮球的所有配置信息
  • Float_Ball_Service: 悬浮球业务服务,处理悬浮球相关的业务逻辑
  • Migration_Script: 数据迁移脚本,负责将 MySQL 数据迁移到 SQL Server

Requirements

Requirement 1: 数据库表迁移

User Story: As a developer, I want to create the float_ball_configs table in SQL Server, so that the system can store float ball configuration data.

Acceptance Criteria

  1. THE Float_Ball_System SHALL create a float_ball_configs table in SQL Server with all required columns
  2. THE Float_Ball_System SHALL support the following columns: id, status, type, image, link_url, position_x, position_y, width, height, effect, title, image_details, image_bj, image_details_x, image_details_y, image_details_w, image_details_h, created_at, updated_at
  3. THE Float_Ball_System SHALL use appropriate SQL Server data types matching the original MySQL schema
  4. THE Float_Ball_System SHALL set id as primary key with auto-increment

Requirement 2: 数据迁移

User Story: As a developer, I want to migrate existing float ball data from MySQL to SQL Server, so that the new system has all historical configurations.

Acceptance Criteria

  1. THE Migration_Script SHALL read all records from MySQL float_ball_config table
  2. THE Migration_Script SHALL transform Unix timestamps to SQL Server DATETIME2 format
  3. THE Migration_Script SHALL insert all records into SQL Server float_ball_configs table preserving original IDs
  4. THE Migration_Script SHALL verify record count consistency after migration
  5. THE Migration_Script SHALL support incremental migration (skip already migrated records)
  6. IF migration fails for a record, THEN THE Migration_Script SHALL log the error and continue with remaining records

Requirement 3: 获取悬浮球配置接口

User Story: As a frontend developer, I want to call the getFloatBall API, so that I can display float balls on the homepage.

Acceptance Criteria

  1. WHEN a GET request is made to /api/getFloatBall, THE Float_Ball_System SHALL return all enabled float ball configurations
  2. THE Float_Ball_System SHALL only return configurations where status equals 1 (enabled)
  3. THE Float_Ball_System SHALL return the following fields for each configuration: id, type, image, link_url, position_x, position_y, width, height, effect, title, image_details, image_bj, image_details_x, image_details_y, image_details_w, image_details_h
  4. THE Float_Ball_System SHALL NOT return status, created_at, updated_at fields in the response
  5. THE Float_Ball_System SHALL return an empty array if no enabled configurations exist
  6. THE Float_Ball_System SHALL NOT require authentication for this endpoint

Requirement 4: Entity Framework 实体配置

User Story: As a developer, I want to create the FloatBallConfig entity class, so that Entity Framework can map the database table correctly.

Acceptance Criteria

  1. THE Float_Ball_System SHALL create a FloatBallConfig entity class in HoneyBox.Model
  2. THE Float_Ball_System SHALL configure proper column mappings using Fluent API or Data Annotations
  3. THE Float_Ball_System SHALL register the entity in HoneyBoxDbContext
  4. THE Float_Ball_System SHALL support nullable fields for optional columns (title, image_details, image_bj, etc.)

Requirement 5: 响应格式兼容性

User Story: As a frontend developer, I want the API response format to be compatible with the existing frontend, so that no frontend changes are required.

Acceptance Criteria

  1. THE Float_Ball_System SHALL return response in format: { "status": 1, "msg": "获取悬浮球配置成功", "data": [...] }
  2. THE Float_Ball_System SHALL return status 1 for successful requests
  3. THE Float_Ball_System SHALL return status 0 for failed requests with error message
  4. WHEN returning image URLs, THE Float_Ball_System SHALL preserve the original URL format (already contains full CDN path)