@@ -21,6 +21,23 @@ type DocumentVersionRow = {
2121 createdAt : number ;
2222} ;
2323
24+ type ProjectWithLatestVersionRow = ProjectRow & (
25+ | {
26+ versionId : null ;
27+ versionProjectId : null ;
28+ versionContent : null ;
29+ versionNote : null ;
30+ versionCreatedAt : null ;
31+ }
32+ | {
33+ versionId : number ;
34+ versionProjectId : number ;
35+ versionContent : string ;
36+ versionNote : string | null ;
37+ versionCreatedAt : number ;
38+ }
39+ ) ;
40+
2441export type Project = {
2542 id : number ;
2643 name : string ;
@@ -242,16 +259,49 @@ export function getProjectWithVersionsByShareToken(shareToken: string): ProjectW
242259export function getProjectsWithLatestVersion ( ) : ProjectWithVersions [ ] {
243260 const projects = getDb ( )
244261 . prepare ( `
245- SELECT "id", "name", "slug", "shareToken", "allowPublicVersionHistory", "createdAt", "updatedAt"
246- FROM "Project"
247- ORDER BY "createdAt" DESC
262+ SELECT
263+ p."id",
264+ p."name",
265+ p."slug",
266+ p."shareToken",
267+ p."allowPublicVersionHistory",
268+ p."createdAt",
269+ p."updatedAt",
270+ v."id" AS "versionId",
271+ v."projectId" AS "versionProjectId",
272+ v."content" AS "versionContent",
273+ v."note" AS "versionNote",
274+ v."createdAt" AS "versionCreatedAt"
275+ FROM "Project" p
276+ LEFT JOIN "DocumentVersion" v ON v."id" = (
277+ SELECT latest."id"
278+ FROM "DocumentVersion" latest
279+ WHERE latest."projectId" = p."id"
280+ ORDER BY latest."createdAt" DESC
281+ LIMIT 1
282+ )
283+ ORDER BY p."createdAt" DESC
248284 ` )
249- . all ( ) as ProjectRow [ ] ;
250-
251- return projects . map ( ( project ) => ( {
252- ...toProject ( project ) ,
253- versions : getProjectVersions ( project . id , 1 )
254- } ) ) ;
285+ . all ( ) as ProjectWithLatestVersionRow [ ] ;
286+
287+ return projects . map ( ( project ) => {
288+ const versions = project . versionId === null
289+ ? [ ]
290+ : [
291+ toDocumentVersion ( {
292+ id : project . versionId ,
293+ projectId : project . versionProjectId ,
294+ content : project . versionContent ,
295+ note : project . versionNote ,
296+ createdAt : project . versionCreatedAt
297+ } )
298+ ] ;
299+
300+ return {
301+ ...toProject ( project ) ,
302+ versions
303+ } ;
304+ } ) ;
255305}
256306
257307export function getProjectWithVersionsById ( id : number ) : ProjectWithVersions | null {
0 commit comments