mirror of
https://github.com/xfarrow/blink
synced 2025-06-27 09:03:02 +02:00
update
This commit is contained in:
@ -15,7 +15,7 @@ const knex = require('../utils/knex_config');
|
|||||||
const OrganizationAdmin = require('../models/organization_admin_model');
|
const OrganizationAdmin = require('../models/organization_admin_model');
|
||||||
|
|
||||||
async function insert(requester, organizationId, title, description, requirements, salary, salaryFrequency, salaryCurrency, location, tags) {
|
async function insert(requester, organizationId, title, description, requirements, salary, salaryFrequency, salaryCurrency, location, tags) {
|
||||||
const isAdmin = OrganizationAdmin.isAdmin(requester, organizationId);
|
const isAdmin = await OrganizationAdmin.isAdmin(requester, organizationId);
|
||||||
if (isAdmin) {
|
if (isAdmin) {
|
||||||
return await knex.transaction(async (tr) => {
|
return await knex.transaction(async (tr) => {
|
||||||
const jobOffer = await tr('JobOffer').insert({
|
const jobOffer = await tr('JobOffer').insert({
|
||||||
@ -32,10 +32,10 @@ async function insert(requester, organizationId, title, description, requirement
|
|||||||
|
|
||||||
// Insert in the JobOfferTag table all the relevant tags.
|
// Insert in the JobOfferTag table all the relevant tags.
|
||||||
if (tags.length !== 0) {
|
if (tags.length !== 0) {
|
||||||
await Promise.all(tags.map(tagId =>
|
await Promise.all(tags.map(tag =>
|
||||||
tr('JobOfferTag').insert({
|
tr('JobOfferTag').insert({
|
||||||
job_offer_id: jobOffer[0].id,
|
job_offer_id: jobOffer[0].id,
|
||||||
tag_id: tagId
|
tag_id: tag.id
|
||||||
})
|
})
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@ -45,6 +45,26 @@ async function insert(requester, organizationId, title, description, requirement
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function remove(requester, jobOfferId) {
|
||||||
|
const jobOffer = await findById(jobOfferId);
|
||||||
|
const isAdmin = await OrganizationAdmin.isAdmin(requester, jobOffer.organization_id);
|
||||||
|
if (isAdmin) {
|
||||||
|
const deletedRows = await knex('JobOffer')
|
||||||
|
.where({
|
||||||
|
id: jobOfferId
|
||||||
|
}).del();
|
||||||
|
return deletedRows === 1;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function findById(jobOfferId) {
|
||||||
|
return await knex('JobOffer').where({
|
||||||
|
id: jobOfferId
|
||||||
|
}).select().first();
|
||||||
|
}
|
||||||
|
|
||||||
// test
|
// test
|
||||||
async function filter(title, description, requirements, salary, salaryOperator, salaryFrequency, location, tags) {
|
async function filter(title, description, requirements, salary, salaryOperator, salaryFrequency, location, tags) {
|
||||||
let query = knex('JobOffer');
|
let query = knex('JobOffer');
|
||||||
@ -77,5 +97,6 @@ async function filter(title, description, requirements, salary, salaryOperator,
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
insert
|
insert,
|
||||||
|
remove
|
||||||
}
|
}
|
@ -119,5 +119,5 @@ module.exports = {
|
|||||||
createOrganization,
|
createOrganization,
|
||||||
insert,
|
insert,
|
||||||
update,
|
update,
|
||||||
deleteOrganization: remove
|
remove
|
||||||
};
|
};
|
26
backend/apis/nodejs/src/models/tags_model.js
Normal file
26
backend/apis/nodejs/src/models/tags_model.js
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
This code is part of Blink
|
||||||
|
licensed under GPLv3
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const knex = require('../utils/knex_config');
|
||||||
|
|
||||||
|
async function findByTags(tags) {
|
||||||
|
tags = tags.map(tag => tag.toLowerCase());
|
||||||
|
const result = await knex('Tag')
|
||||||
|
.whereIn('tag', tags)
|
||||||
|
.select();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
findByTags
|
||||||
|
}
|
@ -14,9 +14,19 @@
|
|||||||
const JobOffer = require('../models/job_offer_model');
|
const JobOffer = require('../models/job_offer_model');
|
||||||
const jwtUtils = require('../utils/jwt_utils');
|
const jwtUtils = require('../utils/jwt_utils');
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
|
const Tag = require('../models/tags_model');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* POST Request
|
||||||
|
*
|
||||||
|
* Creates a new Job Offer
|
||||||
|
* @param {*} req
|
||||||
|
* @param {*} res
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
async function insert(req, res) {
|
async function insert(req, res) {
|
||||||
try {
|
try {
|
||||||
|
const tags = await Tag.findByTags(req.body.tags);
|
||||||
const insertedJobOffer = await JobOffer.insert(
|
const insertedJobOffer = await JobOffer.insert(
|
||||||
req.jwt.person_id,
|
req.jwt.person_id,
|
||||||
req.params.id, // organization id
|
req.params.id, // organization id
|
||||||
@ -27,7 +37,7 @@ async function insert(req, res) {
|
|||||||
req.body.salary_frequency,
|
req.body.salary_frequency,
|
||||||
req.body.salary_currency,
|
req.body.salary_currency,
|
||||||
req.body.location,
|
req.body.location,
|
||||||
req.body.tags);
|
tags);
|
||||||
|
|
||||||
if (insertedJobOffer) {
|
if (insertedJobOffer) {
|
||||||
res.set('Location', `/api/joboffers/${insertedJobOffer.id}`);
|
res.set('Location', `/api/joboffers/${insertedJobOffer.id}`);
|
||||||
@ -45,9 +55,35 @@ async function insert(req, res) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const protectedRoutes = express.Router(); // Routes requiring token
|
/**
|
||||||
|
* DELETE Request
|
||||||
|
*
|
||||||
|
* Removes a Job Offer
|
||||||
|
* @param {*} req
|
||||||
|
* @param {*} res
|
||||||
|
*/
|
||||||
|
async function remove(req, res) {
|
||||||
|
try {
|
||||||
|
const result = await JobOffer.remove(req.jwt.person_id, req.params.jobOfferId);
|
||||||
|
if (result) {
|
||||||
|
return res.status(204).send();
|
||||||
|
} else {
|
||||||
|
return res.status(403).json({
|
||||||
|
error: 'Forbidden'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Error in function ${insert.name}: ${error}`);
|
||||||
|
res.status(500).json({
|
||||||
|
error: 'Internal server error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const protectedRoutes = express.Router();
|
||||||
protectedRoutes.use(jwtUtils.verifyToken);
|
protectedRoutes.use(jwtUtils.verifyToken);
|
||||||
protectedRoutes.post('/organizations/:id/joboffers', insert);
|
protectedRoutes.post('/organizations/:id/joboffers', insert);
|
||||||
|
protectedRoutes.delete('/organizations/joboffers/:jobOfferId', remove);
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
protectedRoutes
|
protectedRoutes
|
||||||
|
Reference in New Issue
Block a user