six-layer-architect
npx skills add https://github.com/morning-start/coze-skills --skill six-layer-architect
Agent 安装分布
Skill 文档
å 屿¶æå ¨æ çæå¨
ä»»å¡ç®æ
- æ¬ Skill ç¨äºï¼æ ¹æ®ç¨æ·æä¾çåè½æå¾ï¼å¦”æ¯æç¨æ·ä¸ä¼ 头å”ï¼ï¼èªå¨çæç¬¦åå 屿¶æè§èç宿´å®ç°æ¹æ¡
- è½åå å«ï¼éæ±è§£æä¸é¢åè¯å«ãéå±ä»£ç çæãè·¨å±ä¸è´æ§æ ¡éªãæ¶æä¸å®å ¨æé
- è§¦åæ¡ä»¶ï¼ç¨æ·æåºåè½éæ±ï¼å¦”å è®¸ç¨æ·ä¸ä¼ 头å”ã”å®ç°ç¨æ·ç»å½”ã”æ·»å è¯è®ºåè½”çï¼
åç½®åå¤
æ ç¹æ®ä¾èµï¼æææ¨¡æ¿ååèææ¡£å·²å ç½®å¨ Skill ä¸
æä½æ¥éª¤
æ¥éª¤ 1ï¼éæ±è§£æä¸å屿 å°
-
è¯å«åè½é¢å
- åæç¨æ·æè¿°ï¼è¯å«æå±ä¸å¡é¢åï¼ç¨æ·ç®¡çãæä»¶ä¸ä¼ ãå 容åå¸çï¼
- ç¡®å®æ ¸å¿æ°æ®å®ä½ï¼å¦ UserãAvatarãCommentï¼
-
è¿½è¸ªæ°æ®æµå
- è¾å
¥ï¼UI å±çåæ®µååç±»åï¼å¦
avatarFile: Fileï¼ - å¤çï¼å端æå¡å±çç¶æãAPI å±çæ¥å£å®ä¹
- åå¨ï¼å端æå¡å±çä¸å¡é»è¾ãæ°æ®å±çæä¹ ååæ®µ
- è¾åºï¼è¿åç»å端çååºæ ¼å¼
- è¾å
¥ï¼UI å±çåæ®µååç±»åï¼å¦
-
ç¡®å®æ¶åçå±çº§
- ç®ååè½å¯è½åªæ¶å 3-4 å±
- 夿åè½é常æ¶åå ¨é¨å å±
æ¥éª¤ 2ï¼éå±çæå®ç°æ¹æ¡
ææ°æ®æµé¡ºåºï¼ä»å端å°å端ï¼çææ¯ä¸å±ç代ç ï¼
å端åå±
UI å±ï¼Vue 3 + Tailwindï¼
- 使ç¨
<script setup>è¯æ³åç»åå¼ API - ä½¿ç¨ Tailwind CSS ç±»åè¿è¡æ ·å¼è®¾è®¡
- 表å使ç¨
<input type="file">+<button>ï¼é å@changeäºä»¶ - é误æç¤ºä½¿ç¨ SweetAlert2ï¼
Swal.fire()ï¼ - ååºå¼æ°æ®ä½¿ç¨
refåreactive - åèï¼
references/architecture_layers.mdç UI å±è责说æ
å端æå¡å±ï¼Pinia Storeï¼
- 使ç¨
defineStoreå®ä¹ç¶æ - å³å®æ¯å¦éè¦æä¹
åï¼
usePersistæä»¶ï¼ - å°è£
ä¸å¡é»è¾ï¼å¦
uploadAvatar()ï¼ - åèï¼
references/architecture_layers.mdçå端æå¡å±è责说æ
å端 API å±ï¼Axios + TypeScriptï¼
- å°è£
API 彿°ï¼å¦
uploadAvatar(file: File)ï¼ - å®ä¹ TypeScript æ¥å£ï¼
src/types/user.tsï¼ - 使ç¨
FormDataå¤çæä»¶ä¸ä¼ - ç»ä¸é误å¤çï¼åºäº HTTP ç¶æç ï¼
- åèï¼
references/architecture_layers.mdçå端 API å±è责说æ
å端åå±
å端 API å±ï¼FastAPI + Pydanticï¼
- å®ä¹è·¯ç±ï¼å¦
@app.post("/users/avatar")ï¼ - ä½¿ç¨ Pydantic 模åå®ä¹è¯·æ±/ååºç»æ
- 使ç¨
Form()åFile()æ¥æ¶è¡¨åæ°æ® - è¿åæ ååååºï¼
{ code: 200, data: {...} }ï¼ - åèï¼
references/architecture_layers.mdçå端 API å±è责说æ
å端æå¡å±ï¼Service ç±»ï¼
- éªè¯æä»¶ç±»å/大å°
- çæå¯ä¸æä»¶åï¼UUID + åå§æ©å±åï¼
- ä¿åå°æ¬å°æäºåå¨
- æ´æ°æ°æ®åºè®°å½
- åèï¼
references/architecture_layers.mdçå端æå¡å±è责说æ
æ°æ®å±ï¼SQLAlchemy + PostgreSQLï¼
- å®ä¹ SQLAlchemy 模åï¼å¢å
avatar_urlåæ®µï¼ - ä½¿ç¨ Alembic çæè¿ç§»å½ä»¤ï¼
alembic revision --autogenerate -m "Add avatar_url to User model" alembic upgrade head - åèï¼
references/architecture_layers.mdçæ°æ®å±è责说æ
æ¥éª¤ 3ï¼è·¨å±ä¸è´æ§æ ¡éª
æ£æ¥ä»¥ä¸ä¸è´æ§ï¼
åæ®µåä¸è´æ§
- UI å±ï¼
avatarFile - å端æå¡å±ï¼
state.avatarFile - å端 API å±ï¼
formData.append('avatarFile', file) - å端 API å±ï¼
file: UploadFile = File(...) - æ°æ®å±ï¼
avatar_url: Column(String(256)) - â ï¸ æ³¨æï¼å段åå¨ååç«¯ä¼ è¾æ¶éè¦æ å°ï¼
avatarFileâavatar_urlï¼
ç±»åå¹é
- å端 TypeScriptï¼
avatarUrl: string - å端 Pydanticï¼
avatar_url: str - æ°æ®åºï¼
VARCHAR(256)æTEXT
é误å¤çè´¯é
- å端è¿åï¼400 Bad Requestï¼æä»¶ç±»åé误ï¼
- å端 API å±ï¼æ ¹æ®
response.status夿 - UI å±ï¼è°ç¨
Swal.fire({ icon: 'error', ... })æ¾ç¤ºé误
ç±»åä¸è´æ§ï¼åå端 Schema åæ¥ï¼ ç¡®ä¿å端 TypeScript ç±»åä¸å端 Pydantic schema å®å ¨ä¸è´ï¼
| TypeScript ç±»å | Pydantic ç±»å | 说æ |
|---|---|---|
string |
str |
å符串 |
number |
int / float |
æ°å |
boolean |
bool |
å¸å°å¼ |
Date |
datetime |
æ¥ææ¶é´ |
string (URL) |
HttpUrl |
URL ç±»å |
string (Email) |
EmailStr |
é®ç®±ç±»å |
Array<T> |
List[T] |
æ°ç»/å表 |
T | null |
Optional[T] |
å¯éç±»å |
T | U | V |
Union[T, U, V] |
èåç±»å |
ç±»å忥æä½³å®è·µï¼
-
æ¥å£å®ä¹åæ¥ï¼å端 TypeScript æ¥å£ä¸å端 Pydantic 模ååæ®µååç±»åå¿ é¡»ä¸ä¸å¯¹åº
// å端 TypeScript export interface User { id: number email: string avatar_url: string | null created_at: string // ISO 8601 æ ¼å¼ }# å端 Pydantic class UserResponse(BaseModel): id: int email: str avatar_url: Optional[str] = None created_at: datetime -
åæ®µåæ å°è§åï¼
- å端使ç¨èå½¢å½åï¼snake_caseï¼ä¸åç«¯ä¿æä¸è´
- é¿å å¨ TypeScript ä¸ä½¿ç¨é©¼å³°å½åï¼åå°åæ®µè½¬æ¢ææ¬
- ååç«¯å ±äº«çåæ®µå¿ é¡»åç§°ç¸å
-
空å¼å¤çï¼
- å端
null/undefinedâ å端None - 使ç¨
Optional[T]表示å¯ä¸ºç©º - å端访é®å¯éåæ®µæ¶ä½¿ç¨å¯éé¾
?.
- å端
-
æ¥ææ¶é´æ ¼å¼ï¼
- å端åéï¼ISO 8601 æ ¼å¼å符串ï¼å¦
2024-01-01T00:00:00Zï¼ - åç«¯æ¥æ¶ï¼Pydantic èªå¨è§£æä¸º
datetime对象 - å端è¿åï¼JSON åºåå为 ISO 8601 æ ¼å¼
- å端æ¾ç¤ºï¼ä½¿ç¨
new Date()è§£æææ ¼å¼ååº
- å端åéï¼ISO 8601 æ ¼å¼å符串ï¼å¦
-
æä¸¾ç±»å忥ï¼
// å端 TypeScript export enum UserRole { ADMIN = 'admin', USER = 'user', GUEST = 'guest' }# å端 Pydantic from enum import Enum class UserRole(str, Enum): ADMIN = 'admin' USER = 'user' GUEST = 'guest' -
éªè¯è§å忥ï¼
- å端ï¼HTML 表åéªè¯ï¼
required,minlength,patternï¼ - å端ï¼Pydantic éªè¯å¨ï¼
@validator,Field(..., min_length=1)ï¼ - åå端éªè¯è§åä¿æä¸è´
- å端ï¼HTML 表åéªè¯ï¼
åèï¼references/architecture_layers.md çç±»åæ å°è§åï¼references/code_patterns.md çç±»ååæ¥æ¨¡å¼
æ¥éª¤ 4ï¼æ¶æä¸å®å ¨æé
æ ¹æ®åè½ç¹ç¹æé以ä¸äºé¡¹ï¼
æä»¶ä¸ä¼ å®å ¨
- éå¶ MIME ç±»åï¼å¦
image/jpeg, image/pngï¼ - é嶿件大å°ï¼å¦ 5MBï¼
- é²è·¯å¾éåï¼ä½¿ç¨
os.path.basename()ï¼ - æä»¶åéæºåï¼UUID + æ¶é´æ³ï¼
æéæ§å¶
- ä½¿ç¨ JWT éªè¯å½åç¨æ·
- æ£æ¥ç¨æ·æ¯å¦ææéä¿®æ¹ç®æ èµæºï¼åªè½æ¹èªå·±ç头åï¼
- å¨å端 API 屿·»å
@Depends(get_current_user)
ååºæ ¼å¼è§è
- ç»ä¸ä½¿ç¨å
¨å±ååºæ¨¡åï¼
code, data, messageï¼ - æåï¼200ï¼å¤±è´¥ï¼400/401/403/500
- 详ç»éè¯¯ä¿¡æ¯æ¾å¨
messageåæ®µ
æ°æ®åºè¿ç§»
- ä½¿ç¨ Alembic ç®¡çæ°æ®åºåæ´
- ä¸è¦ç´æ¥ä¿®æ¹çäº§æ°æ®åº
- è¿ç§»èæ¬éè¦ç»è¿æµè¯
æ¥éª¤ 5ï¼è¾åºæ ¼å¼å
æç §ä»¥ä¸æ ¼å¼è¾åºï¼
- ä½¿ç¨ Markdown æ ¼å¼
- æ¯å±ç¨
###æ é¢åéï¼å¦### UI å±ï¼Vue 3 + Tailwindï¼ï¼ - 代ç åæ æ³¨è¯è¨ï¼
vueãtypescriptãpythonãbashï¼ - å
³é®æéç¨
ð¡æâ ï¸æ 注 - æä»¶è·¯å¾ä½¿ç¨ä»£ç æ ·å¼ï¼å¦
src/components/AvatarUpload.vueï¼ - ä¸èææªæä¾çä¿¡æ¯ï¼ä½å¯åºäºæä½³å®è·µå»ºè®®
èµæºç´¢å¼
å¿ è¦èæ¬
- è§ scripts/generate_code.pyï¼ç¨éï¼çæåå±ä»£ç 模æ¿ï¼åæ°ï¼
--layeræå®å±çº§ï¼--contextæä¾ä¸ä¸æä¿¡æ¯ï¼
é¢ååè
- è§ references/architecture_layers.mdï¼ä½æ¶è¯»åï¼éè¦äºè§£æ¯å±èè´£åçº¦ææ¶ï¼
- è§ references/code_patterns.mdï¼ä½æ¶è¯»åï¼éè¦åè常è§ä»£ç æ¨¡å¼æ¶ï¼
- è§ references/security_checklist.mdï¼ä½æ¶è¯»åï¼è¿è¡å®å ¨æ£æ¥æ¶ï¼
è¾åºèµäº§
- è§ assets/templates/ï¼ç´æ¥ç¨äºçæåå±ä»£ç 模æ¿ï¼
注æäºé¡¹
- ä» å¨éè¦æ¶è¯»ååèææ¡£ï¼ä¿æä¸ä¸æç®æ´
- çæç代ç åºå¯ç´æ¥å¤å¶ä½¿ç¨ï¼é¿å å ä½ç¬¦
- è·¨å±ä¸è´æ§æ ¡éªæ¯å ³é®æ¥éª¤ï¼å¿ 须确ä¿å段ååç±»åå¹é
- å®å ¨æéåºæ ¹æ®åè½ç¹ç¹å®å¶ï¼ä¸è½æ³æ³èè°
- å åå©ç¨æºè½ä½çèªç¶è¯è¨çè§£åæ¨çè½åï¼é¿å è¿åº¦ä¾èµèæ¬
使ç¨ç¤ºä¾
ç¤ºä¾ 1ï¼ç¨æ·å¤´åä¸ä¼
- åè½è¯´æï¼å è®¸ç¨æ·ä¸ä¼ 头åå¹¶å¨ä¸ªäººé¡µæ¾ç¤º
- æ§è¡æ¹å¼ï¼æ··åï¼æºè½ä½è§£æéæ± + èæ¬çæä»£ç 模æ¿ï¼
- å
³é®æ¥éª¤ï¼
- æºè½ä½è¯å«é¢åï¼ç¨æ·èµæç®¡ç
- çæ UI å±ï¼Vue ç»ä»¶ï¼æä»¶éæ© + é¢è§ï¼
- çæå端 API å±ï¼
uploadAvatar()彿° - çæå端 API å±ï¼FastAPI è·¯ç±
POST /users/avatar - çææ°æ®å±ï¼SQLAlchemy 模å + Alembic è¿ç§»
- ä¸è´æ§æ ¡éªï¼
avatarFileâavatar_urlæ å°
ç¤ºä¾ 2ï¼ç¨æ·ç»å½
- åè½è¯´æï¼ç¨æ·ä½¿ç¨é®ç®±åå¯ç ç»å½
- æ§è¡æ¹å¼ï¼æ··å
- å
³é®æ¥éª¤ï¼
- æºè½ä½è¯å«é¢åï¼èº«ä»½è®¤è¯
- çæ UI å±ï¼ç»å½è¡¨åï¼é®ç®± + å¯ç ï¼
- çæå端æå¡å±ï¼Pinia storeï¼
useAuthStoreï¼ - çæå端 API å±ï¼
login(email, password)彿° - çæå端æå¡å±ï¼å¯ç åå¸ + JWT çæ
- å®å ¨æéï¼å¯ç åå¨ä½¿ç¨ bcryptï¼JWT è¿ææ¶é´
ç¤ºä¾ 3ï¼è¯è®ºåè½
- åè½è¯´æï¼ç¨æ·å¯¹æç« å表è¯è®º
- æ§è¡æ¹å¼ï¼æ··å
- å
³é®æ¥éª¤ï¼
- æºè½ä½è¯å«é¢åï¼å 容äºå¨
- çææ°æ®å±ï¼Comment 模åï¼user_id, article_id, contentï¼
- çæå端æå¡å±ï¼å建è¯è®ºãéªè¯æé
- çæå端 API å±ï¼
createComment()彿° - çæ UI å±ï¼è¯è®ºè¡¨å + è¯è®ºå表
- ä¸è´æ§æ ¡éªï¼
commentTextâcontentåæ®µåæ å°