Implement compression quota refunds and admin manual subscription

This commit is contained in:
2025-12-19 23:28:32 +08:00
commit 11f48fd3dd
106 changed files with 27848 additions and 0 deletions

149
README.md Normal file
View File

@@ -0,0 +1,149 @@
# ImageForge - Rust 图片压缩服务
一个基于 Rust 的高性能图片压缩服务,提供 Web 界面 + 对外 APIAPI Key+ 计费能力,支持用户系统与管理员后台。
## 项目概述
### 核心功能
- **图片压缩**:支持 PNG/JPG/JPEG/WebP/AVIF/GIF/BMP/TIFF/ICOGIF 仅静态)
- **批量处理**:支持多图片同时上传和处理
- **压缩率**1-100数值越大压缩越强
- **用户系统**注册、登录、API Key 管理
- **计费与用量**:套餐/订阅/配额/发票
- **管理员后台**:用户管理、系统监控、配置管理
### 技术栈
| 层级 | 技术选型 | 说明 |
|------|----------|------|
| 后端框架 | Axum | 高性能异步 Web 框架 |
| 图片处理 | image-rs + oxipng + webp + ravif | PNG/WebP/AVIF 编解码与优化 |
| 数据库 | PostgreSQL + SQLx | 类型安全的异步数据库 |
| 缓存/队列 | Redis | 会话管理、限流、任务队列Streams |
| 前端 | Vue3 + TypeScript | SPA 单页应用 |
| 认证 | JWT + API Key | 双重认证机制 |
| 存储 | S3 兼容 / 本地 | 对象存储 + 预签名 URL推荐 |
| 计费 | Stripe | Checkout/Portal/Webhook |
## 目录结构
> 说明:以下为目标目录结构(规划),会随实现逐步补齐。
```
imageforge/
├── Cargo.toml
├── src/
│ ├── main.rs # 入口
│ ├── config.rs # 配置管理
│ ├── error.rs # 错误处理
│ ├── lib.rs
│ │
│ ├── api/ # API 路由
│ │ ├── mod.rs
│ │ ├── auth.rs # 认证相关
│ │ ├── compress.rs # 压缩相关
│ │ ├── user.rs # 用户相关
│ │ └── admin.rs # 管理员相关
│ │
│ ├── services/ # 业务逻辑
│ │ ├── mod.rs
│ │ ├── compress.rs # 压缩服务
│ │ ├── auth.rs # 认证服务
│ │ ├── user.rs # 用户服务
│ │ └── storage.rs # 存储服务
│ │
│ ├── models/ # 数据模型
│ │ ├── mod.rs
│ │ ├── user.rs
│ │ ├── image.rs
│ │ └── api_key.rs
│ │
│ ├── compress/ # 压缩核心
│ │ ├── mod.rs
│ │ ├── png.rs # PNG 压缩oxipng + pngquant
│ │ ├── jpeg.rs # JPEG 压缩mozjpeg
│ │ ├── webp.rs # WebP 压缩
│ │ └── avif.rs # AVIF 压缩
│ │
│ └── middleware/ # 中间件
│ ├── mod.rs
│ ├── auth.rs # 认证中间件
│ └── rate_limit.rs # 限流中间件
├── migrations/ # 数据库迁移
├── static/ # 静态资源
├── frontend/ # 前端项目
└── docker/ # Docker 配置
```
## 快速开始
### 环境要求
- Rust建议使用最新 stable当前依赖链要求较新的 Rust建议 `>= 1.85`
- PostgreSQL 16+
- Redis 7+
- Node.js 20+(前端构建)
### 本地开发
```bash
# 配置环境变量
cp .env.example .env
# 启动 PostgreSQL / Redis开发
docker compose -f docker/docker-compose.dev.yml up -d
# 初始化数据库
psql "$DATABASE_URL" -f migrations/001_init.sql
# 启动后端
cargo run
# 启动前端(另一个终端)
cd frontend && npm run dev
```
### Docker 部署
```bash
# 该 compose 仅包含 postgres/redis服务本体请按 docs/deployment.md 构建运行
docker compose -f docker/docker-compose.dev.yml up -d
```
## 文档索引
- [开工前确认清单](./docs/confirm.md)
- [产品需求PRD](./docs/prd.md)
- [技术架构设计](./docs/architecture.md)
- [API 接口文档](./docs/api.md)
- [数据库设计](./docs/database.md)
- [前端设计](./docs/frontend.md)
- [UI/UX 设计](./docs/ui.md)
- [计费与用量设计](./docs/billing.md)
- [安全与风控](./docs/security.md)
- [邮件服务](./docs/email.md)
- [可观测性](./docs/observability.md)
- [部署指南](./docs/deployment.md)
- [服务条款(模板)](./docs/terms.md)
- [隐私政策(模板)](./docs/privacy.md)
## 已确认清单
- [x] 支付渠道首期选型Stripe
- [x] 计费策略:硬配额(无超额按量)
- [x] 匿名试用:支持,每日 10 次
- [x] 订阅周期:按订阅周期(非自然月)
- [x] 邮件服务:注册验证 + 密码重置SMTP预置多服务商模板
- [x] 默认语言:中文
- [x] Free 套餐 API不开放仅 Pro/Business 可用)
## 待完成清单(上线前)
- [x] 法务页面:隐私政策、服务条款(已提供模板)
- [ ] 域名与品牌名最终确认
## License
MIT