| íëŠĐ | ëīėĐ |
|---|---|
| Category | petmedi-workflow |
| Complexity | standard |
| MCP Servers | serena, context7 |
/serverpod:model#
Context Framework Note: This behavioral instruction activates when Claude Code users type
/serverpod:modelpatterns.
Triggers#
- When a new Serverpod model (Entity, DTO, Enum) is needed
- When backend data model definition is needed
- Called in Step 1 of
/feature:createorchestration
Context Trigger Pattern#
/serverpod:model {feature_name} {entity_name} [--options]
Parameters#
| Parameter | Required | Description | Example |
|---|---|---|---|
feature_name |
â | Feature module name (snake_case) | community, chat, wallet |
entity_name |
â | Entity name (PascalCase) | Post, Message, Transaction |
--fields |
â | Field definition list | "title:String, content:String" |
--has-crud |
â | Auto-generate CRUD DTOs | true (default) |
--has-enum |
â | Generate Enum file | true (default) |
Behavioral Flow#
1. Analyze Existing Patterns#
Use Serena MCP to analyze existing model patterns:
- backend/petmedi_server/lib/src/feature/community/model/entity/post.spy.yaml
- backend/petmedi_server/lib/src/feature/chat/model/entity/chat_room.spy.yaml
2. Generate Model Files#
Entity File (entities/{entity_name}.spy.yaml):
### {Entity description}
class: {EntityName}
table: {table_name}
fields:
### Unique identifier
id: int?
### {Field1 description}
{field1}: {Type}
### {Field2 description}
{field2}: {Type}?
### Author ID
authorId: int
### Author name
authorName: String
### Author profile image URL
authorProfileUrl: String?
### Created timestamp
createdAt: DateTime
### Updated timestamp
updatedAt: DateTime?
indexes:
{entity}_author_idx:
fields: authorId
{entity}_created_idx:
fields: createdAt
Request DTO (dto/{entity_name}_create_request.spy.yaml):
### {Entity} creation request
class: {EntityName}CreateRequest
fields:
### {Field description}
{requiredField}: {Type}
### {Optional field description}
{optionalField}: {Type}?
Response DTO (dto/{entity_name}_list_response.spy.yaml):
### {Entity} list response
class: {EntityName}ListResponse
fields:
### {Entity} list
items: List < {EntityName} >
### Total count
total: int
### Whether next page exists
hasMore: bool
Enum (enum/{entity_name}_category.spy.yaml):
### {Entity} category
enum: {EntityName}Category
serialized: byName
values:
- general
- notice
- event
3. Verification#
- Verify Korean comments on all fields
- Verify required fields (createdAt, updatedAt) included
- Verify index definitions
Output Files#
backend/petmedi_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}_category.spy.yaml
Post-Generation Commands#
# Model code generation
melos run backend:pod:generate
# Create migration (for Entity changes)
melos run backend:pod:create-migration
# Apply migration
melos run backend:pod:run-migration
MCP Integration#
- Serena: Analyze existing model patterns, symbol search
- Context7: Serverpod model definition documentation reference
Examples#
Create post model#
/serverpod:model community Post
--fields " title:String, content:String, category:PostCategory, imageUrls:List < String > ? "
Create chat message model#
/serverpod:model chat Message
--fields " content:String, senderId:int, chatRoomId:int, readAt:DateTime? "
Create wallet transaction model#
/serverpod:model wallet Transaction
--fields " amount:double, type:TransactionType, description:String?, balanceAfter:double "
Reference Agent#
See ~/.claude/commands/agents/serverpod-model-agent.md for detailed implementation rules
Core Rules Summary#
- Korean comments (
###) required on all fields - createdAt, updatedAt fields required
- Appropriate index definitions required
- Foreign key relation definitions (when needed)
- Default value settings (counters, status fields)