Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions src/controllers/jobAnalytics/applicationTimeController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
const ApplicationTimeModel = require('../../models/jobAnalytics/applicationTime');

const applicationTimeController = function () {
const getApplicationTimes = async (req, res) => {
try {
const { startDate, roles } = req.query;

const query = {};

// add startDate to query
if (startDate) query.createdAt = { $gte: new Date(startDate) };

// add roles to query
if (roles) {
const roleList = roles.split(',').map((role) => role.trim());
if (roleList.length > 0) query.role = { $in: roleList };
}

const applicationTimes = await ApplicationTimeModel.find(query);

return res.status(200).json({
data: applicationTimes,
count: applicationTimes.length,
});
} catch (error) {
res.status(400).json({ error: 'failed to fetch application times. Please try again later.' });
}

Check warning on line 27 in src/controllers/jobAnalytics/applicationTimeController.js

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Handle this exception or don't catch it at all.

See more on https://sonarcloud.io/project/issues?id=OneCommunityGlobal_HGNRest&issues=AZ8PgWQsFFhzEQA0vKZc&open=AZ8PgWQsFFhzEQA0vKZc&pullRequest=2260
};

const getUniqueRoles = async (req, res) => {
try {
const uniqueRoles = await ApplicationTimeModel.distinct('role');
return res.status(200).json({
data: uniqueRoles,
count: uniqueRoles.length,
});
} catch (error) {
res.status(400).json({ error: 'failed to fetch roles. Please try again later.' });
}

Check warning on line 39 in src/controllers/jobAnalytics/applicationTimeController.js

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Handle this exception or don't catch it at all.

See more on https://sonarcloud.io/project/issues?id=OneCommunityGlobal_HGNRest&issues=AZ8PgWQsFFhzEQA0vKZd&open=AZ8PgWQsFFhzEQA0vKZd&pullRequest=2260
};

return {
getApplicationTimes,
getUniqueRoles,
};
};

module.exports = applicationTimeController;
60 changes: 60 additions & 0 deletions src/models/jobAnalytics/applicationTime.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
const mongoose = require('mongoose');

const applicationTimeSchema = new mongoose.Schema(
{
location: {
country: {
type: String,
required: true,
},
state: {
type: String,
required: true,
},
},
deviceType: {
type: String,
required: true,
},
isOutlier: {
type: Boolean,
default: false,
},
role: {
type: String,
required: true,
},
userId: {
type: String,
required: true,
},
jobId: {
type: String,
required: true,
},
jobTitle: {
type: String,
required: true,
},
clickedAt: {
type: Date,
},
appliedAt: {
type: Date,
},
timeTaken: {
type: Number,
},
sessionId: {
type: String,
required: true,
},
},
{
timestamps: true,
},
);

const ApplicationTimeModel = mongoose.model('ApplicationTime', applicationTimeSchema);

module.exports = ApplicationTimeModel;
10 changes: 10 additions & 0 deletions src/routes/jobAnalytics/applicationTimeRoutes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const express = require('express');
const applicationTimeController =
require('../../controllers/jobAnalytics/applicationTimeController')();

const router = express.Router();

router.route('/application-time').get(applicationTimeController.getApplicationTimes);
router.route('/application-time/roles').get(applicationTimeController.getUniqueRoles);

module.exports = router;
2 changes: 2 additions & 0 deletions src/startup/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ const weeklySummariesFilterRouter = require('../routes/weeklySummariesFilterRout
const jobAnalyticsRoutes = require('../routes/jobAnalytics');

const materialCostRouter = require('../routes/materialCostRouter')();
const applicationTimeRoutes = require('../routes/jobAnalytics/applicationTimeRoutes');

// bm dashboard
const bmLoginRouter = require('../routes/bmdashboard/bmLoginRouter')();
Expand Down Expand Up @@ -546,6 +547,7 @@ module.exports = function (app) {
app.use('/api', taskCommentRouter);
app.use('/api/popularity-enhanced', popularityEnhancedRoutes);
app.use('/api', jobHitsAndApplicationsRoutes);
app.use('/api/analytics', applicationTimeRoutes);

// bm dashboard
app.use('/api/bm', bmLoginRouter);
Expand Down
Loading