Get the FREE Ultimate OpenClaw Setup Guide →

backend-dev-guidelines

Scanned
npx machina-cli add skill jackspace/ClaudeSkillz/backend-dev-guidelines_diet103 --openclaw
Files (1)
SKILL.md
8.0 KB

Backend Development Guidelines

Purpose

Establish consistency and best practices across backend microservices (blog-api, auth-service, notifications-service) using modern Node.js/Express/TypeScript patterns.

When to Use This Skill

Automatically activates when working on:

  • Creating or modifying routes, endpoints, APIs
  • Building controllers, services, repositories
  • Implementing middleware (auth, validation, error handling)
  • Database operations with Prisma
  • Error tracking with Sentry
  • Input validation with Zod
  • Configuration management
  • Backend testing and refactoring

Quick Start

New Backend Feature Checklist

  • Route: Clean definition, delegate to controller
  • Controller: Extend BaseController
  • Service: Business logic with DI
  • Repository: Database access (if complex)
  • Validation: Zod schema
  • Sentry: Error tracking
  • Tests: Unit + integration tests
  • Config: Use unifiedConfig

New Microservice Checklist

  • Directory structure (see architecture-overview.md)
  • instrument.ts for Sentry
  • unifiedConfig setup
  • BaseController class
  • Middleware stack
  • Error boundary
  • Testing framework

Architecture Overview

Layered Architecture

HTTP Request
    ↓
Routes (routing only)
    ↓
Controllers (request handling)
    ↓
Services (business logic)
    ↓
Repositories (data access)
    ↓
Database (Prisma)

Key Principle: Each layer has ONE responsibility.

See architecture-overview.md for complete details.


Directory Structure

service/src/
├── config/              # UnifiedConfig
├── controllers/         # Request handlers
├── services/            # Business logic
├── repositories/        # Data access
├── routes/              # Route definitions
├── middleware/          # Express middleware
├── types/               # TypeScript types
├── validators/          # Zod schemas
├── utils/               # Utilities
├── tests/               # Tests
├── instrument.ts        # Sentry (FIRST IMPORT)
├── app.ts               # Express setup
└── server.ts            # HTTP server

Naming Conventions:

  • Controllers: PascalCase - UserController.ts
  • Services: camelCase - userService.ts
  • Routes: camelCase + Routes - userRoutes.ts
  • Repositories: PascalCase + Repository - UserRepository.ts

Core Principles (7 Key Rules)

1. Routes Only Route, Controllers Control

// ❌ NEVER: Business logic in routes
router.post('/submit', async (req, res) => {
    // 200 lines of logic
});

// ✅ ALWAYS: Delegate to controller
router.post('/submit', (req, res) => controller.submit(req, res));

2. All Controllers Extend BaseController

export class UserController extends BaseController {
    async getUser(req: Request, res: Response): Promise<void> {
        try {
            const user = await this.userService.findById(req.params.id);
            this.handleSuccess(res, user);
        } catch (error) {
            this.handleError(error, res, 'getUser');
        }
    }
}

3. All Errors to Sentry

try {
    await operation();
} catch (error) {
    Sentry.captureException(error);
    throw error;
}

4. Use unifiedConfig, NEVER process.env

// ❌ NEVER
const timeout = process.env.TIMEOUT_MS;

// ✅ ALWAYS
import { config } from './config/unifiedConfig';
const timeout = config.timeouts.default;

5. Validate All Input with Zod

const schema = z.object({ email: z.string().email() });
const validated = schema.parse(req.body);

6. Use Repository Pattern for Data Access

// Service → Repository → Database
const users = await userRepository.findActive();

7. Comprehensive Testing Required

describe('UserService', () => {
    it('should create user', async () => {
        expect(user).toBeDefined();
    });
});

Common Imports

// Express
import express, { Request, Response, NextFunction, Router } from 'express';

// Validation
import { z } from 'zod';

// Database
import { PrismaClient } from '@prisma/client';
import type { Prisma } from '@prisma/client';

// Sentry
import * as Sentry from '@sentry/node';

// Config
import { config } from './config/unifiedConfig';

// Middleware
import { SSOMiddlewareClient } from './middleware/SSOMiddleware';
import { asyncErrorWrapper } from './middleware/errorBoundary';

Quick Reference

HTTP Status Codes

