Skip to content

Migrate PostModel to TypeScript#313

Open
shubham-01-star wants to merge 10 commits intoQuoteVote:mainfrom
shubham-01-star:feature/7.20-migrate-post-model-ts
Open

Migrate PostModel to TypeScript#313
shubham-01-star wants to merge 10 commits intoQuoteVote:mainfrom
shubham-01-star:feature/7.20-migrate-post-model-ts

Conversation

@shubham-01-star
Copy link
Copy Markdown
Collaborator

Summary

This PR migrates the Post model from the legacy JavaScript codebase to TypeScript, completing issue #7.20. The migration introduces strong typing for the Mongoose schema while preserving all existing post-related functionality.


Changes Included

  • Types Updated
    Added missing fields from the legacy database schema to the TypeScript type definitions in app/types/common.ts.

  • Model Expanded
    Fully defined the Post schema in Post.ts, including all legacy fields, default values, and database search indexes.

  • Helper Methods
    Implemented required static methods such as findByUserId and findFeatured.

  • Tests Added
    Added comprehensive unit tests to verify post creation, updates, and search functionality.


Validation

  • All backend unit tests pass successfully.
  • TypeScript type checks pass without errors.
npx tsc --noEmit
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 21, 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.

Copy link
Copy Markdown
Contributor

@flyblackbox flyblackbox left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work @shubham-01-star! I will help us get review from one other dev. Stay tuned 📺

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.

2 participants