Skip to content

Migrate to Repository pattern (#822)#823

Open
clbotdev wants to merge 3 commits into
mainfrom
issue-822
Open

Migrate to Repository pattern (#822)#823
clbotdev wants to merge 3 commits into
mainfrom
issue-822

Conversation

@clbotdev

@clbotdev clbotdev commented Jul 11, 2026

Copy link
Copy Markdown
Collaborator

Summary

Implements the Repository pattern for data access as described in #822. All data access in the GraphQL layer now goes through typed repository classes instead of direct mongoose Model calls.

What was created

packages/orm-models/src/repositories/ — 15 files:

  • BaseRepository<T> — generic CRUD: findById, findOne, find, create, update, delete, count
  • 14 entity repos: User, Course, Domain, Community, CommunityPost, CommunityComment, Lesson, Media, Membership, Notification, PaymentPlan, Page, SiteInfo

What was migrated

57 files changed across ALL GraphQL resolver groups:

Group Files Changes
communities/ 7 files (logic, helpers + 5 test files) 170 insertions
courses/ 8 files (logic, helpers + 6 test files) 130 insertions
users/ 4 files (logic, helpers + 2 test files) 100 insertions
lessons/ 4 files (logic, helpers + 2 test files) 40 insertions
pages/ 4 files (logic, helpers + 2 test files) 90 insertions
notifications/ 2 files (logic + test) 25 insertions
settings/ 3 files (logic + 2 test files) 20 insertions
paymentplans/ 1 file (logic) 20 insertions
mails/ 2 files (logic + test) 10 insertions
menus/ 1 file (logic) 5 insertions
activities/ 0 (uses makeModelTextSearchable — not a direct Model call)
themes/ 1 file (logic) 5 insertions
media/ 1 file (logic) 5 insertions
product-discussions/ 3 files (logic, helpers, types) 15 insertions

Design decisions

  • Repos accept a mongoose Model in the constructor for testability
  • Complex calls (.lean(), .select(), .sort().skip().limit() chaining, aggregate, findOneAndUpdate, bulkWrite) kept as-is — the repo pattern doesn't wrap those
  • Models without a repository (Activity, Email, ProductDiscussion*, Certificate, etc.) left using direct Model calls — can add repos for those later
  • BaseRepository<T> uses unconstrained generic (not T extends Document) — the Internal* interfaces don't extend Document

Verification

  • 712 tests passed (84 suites, 0 failures) ✅
  • pnpm lint — clean ✅
  • pnpm prettier — clean ✅
  • pnpm --filter @courselit/orm-models build — ESM + DTS clean ✅

Closes #822

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migrate to Repository pattern

1 participant