5.6 KiB
Requirements Document
Introduction
文件转存服务是一个允许用户通过API Key认证上传文件到腾讯云COS的功能。该服务支持图片文件上传,文件保留15天后自动删除,每次上传固定扣除30积分。服务使用独立的COS存储桶(上海地域),并提供文件记录管理和查询功能。
Glossary
- File_Transfer_Service: 文件转存服务,负责处理文件上传、存储、查询和自动清理的核心服务
- Transfer_File: 转存文件实体,记录上传文件的元数据信息
- COS_Client: 腾讯云对象存储客户端,用于与COS存储桶交互
- API_Key_Auth: API密钥认证机制,用于验证用户身份
- Points_Service: 积分服务,用于扣除用户积分
- File_Cleanup_Scheduler: 文件清理调度器,负责定时删除过期文件
Requirements
Requirement 1: 文件上传
User Story: As a user, I want to upload image files to COS through API Key authentication, so that I can store files temporarily for external access.
Acceptance Criteria
- WHEN a user provides a valid API Key and uploads an image file, THE File_Transfer_Service SHALL authenticate the user and accept the file
- WHEN a user uploads a file, THE File_Transfer_Service SHALL validate that the file type is an image (jpg, jpeg, png, gif, webp, bmp)
- WHEN a user uploads an image file exceeding 20MB, THE File_Transfer_Service SHALL reject the upload and return an error message
- WHEN a valid image file is uploaded, THE File_Transfer_Service SHALL store the file in COS bucket "apidatafile-1302947942" in region "ap-shanghai"
- WHEN a file is successfully uploaded, THE File_Transfer_Service SHALL generate a unique file key with format "transfer/{userId}/{timestamp}_{uuid}.{extension}"
- WHEN a file is successfully uploaded, THE File_Transfer_Service SHALL return the file access URL to the user
Requirement 2: 积分扣除
User Story: As a system administrator, I want to charge users 30 points per file upload, so that the service usage is properly metered.
Acceptance Criteria
- WHEN a user initiates a file upload, THE Points_Service SHALL verify the user has at least 30 points before processing
- IF a user has insufficient points, THEN THE File_Transfer_Service SHALL reject the upload and return an insufficient points error
- WHEN a file is successfully uploaded to COS, THE Points_Service SHALL deduct 30 points from the user's balance
- WHEN points are deducted, THE Points_Service SHALL create a consumption log with type "file_transfer" and description containing the file name
Requirement 3: 文件记录管理
User Story: As a user, I want my uploaded files to be recorded in the database, so that I can track and query my file history.
Acceptance Criteria
- WHEN a file is successfully uploaded, THE File_Transfer_Service SHALL create a Transfer_File record in the database
- THE Transfer_File record SHALL contain: id, user_id, file_key, original_filename, file_size, content_type, cos_url, expire_time, status, create_time, update_time
- THE Transfer_File record SHALL set expire_time to 15 days from upload time
- THE Transfer_File record SHALL set initial status to "active"
Requirement 4: 文件查询
User Story: As a user, I want to query my uploaded files, so that I can view my file history and access URLs.
Acceptance Criteria
- WHEN a user requests their file list with valid API Key, THE File_Transfer_Service SHALL return paginated list of their Transfer_File records
- WHEN querying files, THE File_Transfer_Service SHALL support filtering by status (active, expired, deleted)
- WHEN returning file list, THE File_Transfer_Service SHALL include file_key, original_filename, file_size, content_type, cos_url, expire_time, status, create_time
- WHEN a file has expired, THE File_Transfer_Service SHALL mark its status as "expired" in query results
Requirement 5: 文件自动清理
User Story: As a system administrator, I want expired files to be automatically deleted from COS, so that storage costs are minimized and data retention policies are enforced.
Acceptance Criteria
- THE File_Cleanup_Scheduler SHALL run periodically (every hour) to check for expired files
- WHEN a Transfer_File record has expire_time before current time and status is "active", THE File_Cleanup_Scheduler SHALL delete the file from COS
- WHEN a file is successfully deleted from COS, THE File_Cleanup_Scheduler SHALL update the Transfer_File status to "deleted"
- IF file deletion from COS fails, THEN THE File_Cleanup_Scheduler SHALL log the error and retry in the next scheduled run
- THE File_Cleanup_Scheduler SHALL process files in batches to avoid overwhelming the COS API
Requirement 6: 错误处理
User Story: As a user, I want clear error messages when file upload fails, so that I can understand and resolve issues.
Acceptance Criteria
- IF API Key authentication fails, THEN THE File_Transfer_Service SHALL return HTTP 401 with message "Invalid or inactive API Key"
- IF file type is not supported, THEN THE File_Transfer_Service SHALL return HTTP 400 with message "Unsupported file type. Allowed types: jpg, jpeg, png, gif, webp, bmp"
- IF file size exceeds 20MB, THEN THE File_Transfer_Service SHALL return HTTP 400 with message "File size exceeds maximum limit of 20MB"
- IF points are insufficient, THEN THE File_Transfer_Service SHALL return HTTP 400 with message "Insufficient points. Required: 30 points"
- IF COS upload fails, THEN THE File_Transfer_Service SHALL return HTTP 500 with message "File upload failed, please try again"