| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| Invoke | /serverpod:model |
| Aliases | /backend:model, /model:create |
| Tools | Read, Edit, Write, Glob, Grep |
| Model | sonnet |
| Skills | serverpod |
/serverpod:model โ ๋ฐ์ดํฐ ์ค๊ณ๋ ๋ง๋ค๊ธฐ ๋์ฐ๋ฏธ#
ํ๋ง๋๋ก#
์ ๊ธฐ๋ฅ์ ํ์ํ "๋ฐ์ดํฐ ๋ณด๊ด ์์(์ค๊ณ๋)"์ ์๋์ผ๋ก ๋ง๋ค์ด ์ฃผ๋ ๋์ฐ๋ฏธ์ ๋๋ค. ๋ฌผ๊ฑด์ ๋ฃ์ ์๋์ฅ์ ์งค ๋ "์ด ์นธ์ ์ ๋ชฉ, ์ด ์นธ์ ์์ฑ์, ์ด ์นธ์ ์์ฑ ๋ ์ง"์ฒ๋ผ ์นธ์ ๋ฏธ๋ฆฌ ์ ํด ๋๋ ์ผ๊ณผ ๊ฐ์์.
๋๊ฐยท์ธ์ ์ฐ๋์#
- ์ ๊ธฐ๋ฅ์ ๋ง๋ค๋ฉด์ ์ด๋ค ์ ๋ณด๋ฅผ ์ ์ฅํ ์ง ์ ์ํด์ผ ํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์
/serverpod:model๋ช ๋ น์ ์ง์ ์คํํ ๋- ์ ์ฒด ๊ธฐ๋ฅ ์์ฑ(
/feature:create)์ ์ฒซ ๋จ๊ณ์์ ์๋์ผ๋ก ํธ์ถ๋ ๋
๋ฌด์์ ํด์ฃผ๋์#
๋ฐ์ดํฐ ์์ ํ์ผ(.spy.yaml)์ ์ ํด์ง ํด๋์ ์๋์ผ๋ก ๋ง๋ค์ด ์ค๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก๋:
- Entity ํ์ผ โ ์ค์ ๋ก ์ ์ฅํ ์ ๋ณด์ ๋ณธ์ฒด ์์ (์:
{entity_name}.spy.yaml) - DTO ํ์ผ โ ๋ง๋ค๊ธฐ/์์ ํ๊ธฐ/๋ชฉ๋ก ๋ณด๊ธฐ ๊ฐ์ ์์ ์ ์ฐ๋ ์์ฒญยท์๋ต ์์ (์์ฑยท์์ ยท๋ชฉ๋ก ์๋ต์ฉ)
- Enum ํ์ผ โ "์ํ๊ฐ" ๊ฐ์ ์ ํด์ง ์ ํ์ง ๋ชฉ๋ก (ํ์ํ ๊ฒฝ์ฐ์๋ง)
๋ง๋ค์ด์ง ๋ค์๋ ์ด ์์์ ์ค์ ์ฝ๋๋ก ๋ฐ๊พธ๋ ์์ (์ฝ๋ ์์ฑ)๊ณผ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ์(๋ง์ด๊ทธ๋ ์ด์ )๊น์ง ์ด์ด์ง๋๋ค.
์ด๋ป๊ฒ ์ฐ๋์#
# ๋ช
๋ น ์คํ (๋ณ์นญ์ผ๋ก๋ ํธ์ถ ๊ฐ๋ฅ)
/serverpod:model
/backend:model
/model:create
์คํํ ๋๋ ์๋ ๊ฐ์ ํจ๊ป ๋๊น๋๋ค. (โ ํ์๋ ๋ฐ๋์ ํ์ํ ๊ฐ)
feature_nameโ โ ๊ธฐ๋ฅ ๋ชจ๋ ์ด๋ฆ (snake_case, ์:community_post)entity_nameโ โ ์ ์ฅํ ์ ๋ณด์ ์ด๋ฆ (PascalCase, ์:Post)fieldsโ โ ์ด๋ค ์นธ(ํ๋)๋ค์ ๋์ง ๋ชฉ๋กhas_crudโ ๋ง๋ค๊ธฐ/์์ ๊ฐ์ ์์ ์ฉ ์์(CRUD DTO)์ ์๋ ์์ฑํ ์ง (๊ธฐ๋ณธ๊ฐ: ์ผ์ง)
์์์ ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๋์#
- ์ ํด์ง ํด๋ ๊ตฌ์กฐ์ ๋ง์ถฐ Entity, DTO, Enum ์์ ํ์ผ(
.spy.yaml)์ ๋ง๋ญ๋๋ค. - ๊ฐ ์นธ์๋ ํ๊ตญ์ด ์ค๋ช , ์์ฑยท์์ ๋ ์ง, ํ์ํ ์์ธ(index), ๋ค๋ฅธ ๋ฐ์ดํฐ์์ ์ฐ๊ฒฐ ๊ด๊ณ, ๊ธฐ๋ณธ๊ฐ(์กฐํ์ยท์ํ ๋ฑ)์ ๋น ์ง์์ด ์ฑ์๋๋ค.
-
์์์ ๋ค ๋ง๋ ๋ค ์ฝ๋ ์์ฑ(
backend:pod:generate)์ ์๋์ผ๋ก ์คํํฉ๋๋ค. ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ๋ฉด ์ ์์์ด ํ๋ก ํธ์๋์ ๋ฐ์๋์ง ์์ ๋น๋ ์ค๋ฅ๊ฐ ๋ฉ๋๋ค. - Entity๊ฐ ๋ฐ๋ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ์์ฉ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ง๋ค๊ณ ์ ์ฉํฉ๋๋ค.
โ๏ธ ์์ธ ์ต์ ยท์คํ ๋ช ์ธ (๊ฐ๋ฐ์ / AI ์์ด์ ํธ์ฉ)
Role#
Generates model files (.spy.yaml) for the Serverpod backend. Creates Entity, DTO, and Enum types in consistent patterns.
Activation Conditions#
- Activated on
/serverpod:modelcommand invocation - Called in Step 1 of
/feature:createorchestration
Parameters#
| Parameter | Required | Description |
|---|---|---|
feature_name | โ | Feature module name (snake_case) |
entity_name | โ | Entity name (PascalCase) |
fields | โ | Field definition list |
has_crud | โ | Auto-generate CRUD DTOs (default: true) |
Generated Files#
backend/kobic_server/lib/src/feature/{feature_name}/model/
โโโ entities/
โ โโโ {entity_name}.spy.yaml
โโโ dto/
โ โโโ {entity_name}_create_request.spy.yaml
โ โโโ {entity_name}_update_request.spy.yaml
โ โโโ {entity_name}_list_response.spy.yaml
โโโ enum/
โโโ {entity_name}_status.spy.yaml (if needed)Core Pattern Summary#
Entity Definition#
### Entity description
class: EntityName
table: table_name
fields:
### Unique identifier
id: int?
### Field description
fieldName: Type
### Created timestamp
createdAt: DateTime
### Updated timestamp
updatedAt: DateTime?
indexes:
field_idx:
fields: fieldDTO Definition#
### Request DTO
class: EntityCreateRequest
fields:
requiredField: Type
optionalField: Type?Enum Definition#
enum: EnumName
serialized: byName
values:
- value1
- value2Field Type Rules#
| Type | Example |
|---|---|
String, String? | title: String |
int, int? | count: int |
double | price: double |
bool | isActive: bool |
DateTime, DateTime? | createdAt: DateTime |
List<T> | tags: List<String> |
| Default value | viewCount: int, default=0 |
| Foreign key | userId: int, relation(parent=user) |
Common Field Patterns#
Required Fields#
createdAt: DateTime
updatedAt: DateTime?User-Generated Content#
authorId: int
authorName: String
authorProfileUrl: String?Counters (Performance Optimization)#
viewCount: int, default=0
likeCount: int, default=0State Management#
status: EntityStatus, default=active
isDeleted: bool, default=falseRequired Post-Generation Steps#
After generating model files (.spy.yaml), you must run the following commands:
# 1. [Required] Code generation - Convert new models to Dart code
melos run backend:pod:generate
# 2. Commit
git add .
git commit -m " chore(backend): code generation "
# 3. (For Entity changes) Create migration
melos run backend:pod:create-migration
# 4. (For Entity changes) Apply migration
melos run backend:pod:run-migrationImportant#
If backend:pod:generate is skipped:
- New models will not be reflected in kobic_client
- Frontend cannot use new Entities/DTOs
- Build errors will occur
This agent automatically runs backend:pod:generate after model file generation.
Checklist#
- Add Korean comments (
###) on all fields - Include
createdAt,updatedAtfields - Define necessary indexes
- Define foreign key relations (if needed)
- Set default values (counters, status fields)
- Generate DTO files (for CRUD)
- Generate Enum files (if needed)