build: /breakdown-feature add-hello-endpoint
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed

This commit is contained in:
rdev-worker 2026-02-03 03:06:44 +00:00
parent f4e333abd7
commit d73e82f92b
2 changed files with 88 additions and 1 deletions

View File

@ -12,6 +12,17 @@
"status": "approved",
"createdAt": "2026-02-03T03:02:00Z",
"approvedAt": "2026-02-03T03:04:00Z"
},
"tasks": {
"status": "draft",
"createdAt": "2026-02-03T03:05:00Z"
}
}
},
"tasks": [
{"id": "T1", "title": "Create Hello handler with Say method", "status": "pending"},
{"id": "T2", "title": "Add unit tests for Hello handler", "status": "pending"},
{"id": "T3", "title": "Register /hello route in routes.go", "status": "pending"},
{"id": "T4", "title": "Add OpenAPI documentation for /hello endpoint", "status": "pending"},
{"id": "T5", "title": "Verify integration and run quality checks", "status": "pending"}
]
}

View File

@ -0,0 +1,76 @@
# Tasks: Add /hello Endpoint to API Service
## Task Order (dependency sequence)
### T1: Create Hello handler with Say method
- **Scope:** Create `services/api/internal/api/handlers/hello.go` with:
- `HelloResponse` struct with `Message string` field
- `Hello` struct (handler)
- `NewHello(logger *logging.Logger) *Hello` constructor
- `Say(w http.ResponseWriter, r *http.Request) error` method that returns greeting
- **Files:**
- Create: `services/api/internal/api/handlers/hello.go`
- **Depends on:** None
- **Acceptance criteria:**
- [ ] `HelloResponse` struct defined with `json:"message"` tag
- [ ] `Hello` handler struct created with logger field
- [ ] `NewHello` constructor follows existing pattern from `example.go`
- [ ] `Say` method uses `httpresponse.OK()` to return `HelloResponse{Message: "Hello, World!"}`
- [ ] `Say` method returns `nil` (no error case)
- [ ] File compiles without errors
### T2: Add unit tests for Hello handler
- **Scope:** Create `services/api/internal/api/handlers/hello_test.go` with test for `Say` method
- **Files:**
- Create: `services/api/internal/api/handlers/hello_test.go`
- **Depends on:** T1
- **Acceptance criteria:**
- [ ] Test file follows pattern from `example_test.go`
- [ ] `TestHello_Say` test verifies HTTP 200 status
- [ ] Test verifies response contains `data` field
- [ ] Test verifies `data.message` equals `"Hello, World!"`
- [ ] All tests pass
### T3: Register /hello route in routes.go
- **Scope:** Update `services/api/internal/api/routes.go` to:
- Initialize `helloHandler` using `handlers.NewHello(logger)`
- Register `GET /api/v1/hello` route with `app.Wrap(helloHandler.Say)`
- **Files:**
- Modify: `services/api/internal/api/routes.go`
- **Depends on:** T1
- **Acceptance criteria:**
- [ ] `helloHandler` initialized alongside other handlers
- [ ] Route registered in public routes section (before auth group)
- [ ] Route uses `app.Wrap()` pattern
- [ ] Route path is `/hello` (under `/api/v1` group)
### T4: Add OpenAPI documentation for /hello endpoint
- **Scope:** Update `services/api/internal/api/spec.go` to:
- Add "Hello" tag with description "Simple greeting endpoint"
- Define `HelloResponse` schema
- Add `/api/v1/hello` GET path with response documentation
- **Files:**
- Modify: `services/api/internal/api/spec.go`
- **Depends on:** T3
- **Acceptance criteria:**
- [ ] "Hello" tag added with appropriate description
- [ ] `HelloResponse` schema defined with `message` field
- [ ] GET `/api/v1/hello` path documented
- [ ] Response shows 200 with `{data, meta}` envelope containing `HelloResponse`
- [ ] No security requirement (public endpoint)
- [ ] OpenAPI spec renders correctly at `/docs`
### T5: Verify integration and run quality checks
- **Scope:** Run the service and verify end-to-end functionality:
- Build passes
- Tests pass
- Endpoint responds correctly
- OpenAPI docs show the new endpoint
- **Files:** None (verification only)
- **Depends on:** T1, T2, T3, T4
- **Acceptance criteria:**
- [ ] `go build ./...` succeeds for services/api
- [ ] `go test ./...` passes for services/api
- [ ] `GET /api/v1/hello` returns 200 with `{"data": {"message": "Hello, World!"}, "meta": {...}}`
- [ ] `/docs` shows Hello endpoint under "Hello" tag
- [ ] Response includes `request_id` in meta (via middleware)