@@ -3,6 +3,7 @@ import { project, user, devlog, t1Review } from '$lib/server/db/schema.js';
33import { error } from '@sveltejs/kit' ;
44import { eq , and , sql , ne , inArray , desc , gt } from 'drizzle-orm' ;
55import type { Actions } from './$types' ;
6+ import { getProjectLinkType } from '$lib/utils' ;
67
78export async function load ( { locals } ) {
89 if ( ! locals . user ) {
@@ -12,7 +13,7 @@ export async function load({ locals }) {
1213 throw error ( 403 , { message : 'oi get out' } ) ;
1314 }
1415
15- const projects = await getProjects ( [ 'submitted' ] , [ ] , [ ] ) ;
16+ const projects = await getProjects ( [ 'submitted' ] , [ ] , [ ] , [ ] ) ;
1617
1718 const allProjects = await db
1819 . select ( {
@@ -82,14 +83,17 @@ export const actions = {
8283 return parseInt ( userId . toString ( ) ) ;
8384 } ) ;
8485
85- const projects = await getProjects ( statusFilter , projectFilter , userFilter ) ;
86+ const typeFilter = data . getAll ( 'type' ) as string [ ] ;
87+
88+ const projects = await getProjects ( statusFilter , projectFilter , userFilter , typeFilter ) ;
8689
8790 return {
8891 projects,
8992 fields : {
9093 status : statusFilter ,
9194 project : projectFilter ,
92- user : userFilter
95+ user : userFilter ,
96+ type : typeFilter
9397 }
9498 } ;
9599 }
@@ -98,44 +102,63 @@ export const actions = {
98102async function getProjects (
99103 statusFilter : ( typeof project . status . _ . data ) [ ] ,
100104 projectFilter : number [ ] ,
101- userFilter : number [ ]
105+ userFilter : number [ ] ,
106+ typeFilter : string [ ]
102107) {
103- return await db
104- . select ( {
105- project : {
106- id : project . id ,
107- name : project . name ,
108- description : project . description ,
109- url : project . url ,
110- createdAt : project . createdAt ,
111- status : project . status
112- } ,
113- user : {
114- id : user . id ,
115- name : user . name
116- } ,
117- timeSpent : sql < number > `COALESCE(SUM(${ devlog . timeSpent } ), 0)` ,
118- devlogCount : sql < number > `COALESCE(COUNT(${ devlog . id } ), 0)`
119- } )
120- . from ( project )
121- . leftJoin ( devlog , and ( eq ( project . id , devlog . projectId ) , eq ( devlog . deleted , false ) ) )
122- . leftJoin ( user , eq ( user . id , project . userId ) )
123- . where (
124- and (
125- eq ( project . deleted , false ) ,
126- statusFilter . length > 0 ? inArray ( project . status , statusFilter ) : undefined ,
127- projectFilter . length > 0 ? inArray ( project . id , projectFilter ) : undefined ,
128- userFilter . length > 0 ? inArray ( project . userId , userFilter ) : undefined
108+ return (
109+ await db
110+ . select ( {
111+ project : {
112+ id : project . id ,
113+ name : project . name ,
114+ description : project . description ,
115+ url : project . url ,
116+ editorFileType : project . editorFileType ,
117+ editorUrl : project . editorUrl ,
118+ uploadedFileUrl : project . uploadedFileUrl ,
119+ status : project . status ,
120+ createdAt : project . createdAt
121+ } ,
122+ user : {
123+ id : user . id ,
124+ name : user . name
125+ } ,
126+ timeSpent : sql < number > `COALESCE(SUM(${ devlog . timeSpent } ), 0)` ,
127+ devlogCount : sql < number > `COALESCE(COUNT(${ devlog . id } ), 0)`
128+ } )
129+ . from ( project )
130+ . leftJoin ( devlog , and ( eq ( project . id , devlog . projectId ) , eq ( devlog . deleted , false ) ) )
131+ . leftJoin ( user , eq ( user . id , project . userId ) )
132+ . where (
133+ and (
134+ eq ( project . deleted , false ) ,
135+ statusFilter . length > 0 ? inArray ( project . status , statusFilter ) : undefined ,
136+ projectFilter . length > 0 ? inArray ( project . id , projectFilter ) : undefined ,
137+ userFilter . length > 0 ? inArray ( project . userId , userFilter ) : undefined
138+ )
129139 )
130- )
131- . groupBy (
132- project . id ,
133- project . name ,
134- project . description ,
135- project . url ,
136- project . createdAt ,
137- project . status ,
138- user . id ,
139- user . name
140- ) ;
140+ . groupBy (
141+ project . id ,
142+ project . name ,
143+ project . description ,
144+ project . url ,
145+ project . editorFileType ,
146+ project . editorUrl ,
147+ project . uploadedFileUrl ,
148+ project . createdAt ,
149+ project . status ,
150+ user . id ,
151+ user . name
152+ )
153+ ) . filter ( ( item ) =>
154+ typeFilter . length > 0
155+ ? typeFilter . includes (
156+ getProjectLinkType (
157+ item . project . editorFileType ,
158+ item . project . editorUrl ,
159+ item . project . uploadedFileUrl
160+ )
161+ )
162+ : true
163+ ) ;
141164}
0 commit comments