3.1 KiB
3.1 KiB
ACVE Task Implementation
Scope
- Add 3 mini-games with persisted scoring and profile grading.
- Add deterministic study recommendations from user profile/progress.
- Auto-issue completion certificates and support PDF download.
- Add enrolled-courses view (
/my-courses). - Show
Continueinstead ofStart Coursewhen user is enrolled. - Update case studies with Andres source content (
case_studies.txt).
Implemented Items
1. Mini-games + profile grade
- Expanded interactive modules to 3 in
lib/data/mockPractice.ts. - Added DB persistence for attempts via:
app/(protected)/practice/[slug]/actions.tssubmitPracticeAttemptgetPracticeAttempts
- Replaced localStorage attempt history in
app/(protected)/practice/[slug]/page.tsx. - Added profile grade computation in
lib/recommendations.ts#getMiniGameGrade.
2. Recommendations
- Added deterministic recommendation engine in
lib/recommendations.ts:refreshStudyRecommendationsgetActiveRecommendations
- Recommendations refresh after:
- mini-game submission
- lesson completion toggle
- Recommendations are displayed on
/profile.
3. Certificates + PDF
- Added certificate issuance utility in
lib/certificates.ts:issueCertificateIfEligiblebuildCertificatePdf
- Hooked issuance after lesson completion in:
app/(protected)/courses/[slug]/learn/actions.ts
- Added PDF endpoint:
app/api/certificates/[id]/pdf/route.ts
4. Enrolled courses view
- Added protected page:
app/(protected)/my-courses/page.tsx
- Displays enrolled courses, progress, continue/review CTA, and certificate download CTA.
5. Start vs Continue
- Updated course detail CTA in:
app/(public)/courses/[slug]/page.tsx
- Logic:
- enrolled user =>
Continue - not enrolled =>
Start Course - unauthenticated =>
Login to start
- enrolled user =>
6. Case studies update
- Expanded case-study type model:
types/caseStudy.ts
- Replaced mock cases with:
- Marbury v. Madison
- Miranda v. Arizona
- Brown v. Board of Education
- Updated pages to render:
- resumen
- terminos juridicos con definiciones
- resultado juridico
- "Ponte a prueba"
- Files:
lib/data/mockCaseStudies.tsapp/(public)/case-studies/page.tsxapp/(public)/case-studies/[slug]/page.tsx
Navigation updates
- Added authenticated links in navbar:
/my-courses/profile
- File:
components/Navbar.tsx
Prisma changes (schema)
- Updated
prisma/schema.prismawith:MiniGame,MiniGameQuestion,MiniGameAttempt,StudyRecommendationCertificate.certificateNumber,Certificate.pdfVersion@@unique([userId, courseId])onCertificate
- Updated
prisma/seed.tsto seed 3 mini-games + questions.
Validation
- Ran:
npm run lint(passes; one pre-existing warning remains inlib/auth/requireTeacher.ts).
Required follow-up (environment)
- Prisma client generation failed in this environment due Node runtime mismatch (
Node v18, project expects>=24). - Before production use of new DB-backed features, run:
- Node 24+ runtime
npx prisma generate- apply migration for schema updates