@@ -16,7 +16,7 @@ import {
16
16
import { TRPCError } from '@trpc/server' ;
17
17
import { db } from '../db' ;
18
18
import { review , user , vote } from '../db/schema' ;
19
- import { and , count , desc , eq , sql } from 'drizzle-orm' ;
19
+ import { and , avg , count , desc , eq , sql } from 'drizzle-orm' ;
20
20
import { datesToStrings } from '../helpers/date' ;
21
21
22
22
async function userWroteReview ( userId : number | undefined , reviewId : number ) {
@@ -208,33 +208,30 @@ const reviewsRouter = router({
208
208
const featuredReviewCriteria = [ desc ( review . content ) , desc ( voteSubQuery . score ) , desc ( review . verified ) ] ;
209
209
210
210
const field = input . type === 'course' ? review . courseId : review ?. professorId ;
211
- const featuredReview = (
212
- await db
213
- . select ( )
214
- . from ( review )
215
- . where ( eq ( field , input . id ) )
216
- . leftJoin ( voteSubQuery , eq ( voteSubQuery . reviewId , review . id ) )
217
- . orderBy ( ...featuredReviewCriteria )
218
- . limit ( 1 )
219
- ) [ 0 ] ;
211
+ const featuredReview = await db
212
+ . select ( )
213
+ . from ( review )
214
+ . where ( eq ( field , input . id ) )
215
+ . leftJoin ( voteSubQuery , eq ( voteSubQuery . reviewId , review . id ) )
216
+ . orderBy ( ...featuredReviewCriteria )
217
+ . limit ( 1 ) ;
220
218
221
- return datesToStrings ( featuredReview . review ) as FeaturedReviewData ;
219
+ return featuredReview . length > 0 ? ( datesToStrings ( featuredReview [ 0 ] . review ) as FeaturedReviewData ) : undefined ;
222
220
} ) ,
223
221
224
222
/**
225
223
* Get avg ratings for a course's professors or a professor's courses
226
224
*/
227
- scores : publicProcedure
225
+ avgRating : publicProcedure
228
226
. input ( z . object ( { type : z . enum ( [ 'course' , 'professor' ] ) , id : z . string ( ) } ) )
229
227
. query ( async ( { input } ) => {
230
228
const field = input . type === 'course' ? review . courseId : review . professorId ;
231
229
const otherField = input . type === 'course' ? review . professorId : review . courseId ;
232
230
233
231
const results = await db
234
- . select ( { name : otherField , score : sql `COALESCE(SUM( ${ vote . vote } ), 0)` . mapWith ( Number ) } )
232
+ . select ( { name : otherField , avgRating : avg ( review . rating ) . mapWith ( Number ) } )
235
233
. from ( review )
236
234
. where ( eq ( field , input . id ) )
237
- . leftJoin ( vote , eq ( vote . reviewId , review . id ) )
238
235
. groupBy ( otherField ) ;
239
236
240
237
return results ;
0 commit comments