Skip to content

Commit ab9d671

Browse files
committed
Merge remote-tracking branch 'upstream/main'
2 parents 4ef6d5d + e6557d5 commit ab9d671

File tree

12 files changed

+936
-40
lines changed

12 files changed

+936
-40
lines changed

app/(static_misc)/referrals/page.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import Referrals from "@/components/ReferralsPage/Referrals";
2+
3+
export default function ReferralsPage() {
4+
return (
5+
<div className="flex flex-col items-center justify-center">
6+
<Referrals />
7+
</div>
8+
);
9+
}

app/api/referrals/[id]/route.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { NextRequest, NextResponse } from "next/server";
2+
import axios from "axios";
3+
4+
export async function DELETE(
5+
req: NextRequest,
6+
context: { params: Promise<{ id: string }> }, // Ensure params is awaited
7+
) {
8+
try {
9+
// Await params before extracting id
10+
const { id } = await context.params;
11+
12+
// Extract token from cookies
13+
const token = req.cookies.get("token")?.value;
14+
if (!token) {
15+
return NextResponse.json(
16+
{ message: "Unauthorized. Please login to delete a referral." },
17+
{ status: 401 },
18+
);
19+
}
20+
21+
// Send request to backend API
22+
const response = await axios.delete(
23+
`${process.env.NEXT_PUBLIC_API_URL}/api/referrals/${id}`,
24+
{
25+
headers: {
26+
Authorization: `Bearer ${token}`,
27+
},
28+
},
29+
);
30+
31+
return NextResponse.json(response.data, { status: response.status });
32+
} catch (error: any) {
33+
console.error(
34+
"Error deleting referral:",
35+
error?.response?.data || error.message,
36+
);
37+
38+
return NextResponse.json(
39+
{
40+
message: error.response?.data?.message || "Failed to delete referral",
41+
error: error.message,
42+
},
43+
{ status: error.response?.status || 500 },
44+
);
45+
}
46+
}

app/api/referrals/route.ts

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import { NextRequest, NextResponse } from "next/server";
2+
import axios from "axios";
3+
4+
export async function POST(req: NextRequest) {
5+
try {
6+
// Extract token from cookies
7+
const token = req.cookies.get("token")?.value;
8+
if (!token) {
9+
return NextResponse.json(
10+
{ message: "Unauthorized. Please login to create a referral." },
11+
{ status: 401 },
12+
);
13+
}
14+
// Parse request body
15+
const data = await req.json();
16+
17+
// Validate required fields
18+
const { jobDetails, lastApplyDate, numberOfReferrals } = data;
19+
20+
if (
21+
!jobDetails ||
22+
!jobDetails.title ||
23+
!jobDetails.description ||
24+
!jobDetails.company ||
25+
!jobDetails.role ||
26+
!jobDetails.link ||
27+
!lastApplyDate ||
28+
numberOfReferrals === undefined
29+
) {
30+
return NextResponse.json(
31+
{ message: "Missing required fields" },
32+
{ status: 400 },
33+
);
34+
}
35+
if (typeof numberOfReferrals !== "number" || numberOfReferrals < 0) {
36+
return NextResponse.json(
37+
{ message: "Number of referrals must be a non-negative number" },
38+
{ status: 400 },
39+
);
40+
}
41+
// URL validation
42+
const urlPattern = /^https?:\/\/\S+$/;
43+
if (!urlPattern.test(jobDetails.link)) {
44+
return NextResponse.json(
45+
{ message: "Please provide a valid URL for the job link" },
46+
{ status: 400 },
47+
);
48+
}
49+
50+
// Date validation
51+
const applyDate = new Date(lastApplyDate);
52+
const currentDate = new Date();
53+
if (applyDate <= currentDate) {
54+
return NextResponse.json(
55+
{ message: "Last apply date must be in the future" },
56+
{ status: 400 },
57+
);
58+
}
59+
60+
// Send data to backend API
61+
const response = await axios.post(
62+
`${process.env.NEXT_PUBLIC_API_URL}/api/referrals`,
63+
data,
64+
{
65+
headers: {
66+
Authorization: `Bearer ${token}`,
67+
"Content-Type": "application/json",
68+
},
69+
},
70+
);
71+
72+
return NextResponse.json(response.data, { status: response.status });
73+
} catch (error: any) {
74+
console.error(
75+
"Error creating referral:",
76+
error?.response?.data || error.message,
77+
);
78+
79+
return NextResponse.json(
80+
{
81+
message: error.response?.data?.message || "Failed to create referral",
82+
error: error.message,
83+
},
84+
{ status: error.response?.status || 500 },
85+
);
86+
}
87+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { NextRequest, NextResponse } from "next/server";
2+
import axios from "axios";
3+
4+
export async function GET(
5+
req: NextRequest,
6+
context: { params: Promise<{ userId: string }> }, // Ensure params is awaited
7+
) {
8+
try {
9+
// Await params before extracting userId
10+
const { userId } = await context.params;
11+
12+
// Extract token from cookies
13+
const token = req.cookies.get("token")?.value;
14+
if (!token) {
15+
return NextResponse.json(
16+
{ message: "Unauthorized. Please login to view referrals." },
17+
{ status: 401 },
18+
);
19+
}
20+
21+
// Send request to backend API
22+
const response = await axios.get(
23+
`${process.env.NEXT_PUBLIC_API_URL}/api/referrals/user/${userId}`,
24+
{
25+
headers: {
26+
Authorization: `Bearer ${token}`,
27+
},
28+
},
29+
);
30+
31+
return NextResponse.json(response.data, { status: response.status });
32+
} catch (error: any) {
33+
console.error(
34+
"Error fetching user referrals:",
35+
error?.response?.data || error.message,
36+
);
37+
38+
return NextResponse.json(
39+
{
40+
message:
41+
error.response?.data?.message || "Failed to fetch user referrals",
42+
error: error.message,
43+
},
44+
{ status: error.response?.status || 500 },
45+
);
46+
}
47+
}

components/AlumniDetailsFormPage/AlumniDetails.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,6 @@ export function AlumniDetailsForm() {
257257
const alumniMutation = useMutation({
258258
mutationFn: async (data: AlumniDetailsPayload) => {
259259
try {
260-
console.log("IM here");
261-
console.log(data);
262260
const response = await axiosInstance.post("/alumnidetails", data, {
263261
headers: {
264262
"Content-Type": "application/json",

0 commit comments

Comments
 (0)