CodeUse Case
200Success
201Created
400Bad Request
401Unauthorized
403Forbidden
404Not Found
500Server Error

Service Templates

Blog API (✅ Mature) - Use as template for REST APIs Auth Service (✅ Mature) - Use as template for authentication patterns


Anti-Patterns to Avoid

❌ Business logic in routes ❌ Direct process.env usage ❌ Missing error handling ❌ No input validation ❌ Direct Prisma everywhere ❌ console.log instead of Sentry


Navigation Guide

Need to...Read this
Understand architecturearchitecture-overview.md
Create routes/controllersrouting-and-controllers.md
Organize business logicservices-and-repositories.md
Validate inputvalidation-patterns.md
Add error trackingsentry-and-monitoring.md
Create middlewaremiddleware-guide.md
Database accessdatabase-patterns.md
Manage configconfiguration.md
Handle async/errorsasync-and-errors.md
Write teststesting-guide.md
See examplescomplete-examples.md

Resource Files

architecture-overview.md

Layered architecture, request lifecycle, separation of concerns

routing-and-controllers.md

Route definitions, BaseController, error handling, examples

services-and-repositories.md

Service patterns, DI, repository pattern, caching

validation-patterns.md

Zod schemas, validation, DTO pattern

sentry-and-monitoring.md

Sentry init, error capture, performance monitoring

middleware-guide.md

Auth, audit, error boundaries, AsyncLocalStorage

database-patterns.md

PrismaService, repositories, transactions, optimization

configuration.md

UnifiedConfig, environment configs, secrets

async-and-errors.md

Async patterns, custom errors, asyncErrorWrapper

testing-guide.md

Unit/integration tests, mocking, coverage

complete-examples.md

Full examples, refactoring guide


Related Skills

  • database-verification - Verify column names and schema consistency
  • error-tracking - Sentry integration patterns
  • skill-developer - Meta-skill for creating and managing skills

Skill Status: COMPLETE ✅ Line Count: < 500 ✅ Progressive Disclosure: 11 resource files ✅

Source

git clone https://github.com/jackspace/ClaudeSkillz/blob/master/skills/backend-dev-guidelines_diet103/SKILL.mdView on GitHub

Overview

This skill provides a comprehensive, opinionated guide for building robust Node.js/Express microservices with TypeScript. It codifies a layered architecture (routes → controllers → services → repositories), the BaseController pattern, and best practices for error handling, observability with Sentry, validation with Zod, configuration with unifiedConfig, dependency injection, and testing. It also covers migrating from legacy patterns to a modern, maintainable codebase.

How This Skill Works

Developers implement a thin Route that delegates to a Controller. Controllers extend a BaseController and coordinate with Services via dependency injection, while Services maintain business logic and interact with Repositories (data access via Prisma). The setup uses Zod for input validation, unifiedConfig for configuration, and instrument.ts to initialize Sentry, enabling consistent error handling and telemetry across microservices.

When to Use It

  • When creating or modifying routes, endpoints, or APIs
  • When building or refactoring Controllers, Services, and Repositories
  • When implementing middleware (auth, validation, error handling) as part of a request pipeline
  • When performing Prisma database operations or other data access tasks
  • When migrating from legacy patterns to a layered architecture with testing and observability

Quick Start

  1. Step 1: Create a Route that delegates to a Controller
  2. Step 2: Implement a Controller that extends BaseController and uses a Service via DI
  3. Step 3: Wire up Prisma Repository, Zod validation, Sentry instrumentation, and unifiedConfig; add tests

Best Practices

  • Keep routes thin and delegate all business logic to Controllers
  • Extend Controllers from BaseController to standardize success and error handling
  • Route and controller errors should be captured by Sentry and surfaced consistently
  • Use unifiedConfig instead of process.env; initialize Sentry early in instrument.ts
  • Follow a clear folder structure and naming conventions for Controllers, Services, and Repositories

Example Use Cases

  • Add a new endpoint for user profiles with Route -> UserController -> UserService -> UserRepository (Prisma)
  • Validate input with Zod in a route, then forward to the service for business logic
  • Instrument a microservice with Sentry (instrument.ts) and ensure errors are captured
  • Refactor a legacy route to the new layered pattern (Route → Controller → Service → Repository) with tests
  • Set up unifiedConfig and DI for a new microservice, including unit and integration tests

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers