Skip to content

migrate remaining dependent mongoose models to TypeScript (#7.23)#316

Open
shubham-01-star wants to merge 19 commits intoQuoteVote:mainfrom
shubham-01-star:7.23-migrate-remaining-models-ts
Open

migrate remaining dependent mongoose models to TypeScript (#7.23)#316
shubham-01-star wants to merge 19 commits intoQuoteVote:mainfrom
shubham-01-star:7.23-migrate-remaining-models-ts

Conversation

@shubham-01-star
Copy link
Copy Markdown
Collaborator

This PR completes the TypeScript migration for the last remaining Mongoose models:
Vote, Reaction, Message, MessageRoom, Presence, Roster, Typing, and UserReport.


Key Updates

  • TypeScript Conversion
    All remaining .js model files have been converted to .ts.

  • Mongoose 8.x Compatibility
    Updated schema options and methods to ensure compatibility with Mongoose v8.

  • Strong Typing
    Added proper TypeScript interfaces for all migrated models in
    app/types/mongoose.ts.

  • Full Test Coverage
    Added mocked CRUD unit tests for all migrated models.


How to Test

  1. Run the tests to verify all model tests pass:
    pnpm test

Add 7 simple Mongoose models with no static methods:
- BotReport.ts: userId/reporterId refs, compound unique index
- VoteLog.ts: userId/postId refs, type enum (up|down)
- UserReport.ts: reportedUserId/reporterId refs, reason, status
- Domain.ts: key (unique, required), name
- Creator.ts: name (required), avatar, bio
- Content.ts: creatorId (ref Creator), domainId (ref Domain), title, url
- Collection.ts: userId, name (required), description (String, bug fix), postIds[]

All schemas use Mongoose 9.x conventions with { timestamps: true }.
No deprecated options (useNewUrlParser etc.) anywhere.
Types imported from ~/types/mongoose.
Add 3 Mongoose models with Mongoose statics and indexes:
- Group.ts: creatorId/adminIds/allowedUserIds, privacy enum,
  static findByCreatorId()
- UserInvite.ts: email (lowercase/trim), code, status, expiresAt,
  indexes on {email}, {code}, {status},
  static findByEmail()
- UserReputation.ts: userId (unique), 4 score fields, 10 nested
  metrics fields, indexes on {overallScore:-1}/{lastCalculated},
  statics findByUserId() + calculateScore() with dynamic import()
  to break circular dependency with reputation.ts

All schemas use { timestamps: true } + Mongoose 9.x conventions.
Re-exports BotReport, Collection, Content, Creator, Domain,
Group, UserInvite, UserReport, UserReputation, VoteLog from index.ts
79 tests across 12 model test files covering:
- Create / Read / Update / Delete for each model
- Static method tests (findByEmail, findByCreatorId,
  findByUserId, calculateScore)
All tests pass: 362/362 suite-wide
- Add 16 missing fields to User interface (common.ts) matching Prisma schema:
  bio, location, website, companyName, plan, stripeCustomerId, tokens,
  _wallet, status, _votesId, favorited, emailVerified, isModerator,
  blockedUserIds, settings, lastLogin
- Add ObjectId overrides in UserDocument (mongoose.ts)
- Expand User.ts Mongoose schema with all new fields and indexes
- Add User barrel export in models/index.ts
- Install stripe@20.4.1 as dependency
- Replace require('stripe') with proper ES import in getStripeAuth.ts
- Use Stripe SDK types (Stripe.Customer, Stripe.PaymentMethod,
  Stripe.PaymentMethodCreateParams.Card) across all Stripe utilities
- Remove all Record<string, unknown> workarounds and inline type casts
- Update stripe.test.ts to use ES module mock format (remove virtual: true)
- Add comprehensive User.test.ts with 24 unit tests

All 386 tests pass, tsc --noEmit clean.
@vercel
Copy link
Copy Markdown

vercel bot commented Mar 22, 2026

@shubham-01-star is attempting to deploy a commit to the Louis Girifalco's projects Team on Vercel.

A member of the Team first needs to authorize it.

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.

1 participant