Untitled

mail@pastecode.io avatar
unknown
javascript
2 months ago
4.1 kB
2
Indexable
Never
const Applicants = require("../models").Applicant;
const ApplicantTools = require("../models").applicantTools;
const Question = require("../models").applicantQuestions;
const ratings = require("../models").applicantRatings;
const ToolsData = require("../models").toolsData;
const { sequelize } = require("../models");
const models = require("../models");
const applicantQuestions = require("../models/applicantQuestions");
class applicant {
    static async edit(req, res) {
        const { hireflixId, name, email, location, employmentType, applicantTools, questions, description, verrified, position } = req.body;
        if (!hireflixId || !name || !email || !location || !employmentType || !applicantTools || !questions || !description || !verrified || !position) {
            return res.status(400).json({ message: 'Please fill all data' });
        }
        try {
            //open safe way to connect with db
            const result = await sequelize.transaction(async (t) => {

                //create applicant id
                const newApplicant = await Applicants.create({
                    hireflix_id: hireflixId,
                    name,
                    email,
                    location,
                    employment_type: employmentType,
                    description,
                    verrified,
                    position
                }, { transaction: t });
                //create tools that applicant use
                const toolsData = applicantTools.map(applicantTools => ({
                    tools: applicantTools.tools,
                    applicant_id: newApplicant.id,
                }));
                await ApplicantTools.bulkCreate(toolsData, { transaction: t });
                //create questions that applicants have
                const questionsData = questions.map(question => ({
                    tittle: question.tittle,
                    url: question.media ? question.media.url : null,
                    applicant_id: newApplicant.id
                }));
                await Question.bulkCreate(questionsData, { transaction: t });
                //create null rating
                await ratings.create({
                    applicant_id: newApplicant.id,
                    rating: null,
                    review: null
                }, { transaction: t });
            });
            const applicantWithRelatedData = await Applicants.findOne({
                where: { hireflix_id: hireflixId },
                include: [
                    'questions',
                    'tools',
                    'review'
                ]
            });
            res.status(200).json({ message: 'success', data: applicantWithRelatedData });
        } catch (error) {
            res.status(400).json({ message: 'Failed to update user', error: error.message });
        }
    }

    static async get(req, res, next) {
        try {
            const getApplicant = await Applicants.findAll({
                where: { verrified: true },
                include: [
                    {
                        model: models.applicantQuestions,
                        as: 'questions'
                    },
                    {
                        model: models.ApplicantTools,
                        as: 'tools',
                        include: {
                            model: ToolsData,
                            as: 'toolData',
                        },
                    },
                    {
                        model: models.ratings,
                        as: 'review'
                    }
                ]
            });
            if (!getApplicant) {
                res.status(404).json({ message: 'There is no data or data not found' })
            } else {
                res.status(200).json({ message: 'Success get data', data: getApplicant })
            }
        } catch (error) {
            res.status(400).json({ message: 'Failed to get data', error: error.message })
        }
    }
}
module.exports = applicant;
Leave a Comment