feat(settings): 个人资料编辑 + 头像上传/裁切 + 自定义裁切弹窗
**新增功能:**
用户名编辑:输入框替换静态文本,白名单验证(中文/英文/数字/下划线/连字符),前端计数器(n/16),utf8对齐PG VARCHAR,XSS防控。
个性签名编辑:Textarea,128字符上限,实时计数器。
头像上传管线:校验→解码→裁切→CatmullRom缩放→WebP二分编码≤100KB→原子写入(.tmp→os.Rename)。限制5MB,128-3840px,JPEG/PNG/WebP。输出512x512 WebP。文件名 {uid}_{timestamp}.webp。清理旧头像。
自定义裁切弹窗:浅色主题,固定裁切框+图片平移/缩放(1×-3×滚轮),box-shadow遮罩,三等分网格。坐标映射pan/zoom→原图像素→subImage。
CSP修复:img-src允许data:URI(FileReader预览)。
**文件变更:**
修改: README, docs/{development,structure}.md, go.{mod,sum}, cmd/server/main.go, controller/settings, middleware/security, router, templates/settings/{index.html,css}
新增: internal/service/avatar_service.go, docs/settings.md
This commit is contained in:
@ -9,8 +9,11 @@ METAZONE.FAN/
|
||||
│ ├── config/ # 配置加载(结构体 + yaml/file)
|
||||
│ ├── router/ # 路由注册(按路由组拆文件)
|
||||
│ ├── controller/ # 控制器(瘦)— 接参数 → 调服务 → 返回
|
||||
│ │ ├── interfaces.go # 控制器层接口定义(ISP)
|
||||
│ │ └── admin/ # 后台子包(功能多,独立拆)
|
||||
│ ├── service/ # 业务逻辑(厚)— 核心逻辑、校验、编排
|
||||
│ │ ├── repository.go # Service 层仓储接口定义(ISP)
|
||||
│ │ └── avatar_service.go # 头像上传处理管线
|
||||
│ ├── repository/ # 数据访问(DAO)— 纯数据库操作
|
||||
│ ├── model/ # 数据模型 — 纯结构体 + DTO
|
||||
│ ├── middleware/ # 中间件 — 每个中间件一个文件
|
||||
@ -22,13 +25,17 @@ METAZONE.FAN/
|
||||
│ │ ├── guidelines.html # 准则等长文本(非模板,纯内容文件)
|
||||
│ │ ├── html/ # 页面模板
|
||||
│ │ │ ├── layout/ # 布局组件(header/nav/footer)
|
||||
│ │ │ ├── home/ post/ comment/ user/ topic/ ...
|
||||
│ │ │ ├── home/ post/ comment/ user/ topic/ settings/
|
||||
│ │ │ └── partials/ # 可复用组件(卡片/分页/侧栏)
|
||||
│ │ └── static/ # 静态资源(css/js/img)
|
||||
│ │ ├── css/
|
||||
│ │ │ ├── common.css # 全局样式 + 导航
|
||||
│ │ │ ├── home.css auth.css settings.css
|
||||
│ │ └── js/
|
||||
│ ├── MetaLab-2027/ # 未来主题(相同结构)
|
||||
│ └── system/ # 系统模板(email 等,与主题无关)
|
||||
├── storage/ # 运行时数据(.gitignore)
|
||||
│ ├── uploads/avatars/ attachments/
|
||||
│ ├── uploads/avatars/ # 用户头像(WebP)
|
||||
│ └── logs/
|
||||
└── docs/ # 项目文档
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user