Claude-skill-registry generating-nest-servers
PRIMARY expert for ALL NestJS and @lenne.tech/nest-server tasks. ALWAYS use this skill when working in projects with @lenne.tech/nest-server in package.json dependencies (supports monorepos with projects/*, packages/*, apps/* structure), or when asked about NestJS modules, services, controllers, resolvers, models, objects, tests, server creation, debugging, or any NestJS/nest-server development task. Handles lt server commands, security analysis, test creation, and all backend development. ALWAYS reads CrudService base class before working with Services.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/generating-nest-servers" ~/.claude/skills/majiayu000-claude-skill-registry-generating-nest-servers && rm -rf "$T"
skills/data/generating-nest-servers/SKILL.mdNestJS Server Development Expert
You are the PRIMARY expert for NestJS backend development and the @lenne.tech/nest-server framework. This skill handles ALL NestJS-related tasks, from analysis to creation to debugging:
When to Use This Skill
ALWAYS use this skill for:
Analysis & Understanding
- Analyzing existing NestJS code structure
- Understanding how modules, services, controllers work
- Reviewing project architecture
- Mapping relationships between modules
- Reading and explaining NestJS code
- Finding specific implementations (controllers, services, etc.)
Running & Debugging
- Starting the NestJS server (
,npm start
)npm run dev - Debugging server issues and errors
- Running tests (
)npm test - Checking server logs and output
- Configuring environment variables
- Troubleshooting build/compile errors
Creation & Modification
- Creating new modules with
lt server module - Creating new objects with
lt server object - Adding properties with
lt server addProp - Creating a new server with
lt server create - Modifying existing code (services, controllers, resolvers)
- Adding relationships between modules
- Managing dependencies and imports
Testing & Validation
- Creating API tests for controllers/resolvers
- Running and fixing failing tests
- Testing endpoints manually
- Validating data models and schemas
- Testing authentication and permissions
General NestJS Tasks
- Answering NestJS/nest-server questions
- Explaining framework concepts
- Discussing architecture decisions
- Recommending best practices
- Refactoring existing code
Rule: If it involves NestJS or @lenne.tech/nest-server in ANY way, use this skill!
Recommended: Test-Driven Development (TDD)
Use TDD for robust, maintainable code:
1. Write API tests FIRST (REST/GraphQL endpoint tests) 2. Implement backend code until tests pass 3. Iterate until all tests green 4. Then proceed to frontend (E2E tests first)
Why TDD?
- Catches bugs early
- Documents expected behavior
- Enables safe refactoring
- Ensures security requirements are tested
For TDD workflow, use
skill - it coordinates backend and frontend test-first development.building-stories-with-tdd
Test Cleanup (CRITICAL)
afterAll(async () => { // Clean up test-created entities await db.collection('entities').deleteMany({ createdBy: testUserId }); await db.collection('users').deleteMany({ email: /@test\.com$/ }); });
Use separate test database:
app-test instead of app-dev
Related Skills
Works closely with:
skill - For ALL Nuxt/Vue frontend development (projects/app/)developing-lt-frontend
skill - For building user stories with Test-Driven Developmentbuilding-stories-with-tdd
skill - For Git operations and Fullstack initializationusing-lt-cli
skill - For updating @lenne.tech/nest-server to latest versionnest-server-updating
When to use which:
- Nuxt/Vue frontend work? Use
skilldeveloping-lt-frontend - Building features with TDD workflow? Use
skill (it will use this skill for implementation)building-stories-with-tdd - Need Git operations? Use
skillusing-lt-cli - Updating @lenne.tech/nest-server? Use
skillnest-server-updating
In monorepo projects:
orprojects/api/
→ This skill (generating-nest-servers)packages/api/
orprojects/app/
→packages/app/
skilldeveloping-lt-frontend- Direct NestJS work? Use this skill
TypeScript Language Server (Recommended)
Use the LSP tool when available for better code intelligence in TypeScript/NestJS projects:
| Operation | Use Case |
|---|---|
| Find where a class, function, or type is defined |
| Find all usages of a symbol across the codebase |
| Get type information and documentation for a symbol |
| List all classes, functions, and variables in a file |
| Search for symbols across the entire project |
| Find implementations of interfaces or abstract methods |
| Find all callers of a function/method |
| Find all functions called by a function/method |
When to use LSP:
- Navigating unfamiliar code →
,goToDefinitionfindReferences - Understanding inheritance →
goToImplementation - Analyzing dependencies →
,incomingCallsoutgoingCalls - Exploring file structure →
documentSymbol - Finding symbols by name →
workspaceSymbol
Installation (if LSP not available):
claude plugins install typescript-lsp --marketplace claude-plugins-official
CRITICAL SECURITY RULES - READ FIRST
Before you start ANY work, understand these NON-NEGOTIABLE rules:
NEVER Do This:
- NEVER remove or weaken
decorators@Restricted() - NEVER change
decorators to more permissive roles@Roles() - NEVER modify
logic to bypass securitysecurityCheck() - NEVER remove class-level
@Restricted(RoleEnum.ADMIN)
ALWAYS Do This:
- ALWAYS analyze permissions BEFORE writing tests
- ALWAYS test with the LEAST privileged user who is authorized
- ALWAYS adapt tests to security requirements, never vice versa
- ALWAYS ask developer for approval before changing ANY security decorator
Complete security rules with all details, examples, and testing strategies:
Comprehensive OWASP Secure Coding Practices checklist: security-rules.mdowasp-checklist.md
CRITICAL: NEVER USE declare
KEYWORD FOR PROPERTIES
declareDO NOT use the
keyword when defining properties in classes!declare
// WRONG declare name: string; // Decorator won't work! // CORRECT @UnifiedField({ description: 'Product name' }) name: string; // Decorator works properly
Why:
declare prevents decorators from being applied, breaking the decorator system.
Complete explanation and correct patterns: declare-keyword-warning.md
CRITICAL: DESCRIPTION MANAGEMENT
Descriptions must be applied consistently to EVERY component.
Quick 3-Step Process:
- Extract descriptions from user's
// comments - Format:
or'English text'
for German input'English (Deutsch)' - Apply EVERYWHERE: Model, CreateInput, UpdateInput, Objects, Class-level decorators
Complete formatting rules, examples, and verification checklist: description-management.md
Core Responsibilities
This skill handles ALL NestJS server development tasks, including:
Simple Tasks (Single Commands)
- Creating a single module with
lt server module - Creating a single object with
lt server object - Adding properties with
lt server addProp - Creating a new server with
lt server create - Starting the server with
ornpm startnpm run dev - Running tests with
npm test
Complex Tasks (Multiple Components)
When you receive a complete structure specification, you will:
- Parse and analyze the complete structure (modules, models, objects, properties, relationships)
- Create a comprehensive todo list breaking down all tasks
- Generate all components in the correct order (objects first, then modules)
- Handle inheritance properly (Core and custom parent classes)
- Manage descriptions (translate German to English, add originals in parentheses)
- Create API tests for all controllers and resolvers
- Verify functionality and provide a summary with observations
Analysis Tasks
When analyzing existing code:
- Explore the project structure to understand the architecture
- Read relevant files (modules, services, controllers, models)
- Identify patterns and conventions used in the project
- Explain findings clearly and concisely
- Suggest improvements when appropriate
Debugging Tasks
When debugging issues:
- Read error messages and logs carefully
- Identify the root cause by analyzing relevant code
- Check configuration (environment variables, config files)
- Test hypotheses by examining related files
- Provide solutions with code examples
Remember: For ANY task involving NestJS or @lenne.tech/nest-server, use this skill!
Understanding the Framework
Complete framework guide: framework-guide.md
Critical Rules:
- Read CrudService before modifying any Service (
)node_modules/@lenne.tech/nest-server/src/core/common/services/crud.service.ts - NEVER blindly pass all serviceOptions to other Services (only pass
)currentUser - Check if CrudService already provides needed functionality (create, find, findOne, update, delete, pagination)
Configuration File & Commands
Complete guide: configuration.md
Quick Command Reference:
# Create complete module (REST is default!) lt server module --name Product --controller Rest # Create SubObject lt server object --name Address # Add properties lt server addProp --type Module --element User # New project lt server create <server-name>
API Style: REST is the default!
- REST (default): Use
- Standard for all modules unless explicitly requested otherwise--controller Rest - GraphQL: Use
- ONLY when user explicitly requests GraphQL--controller GraphQL - Both: Use
- ONLY when user explicitly wants both REST and GraphQL--controller Both
Essential Property Flags:
- Name and type (string|number|boolean|ObjectId|Json|Date|bigint)--prop-name-X / --prop-type-X
/--prop-nullable-X
- Modifiers--prop-array-X
- Complex types--prop-enum-X / --prop-schema-X / --prop-reference-X
Service Health Check (MANDATORY)
Before starting ANY backend work, check if services are running:
# Check if API is running (Port 3000) curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/api # Check if port is in use (alternative) lsof -i :3000
Workflow:
┌────────────────────────────────────────────────────────────────┐ │ BEFORE starting backend work: │ │ │ │ 1. CHECK if Port 3000 is in use: │ │ lsof -i :3000 │ │ - If port in use: API already running, proceed │ │ - If port free: Start API │ │ │ │ 2. START API (if not running): │ │ cd projects/api && npm run start:dev & │ │ - Wait until API responds (max 30s) │ │ - Verify: curl -s http://localhost:3000/api │ │ │ │ 3. FOR FULLSTACK WORK (API + Frontend): │ │ Also check Port 3001 for frontend │ │ cd projects/app && npm run dev & │ │ │ │ 4. ONLY THEN proceed with development │ └────────────────────────────────────────────────────────────────┘
Starting Services (if not running):
# Start API in background (from monorepo root) cd projects/api && npm run start:dev & # Optional: Start Frontend too (Port 3001) cd projects/app && npm run dev &
Important:
- Always check with
BEFORE starting to avoid duplicate processeslsof -i :3000 - If port is in use but service not responding, kill the process first:
kill $(lsof -t -i :3000) - For tests that require running server, ensure API is started first
Prerequisites Check
Setup:
lt --version # Check CLI installation npm install -g @lenne.tech/cli # If needed ls src/server/modules # Verify project structure
Creating New Server:
lt server create <server-name>
Post-creation verification: Check
src/config.env.ts for replaced secrets and correct database URIs.
Understanding the Specification Format
Complete reference and examples:
and reference.mdexamples.md
Quick Type Reference:
- Basic:
,string
,number
,boolean
,Date
,bigintJson - Arrays:
-> addtype[]--prop-array-X true - Optional:
-> addproperty?: type--prop-nullable-X true - References:
-> useUser--prop-type-X ObjectId --prop-reference-X User - Embedded:
-> useAddress--prop-schema-X Address - Enums:
-> useENUM (VAL1, VAL2)--prop-enum-X PropertyNameEnum
Workflow Process
Complete details: workflow-process.md
7-Phase Workflow:
- Analysis & Planning - Parse spec, create todo list
- SubObject Creation - Create in dependency order
- Module Creation - Create with all properties
- Inheritance Handling - Update extends, CreateInput must include parent fields
- Description Management (CRITICAL) - Extract from comments, format as "ENGLISH (DEUTSCH)", apply everywhere
- Enum File Creation - Manual creation in
src/server/common/enums/ - API Test Creation - MANDATORY: Analyze permissions first, use least privileged user, test failures
Critical Testing Rules:
- Test via REST/GraphQL using TestHelper (NEVER direct Service tests)
- Analyze @Roles decorators BEFORE writing tests
- Use appropriate user role (not admin when S_USER works)
- Test unauthorized access failures (401/403)
Property Ordering
ALL properties must be in alphabetical order in Model, Input, and Output files. Verify and reorder after generating.
Verification Checklist
Complete checklist: verification-checklist.md
Essential Checks:
- All components created with descriptions (Model + CreateInput + UpdateInput)
- Properties in alphabetical order
- Permission analysis BEFORE writing tests
- Least privileged user used in tests
- Security validation tests (401/403 failures)
- All tests pass
Error Handling
Common Issues:
- TypeScript errors -> Add missing imports manually
- CreateInput validation fails -> Check parent's CreateInput for required fields
- Tests fail with 403 -> Check @Roles decorator, use appropriate user role (not admin when S_USER works)
- Security tests not failing -> Verify @Roles and securityCheck() logic, fix model/controller if needed
Phase 8: Pre-Report Quality Review
Complete process: quality-review.md
7 Steps:
- Identify all changes (git)
- Test management (analyze existing tests, create new, follow patterns)
- Compare with existing code (consistency)
- Critical analysis (style, structure, quality)
- Automated optimizations (imports, properties, formatting)
- Pre-report testing (build, lint, all tests must pass)
- Final verification (complete checklist)
Critical: Understand TestHelper, analyze existing tests first, use appropriate user roles, all tests must pass.
Final Report
After completing all tasks, provide:
- Summary of created components (SubObjects, Objects, Modules, enums, tests)
- Observations about data structure
- Test results (all passing)
- Next steps
Best Practices
- Create dependencies first (SubObjects before Modules)
- Check for circular dependencies
- Test incrementally, commit after major components
- Use REST controller by default - Only use GraphQL when explicitly requested
- Validate required fields in tests
- Document complex relationships
Working with This Skill
When receiving a specification:
- Parse completely, ask clarifying questions
- Create detailed todo list
- Execute systematically following workflow
- Verify each step, report progress
- Provide comprehensive summary