Skip to content

Commit 67f5e4a

Browse files
authored
Add deadline checks in APIs (#33)
1 parent 4f7222c commit 67f5e4a

13 files changed

Lines changed: 96 additions & 28 deletions

File tree

app/api/config/deadline/route.ts

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
import { NextRequest, NextResponse } from "next/server";
2+
import { REGISTRATION_DEADLINE, RSVP_DEADLINE } from "@/lib/constants";
23

3-
export const dynamic = 'force-dynamic';
4-
5-
// Submission deadline: Extended
6-
const SUBMISSION_DEADLINE = new Date('2026-07-19T10:00:00+05:30');
7-
const RSVP_DEADLINE = new Date('2026-07-21T23:59:00+05:30');
4+
export const dynamic = "force-dynamic";
85

96
/**
107
* GET /api/config/deadline
@@ -14,26 +11,21 @@ const RSVP_DEADLINE = new Date('2026-07-21T23:59:00+05:30');
1411
export async function GET(request: NextRequest) {
1512
try {
1613
const serverTime = new Date();
17-
const isSubmissionExpired = serverTime > SUBMISSION_DEADLINE;
14+
const isSubmissionExpired = serverTime > REGISTRATION_DEADLINE;
1815
const isRsvpExpired = serverTime > RSVP_DEADLINE;
1916

2017
return NextResponse.json({
2118
success: true,
2219
data: {
23-
deadline: SUBMISSION_DEADLINE.toISOString(),
20+
deadline: REGISTRATION_DEADLINE.toISOString(),
2421
serverTime: serverTime.toISOString(),
2522
isExpired: isSubmissionExpired,
26-
deadlineIST: "July 19, 2026, 10:00:00 AM IST",
2723
rsvpDeadline: RSVP_DEADLINE.toISOString(),
2824
isRsvpExpired,
29-
rsvpDeadlineIST: "July 21, 2026, 11:59:00 PM IST",
3025
},
3126
});
3227
} catch (error: any) {
3328
console.error("Deadline config error:", error);
34-
return NextResponse.json(
35-
{ message: "Server error" },
36-
{ status: 500 }
37-
);
29+
return NextResponse.json({ message: "Server error" }, { status: 500 });
3830
}
3931
}

app/api/registration/route.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import dbConnect from "@/lib/db";
1212
import User, { IUser } from "@/models/User";
1313
import { checkRateLimit, getClientIp } from "@/lib/rate-limit";
1414
import { verifyRecaptcha } from "@/lib/recaptcha";
15+
import { isRegistrationClosed } from "@/lib/constants";
1516

1617
// Utility functions for format validation
1718
const validateEmail = (email: string) =>
@@ -219,8 +220,7 @@ export async function POST(request: Request) {
219220
);
220221
}
221222

222-
const REGISTRATION_DEADLINE = new Date("2026-07-19T10:00:00+05:30");
223-
if (new Date() > REGISTRATION_DEADLINE) {
223+
if (isRegistrationClosed()) {
224224
return NextResponse.json(
225225
{
226226
message:

app/api/team/create/route.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { NextRequest, NextResponse } from "next/server";
2-
import { authenticateUser, createAuthErrorResponse, requireEmailVerified } from "@/lib/middleware/auth";
2+
import { authenticateUser, createAuthErrorResponse, requireEmailVerified, requireRegistrationOpen } from "@/lib/middleware/auth";
33
import dbConnect from "@/lib/db";
44
import User from "@/models/User";
55
import Team from "@/models/Team";
@@ -78,6 +78,11 @@ export async function POST(request: NextRequest) {
7878
return createAuthErrorResponse(emailError);
7979
}
8080

81+
const deadlineError = requireRegistrationOpen();
82+
if (deadlineError) {
83+
return createAuthErrorResponse(deadlineError);
84+
}
85+
8186
const body = await request.json();
8287
const { teamName, isLooking = false } = body;
8388

app/api/team/join-request/[requestId]/route.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { NextRequest, NextResponse } from "next/server";
2-
import { authenticateUser } from "@/lib/middleware/auth";
2+
import { authenticateUser, createAuthErrorResponse, requireRegistrationOpen } from "@/lib/middleware/auth";
33
import dbConnect from "@/lib/db";
44
import User from "@/models/User";
55
import Team from "@/models/Team";
@@ -20,6 +20,11 @@ export async function PUT(
2020
);
2121
}
2222

23+
const deadlineError = requireRegistrationOpen();
24+
if (deadlineError) {
25+
return createAuthErrorResponse(deadlineError);
26+
}
27+
2328
const body = await request.json();
2429
const { action } = body;
2530

@@ -185,6 +190,11 @@ export async function DELETE(
185190
);
186191
}
187192

193+
const deadlineError = requireRegistrationOpen();
194+
if (deadlineError) {
195+
return createAuthErrorResponse(deadlineError);
196+
}
197+
188198
await dbConnect();
189199

190200
const joinRequest = await TeamJoinRequest.findById(params.requestId);

app/api/team/join-request/route.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { NextRequest, NextResponse } from "next/server";
2-
import { authenticateUser, createAuthErrorResponse, requireEmailVerified } from "@/lib/middleware/auth";
2+
import { authenticateUser, createAuthErrorResponse, requireEmailVerified, requireRegistrationOpen } from "@/lib/middleware/auth";
33
import dbConnect from "@/lib/db";
44
import User from "@/models/User";
55
import Team from "@/models/Team";
@@ -22,6 +22,11 @@ export async function POST(request: NextRequest) {
2222
return createAuthErrorResponse(emailError);
2323
}
2424

25+
const deadlineError = requireRegistrationOpen();
26+
if (deadlineError) {
27+
return createAuthErrorResponse(deadlineError);
28+
}
29+
2530
const body = await request.json();
2631
const { teamCode, type = 'request', email } = body;
2732

app/api/team/join/route.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { NextRequest, NextResponse } from "next/server";
2-
import { authenticateUser, createAuthErrorResponse, requireEmailVerified } from "@/lib/middleware/auth";
2+
import { authenticateUser, createAuthErrorResponse, requireEmailVerified, requireRegistrationOpen } from "@/lib/middleware/auth";
33
import dbConnect from "@/lib/db";
44
import User from "@/models/User";
55
import Team from "@/models/Team";
@@ -51,6 +51,11 @@ export async function PUT(request: NextRequest) {
5151
return createAuthErrorResponse(emailError);
5252
}
5353

54+
const deadlineError = requireRegistrationOpen();
55+
if (deadlineError) {
56+
return createAuthErrorResponse(deadlineError);
57+
}
58+
5459
const body = await request.json();
5560
const { teamCode } = body;
5661

app/api/team/leave/route.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { NextRequest, NextResponse } from "next/server";
2-
import { authenticateUser, createAuthErrorResponse, requireEmailVerified } from "@/lib/middleware/auth";
2+
import { authenticateUser, createAuthErrorResponse, requireEmailVerified, requireRegistrationOpen } from "@/lib/middleware/auth";
33
import dbConnect from "@/lib/db";
44
import User from "@/models/User";
55
import Team from "@/models/Team";
@@ -41,6 +41,11 @@ export async function PUT(request: NextRequest) {
4141
return createAuthErrorResponse(emailError);
4242
}
4343

44+
const deadlineError = requireRegistrationOpen();
45+
if (deadlineError) {
46+
return createAuthErrorResponse(deadlineError);
47+
}
48+
4449
const body = await request.json();
4550
const { setLookingStatus = false } = body;
4651

app/api/team/remove-member/route.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { NextRequest, NextResponse } from "next/server";
2-
import { authenticateUser, createAuthErrorResponse, requireAdmin, requireEmailVerified } from "@/lib/middleware/auth";
2+
import { authenticateUser, createAuthErrorResponse, requireAdmin, requireEmailVerified, requireRegistrationOpen } from "@/lib/middleware/auth";
33
import dbConnect from "@/lib/db";
44
import User from "@/models/User";
55
import Team from "@/models/Team";
@@ -44,6 +44,14 @@ export async function PUT(request: NextRequest) {
4444
return createAuthErrorResponse(emailError);
4545
}
4646

47+
// Admins keep their override after the deadline; participants do not.
48+
if (authResult.user.role !== 'admin') {
49+
const deadlineError = requireRegistrationOpen();
50+
if (deadlineError) {
51+
return createAuthErrorResponse(deadlineError);
52+
}
53+
}
54+
4755
const body = await request.json();
4856
const { teamCode, memberId, setTheirLookingStatus = false } = body;
4957

app/api/team/transfer-ownership/route.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { NextRequest, NextResponse } from "next/server";
2-
import { authenticateUser, createAuthErrorResponse, requireEmailVerified } from "@/lib/middleware/auth";
2+
import { authenticateUser, createAuthErrorResponse, requireEmailVerified, requireRegistrationOpen } from "@/lib/middleware/auth";
33
import dbConnect from "@/lib/db";
44
import User from "@/models/User";
55
import Team from "@/models/Team";
@@ -22,6 +22,11 @@ export async function PUT(request: NextRequest) {
2222
return createAuthErrorResponse(emailError);
2323
}
2424

25+
const deadlineError = requireRegistrationOpen();
26+
if (deadlineError) {
27+
return createAuthErrorResponse(deadlineError);
28+
}
29+
2530
const { newLeadId, teamCode } = await request.json();
2631

2732
if (!newLeadId || !teamCode) {

app/api/user/register/route.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import User, { IUser } from "@/models/User";
1010
import { verifyRecaptcha } from "@/lib/recaptcha";
1111
import { checkRateLimit, getClientIp } from "@/lib/rate-limit";
1212
import { getAuth as getAdminAuth } from "@/lib/firebase-admin";
13+
import { isRegistrationClosed } from "@/lib/constants";
1314

1415
// Configure route
1516
export const dynamic = "force-dynamic";
@@ -85,8 +86,7 @@ export async function POST(request: Request) {
8586
);
8687
}
8788

88-
const REGISTRATION_DEADLINE = new Date("2026-07-19T10:00:00+05:30");
89-
if (new Date() > REGISTRATION_DEADLINE) {
89+
if (isRegistrationClosed()) {
9090
return NextResponse.json(
9191
{
9292
success: false,

0 commit comments

Comments
 (0)