11import { recommend } from "@prisma/client/sql" ;
2- import type { UserID , UserWithCoursesAndSubjects } from "common/types" ;
2+ import type {
3+ Course ,
4+ InterestSubject ,
5+ UserID ,
6+ UserWithCoursesAndSubjects ,
7+ } from "common/types" ;
38import { prisma } from "../../database/client" ;
4- import { getCoursesByUserId } from "../../database/courses" ;
5- import * as interest from "../../database/interest" ;
6- import { getUserByID } from "../../database/users" ;
79
810export async function recommendedTo (
911 user : UserID ,
@@ -15,23 +17,17 @@ export async function recommendedTo(
1517 count : number ;
1618 } >
1719> {
18- const result = await prisma . $queryRawTyped ( recommend ( user , limit , offset ) ) ;
19- return Promise . all (
20- result . map ( async ( res ) => {
21- const { overlap : count , ...u } = res ;
22- if ( count === null ) throw new Error ( "count is null: something is wrong" ) ;
23- // TODO: user の情報はここで再度 DB に問い合わせるのではなく、 recommend の sql で取得
24- const user = await getUserByID ( u . id ) ;
25- const courses = getCoursesByUserId ( u . id ) ;
26- const subjects = interest . of ( u . id ) ;
27- return {
28- count : Number ( count ) ,
29- u : {
30- ...user ,
31- courses : await courses ,
32- interestSubjects : await subjects ,
33- } ,
34- } ;
35- } ) ,
36- ) ;
20+ const users = await prisma . $queryRawTyped ( recommend ( user , limit , offset ) ) ;
21+ console . log ( "🚀" , users ) ;
22+ return users . map ( ( user ) => {
23+ const { overlap : count , ...u } = user ;
24+ return {
25+ count : Number ( count ) ,
26+ u : {
27+ ...u ,
28+ interestSubjects : ( u . interestSubjects ?? [ ] ) as InterestSubject [ ] , // TODO: type
29+ courses : ( u . courses ?? [ ] ) as Course [ ] , // TODO: type
30+ } ,
31+ } ;
32+ } ) ;
3733}
0 commit comments