This commit is contained in:
72
src/routes/+page.server.ts
Normal file
72
src/routes/+page.server.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
import { redirect } from '@sveltejs/kit';
|
||||
import type { PageServerLoad } from './$types';
|
||||
import { db } from '$lib/server/db';
|
||||
import { project, task, issue } from '$lib/server/db/schema';
|
||||
import { desc, eq, sql } from 'drizzle-orm';
|
||||
|
||||
export const load: PageServerLoad = async (event) => {
|
||||
if (!event.locals.user) {
|
||||
throw redirect(302, '/auth/login');
|
||||
}
|
||||
|
||||
const projects = await db
|
||||
.select({
|
||||
id: project.id,
|
||||
name: project.name,
|
||||
description: project.description,
|
||||
status: project.status,
|
||||
taskCount: sql<number>`(
|
||||
select count(*) from ${task} where ${task.projectId} = ${project.id}
|
||||
)`.mapWith(Number),
|
||||
doneCount: sql<number>`(
|
||||
select count(*) from ${task}
|
||||
where ${task.projectId} = ${project.id} and ${task.status} = 'done'
|
||||
)`.mapWith(Number),
|
||||
issueCount: sql<number>`(
|
||||
select count(*) from ${issue} where ${issue.projectId} = ${project.id}
|
||||
)`.mapWith(Number)
|
||||
})
|
||||
.from(project)
|
||||
.where(eq(project.ownerId, event.locals.user.id))
|
||||
.orderBy(desc(project.updatedAt));
|
||||
|
||||
const normalizedProjects = projects.map((item) => ({
|
||||
...item,
|
||||
progress: item.taskCount ? Math.round((item.doneCount / item.taskCount) * 100) : 0
|
||||
}));
|
||||
|
||||
const recentTasks = await db
|
||||
.select({
|
||||
id: task.id,
|
||||
title: task.title,
|
||||
status: task.status,
|
||||
priority: task.priority,
|
||||
projectId: task.projectId
|
||||
})
|
||||
.from(task)
|
||||
.innerJoin(project, eq(task.projectId, project.id))
|
||||
.where(eq(project.ownerId, event.locals.user.id))
|
||||
.orderBy(desc(task.updatedAt))
|
||||
.limit(5);
|
||||
|
||||
const recentIssues = await db
|
||||
.select({
|
||||
id: issue.id,
|
||||
title: issue.title,
|
||||
state: issue.state,
|
||||
provider: issue.provider,
|
||||
projectId: issue.projectId
|
||||
})
|
||||
.from(issue)
|
||||
.innerJoin(project, eq(issue.projectId, project.id))
|
||||
.where(eq(project.ownerId, event.locals.user.id))
|
||||
.orderBy(desc(issue.updatedAt))
|
||||
.limit(5);
|
||||
|
||||
return {
|
||||
user: event.locals.user,
|
||||
projects: normalizedProjects,
|
||||
recentTasks,
|
||||
recentIssues
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user