@@ -3,6 +3,7 @@ import { project, user, devlog } from '$lib/server/db/schema.js';
33import { error } from '@sveltejs/kit' ;
44import { eq , and , sql , ne , inArray } from 'drizzle-orm' ;
55import type { Actions } from './$types' ;
6+ import { getProjectLinkType } from '$lib/utils' ;
67
78export async function load ( { locals } ) {
89 if ( ! locals . user ) {
@@ -63,7 +64,6 @@ export const actions = {
6364
6465 const typeFilter = data . getAll ( 'type' ) as string [ ] ;
6566
66-
6767 const projects = await getProjects ( statusFilter , projectFilter , userFilter , typeFilter ) ;
6868
6969 return {
@@ -84,48 +84,60 @@ async function getProjects(
8484 userFilter : number [ ] ,
8585 typeFilter : string [ ]
8686) {
87- return await db
88- . select ( {
89- project : {
90- id : project . id ,
91- name : project . name ,
92- description : project . description ,
93- url : project . url ,
94- editorFileType : project . editorFileType ,
95- editorUrl : project . editorUrl ,
96- uploadedFileUrl : project . uploadedFileUrl ,
97- status : project . status ,
98- createdAt : project . createdAt
99- } ,
100- user : {
101- id : user . id ,
102- name : user . name
103- } ,
104- timeSpent : sql < number > `COALESCE(SUM(${ devlog . timeSpent } ), 0)` ,
105- devlogCount : sql < number > `COALESCE(COUNT(${ devlog . id } ), 0)`
106- } )
107- . from ( project )
108- . leftJoin ( devlog , and ( eq ( project . id , devlog . projectId ) , eq ( devlog . deleted , false ) ) )
109- . leftJoin ( user , eq ( user . id , project . userId ) )
110- . where (
111- and (
112- eq ( project . deleted , false ) ,
113- statusFilter . length > 0 ? inArray ( project . status , statusFilter ) : undefined ,
114- projectFilter . length > 0 ? inArray ( project . id , projectFilter ) : undefined ,
115- userFilter . length > 0 ? inArray ( project . userId , userFilter ) : undefined
87+ return (
88+ await db
89+ . select ( {
90+ project : {
91+ id : project . id ,
92+ name : project . name ,
93+ description : project . description ,
94+ url : project . url ,
95+ editorFileType : project . editorFileType ,
96+ editorUrl : project . editorUrl ,
97+ uploadedFileUrl : project . uploadedFileUrl ,
98+ status : project . status ,
99+ createdAt : project . createdAt
100+ } ,
101+ user : {
102+ id : user . id ,
103+ name : user . name
104+ } ,
105+ timeSpent : sql < number > `COALESCE(SUM(${ devlog . timeSpent } ), 0)` ,
106+ devlogCount : sql < number > `COALESCE(COUNT(${ devlog . id } ), 0)`
107+ } )
108+ . from ( project )
109+ . leftJoin ( devlog , and ( eq ( project . id , devlog . projectId ) , eq ( devlog . deleted , false ) ) )
110+ . leftJoin ( user , eq ( user . id , project . userId ) )
111+ . where (
112+ and (
113+ eq ( project . deleted , false ) ,
114+ statusFilter . length > 0 ? inArray ( project . status , statusFilter ) : undefined ,
115+ projectFilter . length > 0 ? inArray ( project . id , projectFilter ) : undefined ,
116+ userFilter . length > 0 ? inArray ( project . userId , userFilter ) : undefined
117+ )
118+ )
119+ . groupBy (
120+ project . id ,
121+ project . name ,
122+ project . description ,
123+ project . url ,
124+ project . editorFileType ,
125+ project . editorUrl ,
126+ project . uploadedFileUrl ,
127+ project . createdAt ,
128+ project . status ,
129+ user . id ,
130+ user . name
116131 )
117- )
118- . groupBy (
119- project . id ,
120- project . name ,
121- project . description ,
122- project . url ,
123- project . editorFileType ,
124- project . editorUrl ,
125- project . uploadedFileUrl ,
126- project . createdAt ,
127- project . status ,
128- user . id ,
129- user . name
130- ) ;
132+ ) . filter ( ( item ) =>
133+ typeFilter . length > 0
134+ ? typeFilter . includes (
135+ getProjectLinkType (
136+ item . project . editorFileType ,
137+ item . project . editorUrl ,
138+ item . project . uploadedFileUrl
139+ )
140+ )
141+ : true
142+ ) ;
131143}
0 commit comments