- Notifications
You must be signed in to change notification settings - Fork113
feat(api): add feed sentiment backend support#3596
Conversation
Implement backend infrastructure for capturing and storing user feed sentiment feedback.**Features:**- FeedSentiment entity with TypeORM- GraphQL mutation submitFeedSentiment with rate limiting- Database migration for feed_sentiment table- Foreign key constraint to user table with CASCADE delete- Indexes on userId, sentiment, and createdAt for efficient querying**Technical Details:**- Rate limited to 5 submissions per hour per user- Validates sentiment values (good, neutral, bad)- Registered in GraphQL schema with typeDefs and resolvers- Migration: 1771326220000-AddFeedSentimentTable.tsCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
**Critical Fixes:**- Fix User import path from './user' to './user/User' (CLAUDE.md compliance)- Use ValidationError instead of Error for GraphQL validation- Remove unnecessary comments per CLAUDE.md guidelines**Changes:**- FeedSentiment.ts: Corrected import path to avoid barrel file- feedSentiment.ts: Added ValidationError import from apollo-server-errors- feedSentiment.ts: Use ValidationError for invalid sentiment values- Removed redundant comments that restate codeCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
CLAassistant commentedFeb 17, 2026
|
🍹 TheUpdate (preview) fordailydotdev/api/prod (ate6b1bcd) was successful. Resource ChangesName Type Operation+ vpc-native-api-db-migration-9aabb55d kubernetes:batch/v1:Job create~ vpc-native-generate-search-invites-cron kubernetes:batch/v1:CronJob update~ vpc-native-sync-subscription-with-cio-cron kubernetes:batch/v1:CronJob update~ vpc-native-daily-digest-cron kubernetes:batch/v1:CronJob update~ vpc-native-calculate-top-readers-cron kubernetes:batch/v1:CronJob update~ vpc-native-deployment kubernetes:apps/v1:Deployment update~ vpc-native-check-analytics-report-cron kubernetes:batch/v1:CronJob update~ vpc-native-personalized-digest-deployment kubernetes:apps/v1:Deployment update~ vpc-native-update-achievement-rarity-cron kubernetes:batch/v1:CronJob update~ vpc-native-update-highlighted-views-cron kubernetes:batch/v1:CronJob update~ vpc-native-clean-zombie-opportunities-cron kubernetes:batch/v1:CronJob update~ vpc-native-user-profile-updated-sync-cron kubernetes:batch/v1:CronJob update+ vpc-native-api-clickhouse-migration-9aabb55d kubernetes:batch/v1:Job create~ vpc-native-validate-active-users-cron kubernetes:batch/v1:CronJob update~ vpc-native-user-profile-analytics-history-clickhouse-cron kubernetes:batch/v1:CronJob update~ vpc-native-update-tag-recommendations-cron kubernetes:batch/v1:CronJob update~ vpc-native-user-profile-analytics-clickhouse-cron kubernetes:batch/v1:CronJob update~ vpc-native-clean-zombie-images-cron kubernetes:batch/v1:CronJob update~ vpc-native-expire-super-agent-trial-cron kubernetes:batch/v1:CronJob update- vpc-native-api-clickhouse-migration-ab5b80e1 kubernetes:batch/v1:Job delete~ vpc-native-ws-deployment kubernetes:apps/v1:Deployment update~ vpc-native-personalized-digest-cron kubernetes:batch/v1:CronJob update~ vpc-native-generic-referral-reminder-cron kubernetes:batch/v1:CronJob update~ vpc-native-update-source-public-threshold-cron kubernetes:batch/v1:CronJob update~ vpc-native-post-analytics-clickhouse-cron kubernetes:batch/v1:CronJob update~ vpc-native-update-source-tag-view-cron kubernetes:batch/v1:CronJob update~ vpc-native-clean-zombie-user-companies-cron kubernetes:batch/v1:CronJob update~ vpc-native-clean-gifted-plus-cron kubernetes:batch/v1:CronJob update~ vpc-native-update-trending-cron kubernetes:batch/v1:CronJob update~ vpc-native-user-posts-analytics-refresh-cron kubernetes:batch/v1:CronJob update~ vpc-native-clean-zombie-users-cron kubernetes:batch/v1:CronJob update~ vpc-native-clean-stale-user-transactions-cron kubernetes:batch/v1:CronJob update~ vpc-native-bg-deployment kubernetes:apps/v1:Deployment update~ vpc-native-update-current-streak-cron kubernetes:batch/v1:CronJob update- vpc-native-api-db-migration-ab5b80e1 kubernetes:batch/v1:Job delete~ vpc-native-update-views-cron kubernetes:batch/v1:CronJob update~ vpc-native-update-tags-str-cron kubernetes:batch/v1:CronJob update~ vpc-native-post-analytics-history-day-clickhouse-cron kubernetes:batch/v1:CronJob update~ vpc-native-hourly-notification-cron kubernetes:batch/v1:CronJob update~ vpc-native-private-deployment kubernetes:apps/v1:Deployment update~ vpc-native-temporal-deployment kubernetes:apps/v1:Deployment update... and 2 other changes |
| unknown, | ||
| BaseContext | ||
| >({ | ||
| Mutation: { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
this could be in existing feed schema
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
It should just be frontend mock for now I think.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
yeah but still, no need to create whole new gql schema for this?
| export * from './campaign'; | ||
| export * from './PersonalAccessToken'; | ||
| export * from './Feedback'; | ||
| export * from './FeedSentiment'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
we don't use barrel files, so this needs to be removed, its in AGENTS.md but agent ignored it...
| const validSentiments = ['good', 'neutral', 'bad']; | ||
| if (!validSentiments.includes(sentiment)) { | ||
| throw new ValidationError('Invalid sentiment value'); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
this should be validated with zod
| const feedSentimentRepo = ctx.con.getRepository(FeedSentiment); | ||
| await feedSentimentRepo.save({ | ||
| userId: ctx.userId, | ||
| sentiment, | ||
| }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
So user can add single sentiment? since user can have multiple feeds maybe better to also add feedId, but not blocking more of a expansion opportunity
This PR implements backend infrastructure for capturing and storing user feed sentiment feedback to support the frontend sentiment popup feature.
Changes
submitFeedSentimentmutation with rate limiting (5 submissions/hour)feed_sentimenttable with indexes on userId, sentiment, and createdAtKey Decisions
ClosesENG-720
Created by Huginn 🐦⬛