Skip to content

Commit b3a76b0

Browse files
committed
fix: make admin panel override hours
1 parent 2836fab commit b3a76b0

File tree

3 files changed

+14
-9
lines changed

3 files changed

+14
-9
lines changed

lark-ui/src/routes/admin/+page.svelte

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,13 +418,14 @@ async function recalculateAllProjectsHours() {
418418
const draft = submissionDrafts[submission.submissionId];
419419
const userFeedback = draft?.userFeedback || '';
420420
const hoursJustification = draft?.hoursJustification || '';
421+
const approvedHours = draft?.approvedHours ? parseFloat(draft.approvedHours) : null;
421422
422423
try {
423424
const response = await fetch(`${apiUrl}/api/admin/submissions/${submission.submissionId}/quick-approve`, {
424425
method: 'POST',
425426
headers: { 'Content-Type': 'application/json' },
426427
credentials: 'include',
427-
body: JSON.stringify({ userFeedback, hoursJustification }),
428+
body: JSON.stringify({ userFeedback, hoursJustification, approvedHours }),
428429
});
429430
430431
if (!response.ok) {

owl-api/src/admin/admin.controller.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ export class AdminController {
4242
@Roles(Role.Admin)
4343
async quickApproveSubmission(
4444
@Param('id', ParseIntPipe) id: number,
45-
@Body() body: { userFeedback?: string; hoursJustification?: string },
45+
@Body() body: { userFeedback?: string; hoursJustification?: string; approvedHours?: number },
4646
@Req() req: Request,
4747
) {
48-
return this.adminService.quickApproveSubmission(id, req.user.userId, body.hoursJustification, body.userFeedback);
48+
return this.adminService.quickApproveSubmission(id, req.user.userId, body.hoursJustification, body.userFeedback, body.approvedHours);
4949
}
5050

5151
@Put('projects/:id/unlock')

owl-api/src/admin/admin.service.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ export class AdminService {
310310
return updatedSubmission;
311311
}
312312

313-
async quickApproveSubmission(submissionId: number, adminUserId: number, providedJustification?: string, userFeedback?: string) {
313+
async quickApproveSubmission(submissionId: number, adminUserId: number, providedJustification?: string, userFeedback?: string, providedApprovedHours?: number) {
314314
const submission = await this.prisma.submission.findUnique({
315315
where: { submissionId },
316316
include: {
@@ -326,13 +326,17 @@ export class AdminService {
326326
throw new NotFoundException('Submission not found');
327327
}
328328

329+
// Use provided approved hours if available, otherwise fall back to hackatime hours
329330
const hackatimeHours = submission.project.nowHackatimeHours || 0;
330-
const autoJustification = `Quick approved with ${hackatimeHours.toFixed(1)} Hackatime hours tracked on Midnight project.`;
331+
const approvedHours = providedApprovedHours !== undefined && providedApprovedHours !== null
332+
? providedApprovedHours
333+
: hackatimeHours;
334+
const autoJustification = `Quick approved with ${approvedHours.toFixed(1)} hours.`;
331335
const adminHoursJustification = providedJustification || autoJustification;
332336

333337
const updateData: any = {
334338
approvalStatus: 'approved',
335-
approvedHours: hackatimeHours,
339+
approvedHours: approvedHours,
336340
hoursJustification: userFeedback || '',
337341
reviewedBy: adminUserId.toString(),
338342
reviewedAt: new Date(),
@@ -360,7 +364,7 @@ export class AdminService {
360364
await this.prisma.project.update({
361365
where: { projectId: submission.projectId },
362366
data: {
363-
approvedHours: hackatimeHours,
367+
approvedHours: approvedHours,
364368
hoursJustification: adminHoursJustification,
365369
playableUrl: submission.playableUrl,
366370
repoUrl: submission.repoUrl,
@@ -399,7 +403,7 @@ export class AdminService {
399403
playableUrl: playableUrl,
400404
repoUrl: repoUrl,
401405
screenshotUrl: submission.screenshotUrl || submission.project.screenshotUrl || '',
402-
approvedHours: hackatimeHours,
406+
approvedHours: approvedHours,
403407
hoursJustification: adminHoursJustification,
404408
description: submission.description || submission.project.description || undefined,
405409
},
@@ -431,7 +435,7 @@ export class AdminService {
431435
repoUrl: submission.repoUrl || undefined,
432436
screenshotUrl: submission.screenshotUrl || undefined,
433437
description: submission.description || undefined,
434-
approvedHours: hackatimeHours,
438+
approvedHours: approvedHours,
435439
hoursJustification: adminHoursJustification,
436440
});
437441
} catch (error) {

0 commit comments

Comments
 (0)