This commit is contained in:
@@ -1,14 +1,7 @@
|
||||
import type { APIRoute } from "astro";
|
||||
import { db } from "../../../db";
|
||||
import {
|
||||
timeEntries,
|
||||
members,
|
||||
users,
|
||||
clients,
|
||||
tags,
|
||||
timeEntryTags,
|
||||
} from "../../../db/schema";
|
||||
import { eq, and, gte, lte, desc, inArray } from "drizzle-orm";
|
||||
import { timeEntries, members, users, clients, tags } from "../../../db/schema";
|
||||
import { eq, and, gte, lte, desc } from "drizzle-orm";
|
||||
|
||||
export const GET: APIRoute = async ({ request, locals, cookies }) => {
|
||||
const user = locals.user;
|
||||
@@ -114,37 +107,16 @@ export const GET: APIRoute = async ({ request, locals, cookies }) => {
|
||||
entry: timeEntries,
|
||||
user: users,
|
||||
client: clients,
|
||||
tag: tags,
|
||||
})
|
||||
.from(timeEntries)
|
||||
.innerJoin(users, eq(timeEntries.userId, users.id))
|
||||
.innerJoin(clients, eq(timeEntries.clientId, clients.id))
|
||||
.leftJoin(tags, eq(timeEntries.tagId, tags.id))
|
||||
.where(and(...conditions))
|
||||
.orderBy(desc(timeEntries.startTime))
|
||||
.all();
|
||||
|
||||
// Fetch tags for these entries
|
||||
const entryIds = entries.map((e) => e.entry.id);
|
||||
const tagsMap = new Map<string, string[]>();
|
||||
|
||||
if (entryIds.length > 0) {
|
||||
const entryTags = await db
|
||||
.select({
|
||||
entryId: timeEntryTags.timeEntryId,
|
||||
tagName: tags.name,
|
||||
})
|
||||
.from(timeEntryTags)
|
||||
.innerJoin(tags, eq(timeEntryTags.tagId, tags.id))
|
||||
.where(inArray(timeEntryTags.timeEntryId, entryIds))
|
||||
.all();
|
||||
|
||||
for (const tag of entryTags) {
|
||||
if (!tagsMap.has(tag.entryId)) {
|
||||
tagsMap.set(tag.entryId, []);
|
||||
}
|
||||
tagsMap.get(tag.entryId)!.push(tag.tagName);
|
||||
}
|
||||
}
|
||||
|
||||
// Generate CSV
|
||||
const headers = [
|
||||
"Date",
|
||||
@@ -153,7 +125,7 @@ export const GET: APIRoute = async ({ request, locals, cookies }) => {
|
||||
"Duration (h)",
|
||||
"Member",
|
||||
"Client",
|
||||
"Tags",
|
||||
"Tag",
|
||||
"Description",
|
||||
];
|
||||
const rows = entries.map((e) => {
|
||||
@@ -165,7 +137,7 @@ export const GET: APIRoute = async ({ request, locals, cookies }) => {
|
||||
duration = (end.getTime() - start.getTime()) / (1000 * 60 * 60); // Hours
|
||||
}
|
||||
|
||||
const tagsStr = tagsMap.get(e.entry.id)?.join("; ") || "";
|
||||
const tagsStr = e.tag?.name || "";
|
||||
|
||||
return [
|
||||
start.toLocaleDateString(),
|
||||
|
||||
Reference in New Issue
Block a user