Spaces:
Running
Running
| import Interview from "../models/interviews.models.js"; | |
| import { expressRepre } from "@vashuthegreat/vexpress"; | |
| import ApiError from "../utils/ApiError.js"; | |
| import asyncHandler from "../utils/asyncHandler.js"; | |
| import ApiResponse from "../utils/ApiResponse.js"; | |
| // import { Query } from "mongoose"; | |
| import { Request, Response } from "express"; | |
| import logger from "../logger/create.logger.js"; | |
| export const createInterview = expressRepre( | |
| { | |
| summary: "schedule an interview", | |
| body: { | |
| companyName: "VTech", | |
| topic: "AIML", | |
| job_Role: "AI Engineer", | |
| time: "2026-01-14 10:00:00", | |
| status: "pending" | |
| }, | |
| response: "interview scheduled" | |
| }, | |
| asyncHandler(async (req:Request, res:Response) => { | |
| const { companyName, topic, job_Role, time, status } = req.body; | |
| const user_id = req.user?._id; | |
| logger.info(`Scheduling interview for user ${user_id} at ${companyName}`); | |
| if (!companyName || !topic || !job_Role || !time || !status) { | |
| throw new ApiError(400, "All fields are required"); | |
| } | |
| const interview = await Interview.findOne({ | |
| user_id, | |
| companyName, | |
| topic, | |
| job_Role, | |
| time | |
| }); | |
| if (interview) { | |
| logger.info("Interview already exists"); | |
| return res | |
| .status(200) | |
| .json(new ApiResponse(200, interview, "Interview already exists")); | |
| } | |
| const newInterview = await Interview.create({ | |
| user_id, | |
| companyName, | |
| topic, | |
| job_Role, | |
| time, | |
| status | |
| }); | |
| logger.info(`Interview created successfully: ${newInterview._id}`); | |
| return res | |
| .status(201) | |
| .json(new ApiResponse(201, newInterview, "Interview created successfully")); | |
| }) | |
| ); | |
| export const updateInterviewStatus = expressRepre( | |
| { | |
| summary: "update interview status", | |
| body: { | |
| id: "69671fa2d697bab6f0176ccc", | |
| status: "live" | |
| }, | |
| response: "interview updated" | |
| }, | |
| asyncHandler(async (req, res) => { | |
| const { id, status } = req.body; | |
| logger.info(`Updating interview ${id} status to ${status}`); | |
| if (!id || !status) { | |
| throw new ApiError(400, "All fields are required"); | |
| } | |
| const interview = await Interview.findByIdAndUpdate( | |
| id, | |
| { status }, | |
| { new: true } | |
| ); | |
| if (!interview) { | |
| throw new ApiError(404, "Interview not found"); | |
| } | |
| res | |
| .status(200) | |
| .json(new ApiResponse(200, interview, "Interview updated successfully")); | |
| }) | |
| ); | |
| export const getUserInterviews = expressRepre( | |
| { | |
| summary: "get user Interviews", | |
| response: "interview fetched" | |
| }, | |
| asyncHandler(async (req, res) => { | |
| const user = req.user; | |
| if (!user) { | |
| throw new ApiError(400, "user required"); | |
| } | |
| logger.info(`Fetching interviews for user: ${user._id}`); | |
| const interview = await Interview.find( | |
| {user_id:user?._id} | |
| ); | |
| if (!interview) { | |
| throw new ApiError(404, "Interviews not found"); | |
| } | |
| res | |
| .status(200) | |
| .json(new ApiResponse(200, interview, "Interview fetched successfully")); | |
| }) | |
| ); | |
| export const getInterviewById = expressRepre( | |
| { | |
| summary: "get interview by id", | |
| query: { | |
| id: "69671fa2d697bab6f0176ccc", | |
| }, | |
| response: "interview " | |
| }, | |
| asyncHandler(async (req, res) => { | |
| const { id } = req.query; | |
| logger.info(`Fetching interview by id: ${id}`); | |
| if (!id ) { | |
| throw new ApiError(400, "All fields are required"); | |
| } | |
| const interview = await Interview.findById(id | |
| ); | |
| if (!interview) { | |
| throw new ApiError(404, "Interview not found"); | |
| } | |
| res | |
| .status(200) | |
| .json(new ApiResponse(200, interview, "Interview fetched successfully")); | |
| }) | |
| ); | |
| export const deleteInterview = expressRepre( | |
| { | |
| summary: "delete an interview", | |
| params: { | |
| id: "69671fa2d697bab6f0176ccc" | |
| }, | |
| response: "interview deleted" | |
| }, | |
| asyncHandler(async (req, res) => { | |
| const { id } = req.params; | |
| const user_id = req.user?._id; | |
| logger.info(`Deleting interview ${id} for user ${user_id}`); | |
| const interview = await Interview.findOneAndDelete({ _id: id, user_id }); | |
| if (!interview) { | |
| throw new ApiError(404, "Interview not found or unauthorized"); | |
| } | |
| res | |
| .status(200) | |
| .json(new ApiResponse(200, null, "Interview deleted successfully")); | |
| }) | |
| ); | |