LMS-BGN/docs/epic-1-context.md

4.1 KiB

Epik 1 — Tech Context: Course & Learning Management

status: contexted phase: backend-planning note: Non-implementasi — konteks teknis & gating sebelum coding.

Tujuan

Menetapkan konteks teknis untuk fitur Course & Learning: katalog kursus, detail, modul/lessons, progres, jadwal & penugasan.

Lingkup Teknis

  • Read-only API untuk katalog & detail kursus
  • Mekanisme progres belajar per modul (idempotent updates)
  • Draft kontrak penugasan (submission) dan jadwal
  • Tanpa perubahan UI/DB produksi (non-implementasi)

Model Konseptual (Outline)

  • Course: { id, title, description, category, level, updatedAt }
  • Module: { id, courseId, title, order }
  • Lesson: { id, moduleId, title, order, duration }
  • Progress: { userId, moduleId, totalProgress(0..100), updatedAt }
  • Assignment: { id, courseId, title, dueAt }
  • Submission: { id, assignmentId, userId, submittedAt, contentRef, metadata }

Area API Terkait

  • GET /api/courses (paging/filter/sorting)
  • GET /api/courses/{courseId}
  • POST /api/progress/module (idempotency)
  • POST /api/assignments/{assignmentId}/submit (audit & metadata)

Acceptance Gates

  • Kontrak API disetujui PM/SM/Architect
  • Privacy, rate limiting, akses kontrol disepakati
  • Skema progres & aturan idempotency ditetapkan
  • Audit trail & retention policy untuk submission disetujui

Dependencies

  • Data sinkron dengan katalog kursus eksisting
  • Konsistensi relasi course→module→lesson

Risiko & Mitigasi

  • Risiko data bias/inkonsisten → validasi relasi saat kontrak
  • Risiko spam update progres → idempotency key + rate limit

Contract Principle

  • Skema API/model/field mengikuti skema dummy frontend untuk Course & Module.
  • Rujukan utama: src/app/course/[courseId]/page.tsx (Course & Module fields).
  • Nama field dan struktur tidak boleh breaking terhadap frontend; perubahan mayor perlu versioning.
  • Field baru ditambahkan sebagai optional; pengetatan dilakukan setelah sinkronisasi UI.

Catatan

Dokumen ini hanya konteks & kontrak; implementasi backend ditunda sampai gate terpenuhi.

Out-of-Scope (Eksplisit)

  • Perubahan UI/DB produksi
  • Integrasi eksternal (email, payment) di luar ruang Epik 1
  • Scheduler/background jobs
  • Real-time updates (WebSocket)

NFR Ringkas (Reliability & Observability)

  • Logging terstruktur (level, korelasi requestId, userId)
  • Metrics: latency, throughput, error rate
  • Alerting dasar untuk error ≥ p95
  • Audit trail untuk update progres dan submission

Dependencies (Versi Target)

  • Next.js 14.x, React 18.x, TypeScript 5.x, Tailwind 3.x

Acceptance Criteria (Atomik & Testable)

  • GET /api/courses mengembalikan daftar terpaginasikan (default 10 item); mendukung filter q substring pada title.
  • GET /api/courses/{courseId} mengembalikan field: id,title,description,modules[].
  • POST /api/progress/module bersifat idempotent menggunakan idempotencyKey; panggilan duplikat ≤ 5 menit mengembalikan hasil yang sama dan tidak menggandakan progres.
  • POST /api/assignments/{assignmentId}/submit menyimpan submittedAt, contentRef, metadata dan mencatat audit.

Test Strategy ↔ AC (Ringkas)

  • Unit: util idempotency, validator payload submission.
  • Integrasi: GET katalog/detail; POST progres (idempotency) dengan cek audit.
  • E2E (smoke): alur kursus → modul → update progres → submit tugas.
  • Observabilitas: verifikasi log audit muncul untuk progres & submission.

Traceability Matrix (Ringkas)

AC ID Spec Section Components Story Tests
E1-AC1 Area API: GET /api/courses src/app/courses, server route docs/stories/1-1-course-catalog-read-api.md TBD: backend test untuk katalog kursus
E1-AC2 Area API: GET /api/courses/{courseId} src/app/course/[courseId] docs/stories/1-2-course-detail-read-api.md TBD: backend test untuk detail kursus
E1-AC3 Idempotency progres useProgressTracking, server route docs/stories/1-3-module-progress-update-api.md TBD: backend test untuk progres idempotent
E1-AC4 Submission audit assignments UI/route TBD: docs/stories/1-4-assignment-submit-api.md TBD: backend test untuk submission + audit