with one click
dev
DevTools 项目开发技能,遵循 DDD 领域驱动设计。当用户请求开发新功能、添加工具、修改现有功能或询问项目架构时使用此技能。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
DevTools 项目开发技能,遵循 DDD 领域驱动设计。当用户请求开发新功能、添加工具、修改现有功能或询问项目架构时使用此技能。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
聊天室 — 创建房间、实时聊天、AI 机器人(10种预设角色+TTS语音)、图片/视频上传。触发:创建聊天室、聊天、加AI机器人、聊天室
生活记账 — 创建账本、记录收支、分类管理、统计分析、AI 语音记账。触发:记账、花了多少钱、今日开销、月度统计、添加支出、语音记账
家庭物品整理 — 物品库存管理、位置标注、到期提醒、AI 智能添加/分析、小票 OCR 识别。触发:整理物品、添加物品、库存管理、物品快过期、收纳整理
粘贴板 — 创建/查看代码片段分享,支持文件上传、分片上传、代码分析、安全扫描。触发:分享代码、粘贴代码、上传文件、分享文本、pastebin
档案照片墙 — 分类照片管理、时间线聚合、分享链接、批量下载ZIP。触发:照片墙、上传照片、相册、家庭相册
事项管理 — 创建/查看/更新/删除工作与生活任务,支持 AI 解析、会议纪要、日历下载、时间线回顾。触发:记录事情、添加任务、事项管理、会议记录、今日计划
| name | dev |
| description | DevTools 项目开发技能,遵循 DDD 领域驱动设计。当用户请求开发新功能、添加工具、修改现有功能或询问项目架构时使用此技能。 |
当用户请求开发新功能、添加工具或修改现有功能时,使用此技能。
本项目是一个开发者工具集合平台,核心价值是提供便捷、安全的在线开发工具。
┌─────────────────────────────────────────────────────────────┐
│ DevTools Platform │
├──────────────┬──────────────┬──────────────┬────────────────┤
│ 工具上下文 │ 分享上下文 │ 聊天上下文 │ 短链上下文 │
│ (Tool BC) │ (Share BC) │ (Chat BC) │ (ShortURL BC) │
├──────────────┼──────────────┼──────────────┼────────────────┤
│ - JsonTool │ - PasteBin │ - ChatRoom │ - ShortURL │
│ - DiffTool │ - PasteView │ - Message │ - Redirect │
│ - MarkdownTool│ │ - WebSocket │ - Stats │
│ - Base64Tool │ │ │ │
│ - UrlTool │ │ │ │
│ - TimestampTool│ │ │ │
│ - RegexTool │ │ │ │
│ - TextTool │ │ │ │
│ - MermaidTool│ │ │ │
│ - DnsTool │ │ │ │
└──────────────┴──────────────┴──────────────┴────────────────┘
| 上下文 | 聚合根 | 实体 | 值对象 |
|---|---|---|---|
| Share | Paste | - | ID, Content, Password, ExpiresAt |
| Chat | ChatRoom | Message | ID, Nickname, Password |
| ShortURL | ShortURL | - | ID, OriginalURL, Clicks |
创建 Vue 组件
frontend/src/views/{ToolName}Tool.vue
注册路由
// frontend/src/router/index.js
{
path: '/{tool-name}',
name: '{ToolName}',
component: () => import('../views/{ToolName}Tool.vue'),
meta: { title: '工具名称', icon: 'IconName' }
}
组件模板
<template>
<div class="container mx-auto p-4 max-w-4xl">
<el-card>
<template #header>
<span class="text-xl font-bold">工具名称</span>
</template>
<!-- 工具内容 -->
</el-card>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { ElMessage } from 'element-plus'
// 状态和逻辑
</script>
遵循 分层架构:
┌─────────────────────────────────────────┐
│ Presentation Layer │
│ frontend/src/views/{Tool}Tool.vue │
├─────────────────────────────────────────┤
│ Application Layer │
│ backend/handlers/{tool}.go │
├─────────────────────────────────────────┤
│ Domain Layer │
│ backend/models/{tool}.go │
├─────────────────────────────────────────┤
│ Infrastructure Layer │
│ SQLite (models) + Middleware │
└─────────────────────────────────────────┘
// backend/models/{tool}.go
package models
type {Tool} struct {
ID string `json:"id"`
// ... 领域属性
CreatedAt time.Time `json:"created_at"`
CreatorIP string `json:"creator_ip"`
}
// Init{Tool} 初始化数据库表
func (db *DB) Init{Tool}() error {
_, err := db.conn.Exec(`
CREATE TABLE IF NOT EXISTS {tools} (
id TEXT PRIMARY KEY,
-- ... 字段定义
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
creator_ip TEXT
);
`)
return err
}
// Create{Tool} 创建
func (db *DB) Create{Tool}(...) (*{Tool}, error) { }
// Get{Tool} 获取
func (db *DB) Get{Tool}(id string) (*{Tool}, error) { }
// Delete{Tool} 删除
func (db *DB) Delete{Tool}(id string) error { }
// CleanExpired{Tool}s 清理过期数据
func (db *DB) CleanExpired{Tool}s() error { }
// backend/handlers/{tool}.go
package handlers
type {Tool}Handler struct {
db *models.DB
}
func New{Tool}Handler(db *models.DB) *{Tool}Handler {
return &{Tool}Handler{db: db}
}
type Create{Tool}Request struct {
// 请求字段 + binding 验证
}
type Create{Tool}Response struct {
// 响应字段
}
// Create handles POST /api/{tool}
func (h *{Tool}Handler) Create(c *gin.Context) {
// 1. 绑定请求
// 2. 验证输入
// 3. 检查限流
// 4. 调用领域服务
// 5. 返回响应
}
// backend/main.go
// 初始化数据库表
if err := db.Init{Tool}(); err != nil {
log.Fatalf("{tool}数据库初始化失败: %v", err)
}
// 定期清理 (在 goroutine 中)
err = db.CleanExpired{Tool}s()
// 创建处理器
{tool}Handler := handlers.New{Tool}Handler(db)
// 注册路由
{tool} := api.Group("/{tool}")
{
{tool}.POST("", createRateLimiter.Middleware(), {tool}Handler.Create)
{tool}.GET("/:id", {tool}Handler.Get)
}
参考"添加新的纯前端工具"部分。
错误处理: 使用统一的错误响应格式
c.JSON(http.StatusBadRequest, gin.H{"error": "错误信息"})
限流: 创建操作必须使用限流中间件
{tool}.POST("", createRateLimiter.Middleware(), handler.Create)
安全:
ID 生成: 使用 8 字符随机十六进制
bytes := make([]byte, 4)
rand.Read(bytes)
id := hex.EncodeToString(bytes)
组件结构: 单文件组件,template-script-style 顺序
状态管理: 使用 ref() 和 reactive()
UI 框架: Element Plus + TailwindCSS
<el-card>
<div class="container mx-auto p-4">
图标: 使用 @element-plus/icons-vue
消息提示: 使用 ElMessage
ElMessage.success('操作成功')
ElMessage.error('操作失败')
| 操作 | 方法 | 路径 | 说明 |
|---|---|---|---|
| 创建 | POST | /api/{resource} | 返回 201 Created |
| 获取 | GET | /api/{resource}/:id | 返回 200 OK |
| 列表 | GET | /api/{resource}s | 分页/过滤 |
| 更新 | PUT | /api/{resource}/:id | 返回 200 OK |
| 删除 | DELETE | /api/{resource}/:id | 返回 204 No Content |
// 成功
{
"id": "abc123",
"data": { ... }
}
// 错误
{
"error": "错误描述信息"
}
| 变量 | 默认值 | 说明 |
|---|---|---|
| PORT | 8080 | 服务端口 |
| DB_PATH | ./data/paste.db | 数据库路径 |
| CONFIG_PATH | ./config.yaml | 配置文件路径 |
| GIN_MODE | release | Gin 模式 |
shorturl:
password: "" # 短链管理密码
# 后端
cd backend
go mod tidy
go build .
go run main.go
# 前端
cd frontend
npm install
npm run dev # 开发
npm run build # 构建
# Docker
docker-compose up -d
docker-compose logs -f devtools
添加新功能前确认: