fix job application
This commit is contained in:
@@ -1,134 +1,142 @@
|
||||
'use server'
|
||||
import { signOut } from "@/auth";
|
||||
import { db, applications, jobs, students, resumes } from "@workspace/db";
|
||||
import { eq, and } from "@workspace/db/drizzle";
|
||||
import { revalidatePath } from "next/cache";
|
||||
'use server';
|
||||
import { signOut } from '@/auth';
|
||||
import { db, applications, jobs, students, resumes } from '@workspace/db';
|
||||
import { eq, and } from '@workspace/db/drizzle';
|
||||
import { revalidatePath } from 'next/cache';
|
||||
|
||||
export async function signOutAction() {
|
||||
await signOut();
|
||||
await signOut();
|
||||
}
|
||||
|
||||
export async function applyForJob(jobId: number, studentId: number, resumeId: number) {
|
||||
try {
|
||||
// Check if student has already applied for this job
|
||||
const existingApplication = await db.query.applications.findFirst({
|
||||
where: and(
|
||||
eq(applications.jobId, jobId),
|
||||
eq(applications.studentId, studentId)
|
||||
)
|
||||
});
|
||||
try {
|
||||
// Check if student has already applied for this job
|
||||
const existingApplication = await db.query.applications.findFirst({
|
||||
where: and(eq(applications.jobId, jobId), eq(applications.studentId, studentId)),
|
||||
});
|
||||
|
||||
if (existingApplication) {
|
||||
return { success: false, error: "You have already applied for this job" };
|
||||
}
|
||||
|
||||
// Create new application
|
||||
await db.insert(applications).values({
|
||||
jobId,
|
||||
studentId,
|
||||
resumeId,
|
||||
status: 'pending'
|
||||
});
|
||||
|
||||
revalidatePath('/applications');
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
console.error("Error applying for job:", error);
|
||||
return { success: false, error: "Failed to apply for job" };
|
||||
if (existingApplication) {
|
||||
return { success: false, error: 'You have already applied for this job' };
|
||||
}
|
||||
|
||||
// Create new application
|
||||
await db.insert(applications).values({
|
||||
jobId,
|
||||
studentId,
|
||||
resumeId,
|
||||
status: 'pending',
|
||||
});
|
||||
|
||||
revalidatePath('/applications');
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
console.error('Error applying for job:', error);
|
||||
return { success: false, error: 'Failed to apply for job' };
|
||||
}
|
||||
}
|
||||
|
||||
export async function getStudentApplications(studentId: number) {
|
||||
try {
|
||||
const studentApplications = await db.query.applications.findMany({
|
||||
where: eq(applications.studentId, studentId),
|
||||
with: {
|
||||
job: {
|
||||
with: {
|
||||
company: true
|
||||
}
|
||||
},
|
||||
resume: true
|
||||
}
|
||||
});
|
||||
try {
|
||||
const studentApplications = await db.query.applications.findMany({
|
||||
where: eq(applications.studentId, studentId),
|
||||
with: {
|
||||
job: {
|
||||
with: {
|
||||
company: true,
|
||||
},
|
||||
},
|
||||
resume: true,
|
||||
},
|
||||
});
|
||||
|
||||
return { success: true, applications: studentApplications };
|
||||
} catch (error) {
|
||||
console.error("Error fetching student applications:", error);
|
||||
return { success: false, error: "Failed to fetch applications" };
|
||||
}
|
||||
return { success: true, applications: studentApplications };
|
||||
} catch (error) {
|
||||
console.error('Error fetching student applications:', error);
|
||||
return { success: false, error: 'Failed to fetch applications' };
|
||||
}
|
||||
}
|
||||
|
||||
export async function getStudentProfile(studentId: number) {
|
||||
try {
|
||||
const student = await db.query.students.findFirst({
|
||||
where: eq(students.id, studentId),
|
||||
with: {
|
||||
grades: true,
|
||||
resumes: true,
|
||||
internships: true
|
||||
}
|
||||
});
|
||||
try {
|
||||
const student = await db.query.students.findFirst({
|
||||
where: eq(students.id, studentId),
|
||||
with: {
|
||||
grades: true,
|
||||
resumes: true,
|
||||
internships: true,
|
||||
},
|
||||
});
|
||||
|
||||
return { success: true, student };
|
||||
} catch (error) {
|
||||
console.error("Error fetching student profile:", error);
|
||||
return { success: false, error: "Failed to fetch student profile" };
|
||||
}
|
||||
return { success: true, student };
|
||||
} catch (error) {
|
||||
console.error('Error fetching student profile:', error);
|
||||
return { success: false, error: 'Failed to fetch student profile' };
|
||||
}
|
||||
}
|
||||
|
||||
export async function updateStudentProfile(studentId: number, data: any) {
|
||||
try {
|
||||
await db.update(students)
|
||||
.set({
|
||||
...data,
|
||||
updatedAt: new Date()
|
||||
})
|
||||
.where(eq(students.id, studentId));
|
||||
try {
|
||||
await db
|
||||
.update(students)
|
||||
.set({
|
||||
...data,
|
||||
updatedAt: new Date(),
|
||||
})
|
||||
.where(eq(students.id, studentId));
|
||||
|
||||
revalidatePath('/profile');
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
console.error("Error updating student profile:", error);
|
||||
return { success: false, error: "Failed to update profile" };
|
||||
}
|
||||
revalidatePath('/profile');
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
console.error('Error updating student profile:', error);
|
||||
return { success: false, error: 'Failed to update profile' };
|
||||
}
|
||||
}
|
||||
|
||||
export async function getAvailableJobs() {
|
||||
try {
|
||||
const availableJobs = await db.query.jobs.findMany({
|
||||
where: eq(jobs.active, true),
|
||||
with: {
|
||||
company: true
|
||||
}
|
||||
});
|
||||
try {
|
||||
const availableJobs = await db.query.jobs.findMany({
|
||||
where: eq(jobs.active, true),
|
||||
with: {
|
||||
company: true,
|
||||
},
|
||||
});
|
||||
|
||||
return { success: true, jobs: availableJobs };
|
||||
} catch (error) {
|
||||
console.error("Error fetching available jobs:", error);
|
||||
return { success: false, error: "Failed to fetch jobs" };
|
||||
}
|
||||
return { success: true, jobs: availableJobs };
|
||||
} catch (error) {
|
||||
console.error('Error fetching available jobs:', error);
|
||||
return { success: false, error: 'Failed to fetch jobs' };
|
||||
}
|
||||
}
|
||||
|
||||
export async function getFeaturedCompanies() {
|
||||
try {
|
||||
const companies = await db.query.companies.findMany({
|
||||
with: {
|
||||
jobs: {
|
||||
where: eq(jobs.active, true)
|
||||
}
|
||||
}
|
||||
});
|
||||
try {
|
||||
const companies = await db.query.companies.findMany({
|
||||
with: {
|
||||
jobs: {
|
||||
where: eq(jobs.active, true),
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Filter companies with active jobs and sort by number of jobs
|
||||
const companiesWithJobs = companies
|
||||
.filter(company => company.jobs.length > 0)
|
||||
.sort((a, b) => b.jobs.length - a.jobs.length)
|
||||
.slice(0, 6); // Top 6 companies
|
||||
// Filter companies with active jobs and sort by number of jobs
|
||||
const companiesWithJobs = companies
|
||||
.filter((company) => company.jobs.length > 0)
|
||||
.sort((a, b) => b.jobs.length - a.jobs.length)
|
||||
.slice(0, 6); // Top 6 companies
|
||||
|
||||
return { success: true, companies: companiesWithJobs };
|
||||
} catch (error) {
|
||||
console.error("Error fetching featured companies:", error);
|
||||
return { success: false, error: "Failed to fetch companies" };
|
||||
}
|
||||
}
|
||||
return { success: true, companies: companiesWithJobs };
|
||||
} catch (error) {
|
||||
console.error('Error fetching featured companies:', error);
|
||||
return { success: false, error: 'Failed to fetch companies' };
|
||||
}
|
||||
}
|
||||
|
||||
export async function getResumes(studentId: number) {
|
||||
try {
|
||||
const r = await db.select().from(resumes).where(eq(resumes.studentId, studentId));
|
||||
return { success: true, resumes: r };
|
||||
} catch (error) {
|
||||
console.error('Error fetching resumes for studentId:', studentId, '\n', error);
|
||||
return { success: false, error: 'Failed to fetch resumes' };
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user