PIbd-22_Kalyshev_SUBD/SUBD-back/Controllers/pickUpPointController.js
2023-04-09 19:40:49 +04:00

513 lines
18 KiB
JavaScript

const ApiError = require("../Error/ApiError")
const DB = require("../db.js")
class pickUpPointController {
async update(req, res, next) {
const {changeColumn} = req.query;
const {changeValue} = req.query;
const {id} = req.query;
const {address} = req.query;
if (!id && !address && !changeColumn && !changeValue) {
return next(ApiError.badRequest('need more args'))
}
var updateQuery = `UPDATE \"PickUpPoint\" SET \"${changeColumn}\" = '${changeValue}' `;
var updateCond = []
if (id || address) {
updateQuery += "WHERE ";
}
var i = 0;
if (ID) {
updateCond.push(ID)
updateQuery += `\"ID\" = $${updateCond.length} `;
i++
}
if (Name){
updateCond.push(Name);
if (i > 0) {
updateQuery += "AND ";
}
updateQuery += `\"Name\" = $${updateCond.length} `;
i++
}
if (AllWorkExp){
updateCond.push(Email);
if (i > 0) {
updateQuery += "AND ";
}
updateQuery += `\"Email\" = $${updateCond.length} `;
i++
}
if (Email){
updateCond.push(Password);
if (i > 0) {
updateQuery += "AND ";
}
updateQuery += `\"Password\" = $${updateCond.length} `;
i++
}
if (MainTechID){
updateCond.push(MainTechID);
if (i > 0) {
updateQuery += "AND ";
}
updateQuery += `\"MainTechID\" = $${updateCond.length} `;
i++
}
if (MainRoleID){
updateCond.push(MainRoleID);
if (i > 0) {
updateQuery += "AND ";
}
updateQuery += `\"MainRoleID\" = $${updateCond.length} `;
i++
}
if (ProjectID){
updateCond.push(ProjectID);
if (i > 0) {
updateQuery += "AND ";
}
updateQuery += `\"ProjectID\" = $${updateCond.length} `;
i++
}
if (RoleInProjectID){
updateCond.push(RoleInProjectID);
if (i > 0) {
updateQuery += "AND ";
}
updateQuery += `\"RoleInProjectID\" = $${updateCond.length} `;
i++
}
try {
var result
if (updateCond.length != 0) {
result = await DB.query(updateQuery, updateCond);
} else {
result = await DB.query(updateQuery);
}
} catch (error) {
return next(ApiError.badRequest('not found'))
}
if (!result.rowCount) {
return next(ApiError.badRequest('not found'))
}
res.json(result.rows)
}
async delete(req, res, next) {
const {ID} = req.query;
const {Name} = req.query;
const {AllWorkExp} = req.query;
const {Email} = req.query;
const {MainTechID} = req.query;
const {MainRoleID} = req.query;
const {ProjectID} = req.query;
const {RoleInProjectID} = req.query;
if (!ID && !Name && !AllWorkExp && !Email && !MainTechID && !MainRoleID && !ProjectID && !RoleInProjectID) {
return next(ApiError.badRequest('need more args'))
}
var deleteQuery = "DELETE FROM public.\"Worker\" WHERE "
var deleteCond = []
var i = 0
if (ID) {
deleteCond.push(ID);
deleteQuery += `\"ID\" = $${deleteCond.length} `;
i++
}
if (Name) {
deleteCond.push(Name);
if (i > 0) {
deleteQuery += "AND ";
}
deleteQuery += `\"Name\" = $${deleteCond.length} `;
i++
}
if (AllWorkExp) {
deleteCond.push(AllWorkExp);
if (i > 0) {
deleteQuery += "AND ";
}
deleteQuery += `\"AllWorkExp\" = $${selectCond.length} `;
i++
}
if (Email) {
deleteCond.push(Email);
if (i > 0) {
deleteQuery += "AND ";
}
deleteQuery += `\"Email\" = $${selectCond.length} `;
i++
}
if (MainTechID) {
deleteCond.push(MainTechID);
if (i > 0) {
deleteQuery += "AND ";
}
deleteQuery += `\"MainTechID\" = $${selectCond.length} `;
i++
}
if (MainRoleID) {
deleteCond.push(MainRoleID);
if (i > 0) {
deleteQuery += "AND ";
}
deleteQuery += `\"MainRoleID\" = $${selectCond.length} `;
i++
}
if (ProjectID) {
deleteCond.push(ProjectID);
if (i > 0) {
deleteQuery += "AND ";
}
deleteQuery += `\"ProjectID\" = $${selectCond.length} `;
i++
}
if (RoleInProjectID) {
deleteCond.push(RoleInProjectID);
if (i > 0) {
deleteQuery += "AND ";
}
deleteQuery += `\"RoleInProjectID\" = $${selectCond.length} `;
i++
}
deleteQuery += "RETURNING *"
try {
var result
if (deleteCond.length != 0) {
result = await DB.query(deleteQuery, deleteCond);
} else {
result = await DB.query(deleteQuery);
}
} catch (error) {
return next(ApiError.badRequest('not found'))
}
if (!result.rowCount) {
return next(ApiError.badRequest('not found'))
}
res.json(result.rows)
}
async add(req, res, next) {
const {Name} = req.query;
const {AllWorkExp} = req.query;
const {Email} = req.query;
const {MainTechID} = req.query;
const {MainRoleID} = req.query;
const {ProjectID} = req.query;
const {RoleInProjectID} = req.query;
if (!Name || !AllWorkExp || !Email || !MainTechID || !MainRoleID) {
return next(ApiError.badRequest('need more args'))
}
var selectTechnology = await DB.query("SELECT * FROM public.\"Technology\" WHERE \"ID\" = $1", [MainTechID]);
if (!selectTechnology.rowCount) {
return next(ApiError.badRequest('no MainTechID in Technology'))
}
var selectRole = await DB.query("SELECT * FROM public.\"Role\" WHERE \"ID\" = $1", [MainRoleID]);
if (!selectRole.rowCount) {
return next(ApiError.badRequest('no MainRoleID in Role'))
}
var selectProject;
var selectRoleInProject;
if (ProjectID) {
selectProject = await DB.query("SELECT * FROM public.\"Project\" WHERE \"ID\" = $1", [ProjectID]);
if (!selectProject.rowCount) {
return next(ApiError.badRequest('no ProjectID in Project'))
}
}
if (RoleInProjectID) {
selectRoleInProject = await DB.query("SELECT * FROM public.\"Role\" WHERE \"ID\" = $1", [RoleInProjectID]);
if (!selectRoleInProject.rowCount) {
return next(ApiError.badRequest('no RoleInProjectID in Role'))
}
}
var insertQuery = "INSERT INTO public.\"Worker\" (\"ID\", \"Name\", \"AllWorkExp\", \"Email\", \"MainTechID\", \"MainRoleID\", \"ProjectID\", \"RoleInProjectID\") Values(nextval('\"ProjectID\"'), $1, $2, $3, $4, $5, $6, $7)"
var insertCond = [Name, AllWorkExp, Email, MainTechID, MainRoleID, ProjectID, RoleInProjectID]
try {
var result
if (insertCond.length != 0) {
result = await DB.query(insertQuery, insertCond);
} else {
result = await DB.query(insertQuery);
}
} catch (error) {
return next(ApiError.badRequest('error'))
}
res.json(result.rows)
}
async getRoles(req, res, next) {
const {Email} = req.query;
var selectQuery = 'SELECT "Role"."Name" FROM public."Worker", public."Role" WHERE "Worker"."Email" = $1 AND "Role"."ID" = "Worker"."MainRoleID"'
var selectCond = [Email]
try {
var result
if (selectCond.length != 0) {
result = await DB.query(selectQuery, selectCond);
} else {
result = await DB.query(selectQuery);
}
} catch (error) {
return next(ApiError.badRequest('not found'))
}
if (!result.rowCount) {
return next(ApiError.badRequest('not found'))
}
res.json(result.rows)
}
async get(req, res, next) {
const {Column} = req.query;
const {OperatorID} = req.query;
const {OperatorAllWorkExp} = req.query;
const {OperatorMainTechID} = req.query;
const {OperatorMainRoleID} = req.query;
const {OperatorProjectID} = req.query;
const {OperatorRoleInProjectID} = req.query;
const {ID} = req.query;
const {Name} = req.query;
const {AllWorkExp} = req.query;
const {Email} = req.query;
const {MainTechID} = req.query;
const {MainRoleID} = req.query;
const {ProjectID} = req.query;
const {RoleInProjectID} = req.query;
var selectQuery = "SELECT "
var selectCond = []
if (Column) {
selectQuery += `\"${Column}\" FROM public.\"Worker\" `;
} else {
selectQuery += "* FROM public.\"Worker\" ";
}
if (ID || Name || AllWorkExp || Email || MainTechID || MainRoleID || ProjectID || RoleInProjectID) {
selectQuery += "WHERE ";
}
var i = 0
if (ID) {
selectCond.push(ID);
if (!OperatorID) {
selectQuery += `\"ID\" = $${selectCond.length} `;
} else {
switch (OperatorID) {
case ">":
selectQuery += `\"ID\" > $${selectCond.length} `;
break;
case "<":
selectQuery += `\"ID\" < $${selectCond.length} `;
break;
case "=":
selectQuery += `\"ID\" = $${selectCond.length} `;
break;
case "!=":
selectQuery += `\"ID\" != $${selectCond.length} `;
break;
default:
break;
}
}
i++
}
if (Name) {
selectCond.push(Name);
if (i > 0) {
selectQuery += "AND ";
}
selectQuery += `\"Name\" = $${selectCond.length} `;
i++
}
if (AllWorkExp) {
selectCond.push(AllWorkExp);
if (i > 0) {
selectQuery += "AND ";
}
if (!OperatorAllWorkExp) {
selectQuery += `\"AllWorkExp\" = $${selectCond.length} `;
} else {
switch (OperatorAllWorkExp) {
case ">":
selectQuery += `\"AllWorkExp\" > $${selectCond.length} `;
break;
case "<":
selectQuery += `\"AllWorkExp\" < $${selectCond.length} `;
break;
case "=":
selectQuery += `\"AllWorkExp\" = $${selectCond.length} `;
break;
case "!=":
selectQuery += `\"AllWorkExp\" != $${selectCond.length} `;
break;
default:
break;
}
}
i++
}
if (Email) {
selectCond.push(Email);
if (i > 0) {
selectQuery += "AND ";
}
selectQuery += `\"Email\" = $${selectCond.length} `;
i++
}
if (MainTechID) {
selectCond.push(MainTechID);
if (i > 0) {
selectQuery += "AND ";
}
if (!OperatorMainTechID) {
selectQuery += `\"MainTechID\" = $${selectCond.length} `;
} else {
switch (OperatorMainTechID) {
case ">":
selectQuery += `\"MainTechID\" > $${selectCond.length} `;
break;
case "<":
selectQuery += `\"MainTechID\" < $${selectCond.length} `;
break;
case "=":
selectQuery += `\"MainTechID\" = $${selectCond.length} `;
break;
case "!=":
selectQuery += `\"MainTechID\" != $${selectCond.length} `;
break;
default:
break;
}
}
i++
}
if (MainRoleID) {
selectCond.push(MainRoleID);
if (i > 0) {
selectQuery += "AND ";
}
if (!OperatorMainRoleID) {
selectQuery += `\"MainRoleID\" = $${selectCond.length} `;
} else {
switch (OperatorMainRoleID) {
case ">":
selectQuery += `\"MainRoleID\" > $${selectCond.length} `;
break;
case "<":
selectQuery += `\"MainRoleID\" < $${selectCond.length} `;
break;
case "=":
selectQuery += `\"MainRoleID\" = $${selectCond.length} `;
break;
case "!=":
selectQuery += `\"MainRoleID\" != $${selectCond.length} `;
break;
default:
break;
}
}
i++
}
if (ProjectID) {
if (i > 0) {
selectQuery += "AND ";
}
if (ProjectID == "null") {
if (!OperatorProjectID) {
selectQuery += `\"ProjectID\" IS NULL `;
console.log(selectQuery)
console.log(selectCond)
} else {
switch (OperatorProjectID) {
case "=":
selectQuery += `\"ProjectID\" IS NULL `;
break;
case "!=":
selectQuery += `\"ProjectID\" IS NOT NULL `;
break;
default:
break;
}
}
} else {
selectCond.push(ProjectID);
if (!OperatorProjectID) {
selectQuery += `\"ProjectID\" = $${selectCond.length} `;
} else {
switch (OperatorProjectID) {
case ">":
selectQuery += `\"ProjectID\" > $${selectCond.length} `;
break;
case "<":
selectQuery += `\"ProjectID\" < $${selectCond.length} `;
break;
case "=":
selectQuery += `\"ProjectID\" = $${selectCond.length} `;
break;
case "!=":
selectQuery += `\"ProjectID\" != $${selectCond.length} `;
break;
default:
break;
}
}
}
i++
}
if (RoleInProjectID) {
if (i > 0) {
selectQuery += "AND ";
}
if (RoleInProjectID == "null") {
if (!OperatorRoleInProjectID) {
selectQuery += `\"RoleInProjectID\" IS NULL `;
console.log(selectQuery)
console.log(selectCond)
} else {
switch (OperatorRoleInProjectID) {
case "=":
selectQuery += `\"RoleInProjectID\" IS NULL `;
break;
case "!=":
selectQuery += `\"RoleInProjectID\" IS NOT NULL `;
break;
default:
break;
}
}
} else {
selectCond.push(RoleInProjectID);
if (!OperatorRoleInProjectID) {
selectQuery += `\"RoleInProjectID\" = $${selectCond.length} `;
} else {
switch (OperatorRoleInProjectID) {
case ">":
selectQuery += `\"RoleInProjectID\" > $${selectCond.length} `;
break;
case "<":
selectQuery += `\"RoleInProjectID\" < $${selectCond.length} `;
break;
case "=":
selectQuery += `\"RoleInProjectID\" = $${selectCond.length} `;
break;
case "!=":
selectQuery += `\"RoleInProjectID\" != $${selectCond.length} `;
break;
default:
break;
}
}
}
i++
}
try {
var result
if (selectCond.length != 0) {
result = await DB.query(selectQuery, selectCond);
} else {
result = await DB.query(selectQuery);
}
} catch (error) {
return next(ApiError.badRequest('not found'))
}
if (!result.rowCount) {
return next(ApiError.badRequest('not found'))
}
res.json(result.rows)
}
}
module.exports = new workerController()