26 lines
935 B
Markdown
26 lines
935 B
Markdown
# Story 3.1: Reward Accrual Record Create API
|
|
|
|
key: 3-1-reward-accrual-record-create
|
|
status: drafted
|
|
phase: backend-planning
|
|
note: Non-implementasi — definisi payload, idempotency, audit logging.
|
|
|
|
## Ringkasan
|
|
Endpoint untuk mencatat accrual reward yang timbul dari event (misal: penyelesaian modul/assignment) secara aman dan idempoten.
|
|
|
|
## Scope Backend
|
|
- Payload: { userId, sourceEventId, sourceType, points, occurredAt, reason, metadata }
|
|
- Idempotency key: header `Idempotency-Key` untuk deduplikasi request
|
|
- De-duplication: oleh kombinasi `sourceEventId` + `sourceType` atau `Idempotency-Key`
|
|
- Audit: who/when, immutable log, traceability
|
|
|
|
## Acceptance Gate
|
|
- Idempotency & audit logging disepakati
|
|
- Privasi & rate limiting disetujui
|
|
|
|
## Kontrak (Outline)
|
|
- Route: POST /api/rewards/accruals
|
|
- Response: 201
|
|
```
|
|
{ "accrualId":"ra1", "status":"accepted", "userId":"u1", "points":10, "occurredAt":"2025-11-12T10:00:00Z" }
|
|
``` |