AgentSkillsCN

new-service

以标准的 Kensan 分层架构,快速搭建全新的 Go 微服务

SKILL.md
--- frontmatter
name: new-service
description: Scaffold a new Go microservice with the standard Kensan layered architecture
argument-hint: [service-name]
disable-model-invocation: true

New Go Microservice Scaffold

Create a new microservice $ARGUMENTS[0] following the Kensan backend conventions.

Prerequisites

Read backend/ARCHITECTURE.md and an existing service (e.g., backend/services/memo/) for reference.

Steps

  1. Create directory structure:
code
backend/services/$0/
├── cmd/main.go
├── internal/
│   ├── model.go
│   ├── handler/handler.go
│   ├── service/service.go
│   ├── service/interface.go
│   ├── service/service_test.go
│   └── repository/
│       ├── interface.go
│       └── repository.go
├── Dockerfile
└── Makefile
  1. cmd/main.go: Use bootstrap.New("$0") for initialization. Register routes with svc.RegisterRoutes() and svc.RegisterPublicRoutes() as needed.

  2. internal/model.go: Define domain types and DTOs. All entities must have ID, UserID, CreatedAt, UpdatedAt.

  3. internal/repository/interface.go: Define repository interface following ISP (split by entity if multiple).

  4. internal/repository/repository.go: PostgreSQL implementation using pgx. All queries must include WHERE user_id = $1. Use pgx.ErrNoRowserrors.NotFound().

  5. internal/service/interface.go: Define service interface (Reader + Writer pattern).

  6. internal/service/service.go: Business logic. Use shared/errors for domain errors. Accept ctx context.Context and userID string as first parameters.

  7. internal/service/service_test.go: Table-driven tests with mock repository.

  8. internal/handler/handler.go: HTTP handlers. Use middleware.GetUserID(r.Context()), middleware.JSON(), middleware.Error(). Follow the error mapping pattern.

  9. Dockerfile: Copy from existing service, update binary name.

  10. Makefile: Copy from existing service, update service name.

  11. Database migration: If needed, create backend/migrations/NNN_create_$0_tables.sql with user_id, UUID PKs, timestamps, and update trigger.

  12. docker-compose.yml: Add service entry with appropriate port.

After Scaffold

  • Run cd backend && make test to verify compilation
  • Update backend/ARCHITECTURE.md service list