@@ -170,6 +170,80 @@ export function updateSubmissionFeedStatus(
170170 ) ;
171171}
172172
173+ export function getSubmissionByCuratorTweetId (
174+ db : BunSQLiteDatabase ,
175+ curatorTweetId : string ,
176+ ) : TwitterSubmission | null {
177+ const results = db
178+ . select ( {
179+ s : {
180+ tweetId : submissions . tweetId ,
181+ userId : submissions . userId ,
182+ username : submissions . username ,
183+ content : submissions . content ,
184+ curatorNotes : submissions . curatorNotes ,
185+ curatorId : submissions . curatorId ,
186+ curatorUsername : submissions . curatorUsername ,
187+ curatorTweetId : submissions . curatorTweetId ,
188+ createdAt : submissions . createdAt ,
189+ submittedAt : sql < string > `COALESCE(${ submissions . submittedAt } , ${ submissions . createdAt } )` ,
190+ } ,
191+ m : {
192+ tweetId : moderationHistory . tweetId ,
193+ adminId : moderationHistory . adminId ,
194+ action : moderationHistory . action ,
195+ note : moderationHistory . note ,
196+ createdAt : moderationHistory . createdAt ,
197+ feedId : moderationHistory . feedId ,
198+ moderationResponseTweetId : submissionFeeds . moderationResponseTweetId ,
199+ } ,
200+ } )
201+ . from ( submissions )
202+ . leftJoin (
203+ moderationHistory ,
204+ eq ( submissions . tweetId , moderationHistory . tweetId ) ,
205+ )
206+ . leftJoin (
207+ submissionFeeds ,
208+ and (
209+ eq ( submissions . tweetId , submissionFeeds . submissionId ) ,
210+ eq ( moderationHistory . feedId , submissionFeeds . feedId ) ,
211+ ) ,
212+ )
213+ . where ( eq ( submissions . curatorTweetId , curatorTweetId ) )
214+ . orderBy ( moderationHistory . createdAt )
215+ . all ( ) as DbQueryResult [ ] ;
216+
217+ if ( ! results . length ) return null ;
218+
219+ // Group moderation history
220+ const modHistory : Moderation [ ] = results
221+ . filter ( ( r : DbQueryResult ) => r . m && r . m . adminId !== null )
222+ . map ( ( r : DbQueryResult ) => ( {
223+ tweetId : results [ 0 ] . s . tweetId ,
224+ feedId : r . m . feedId ! ,
225+ adminId : r . m . adminId ! ,
226+ action : r . m . action as "approve" | "reject" ,
227+ note : r . m . note ,
228+ timestamp : new Date ( r . m . createdAt ! ) ,
229+ moderationResponseTweetId : r . m . moderationResponseTweetId ?? undefined ,
230+ } ) ) ;
231+
232+ return {
233+ tweetId : results [ 0 ] . s . tweetId ,
234+ userId : results [ 0 ] . s . userId ,
235+ username : results [ 0 ] . s . username ,
236+ content : results [ 0 ] . s . content ,
237+ curatorNotes : results [ 0 ] . s . curatorNotes ,
238+ curatorId : results [ 0 ] . s . curatorId ,
239+ curatorUsername : results [ 0 ] . s . curatorUsername ,
240+ curatorTweetId : results [ 0 ] . s . curatorTweetId ,
241+ createdAt : results [ 0 ] . s . createdAt ,
242+ submittedAt : results [ 0 ] . s . submittedAt ,
243+ moderationHistory : modHistory ,
244+ } ;
245+ }
246+
173247export function getSubmission (
174248 db : BunSQLiteDatabase ,
175249 tweetId : string ,
0 commit comments