Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create companies route #45

Merged
merged 3 commits into from
Feb 21, 2024
Merged
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
Empty file added companiesRoute.js
Empty file.
75 changes: 75 additions & 0 deletions server/controllers/companiesController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
const companiesModel = require("../models/companiesModel");

const companiesController = {};

companiesController.getAllCompanies = async (req, res, next) => {
try {
const { user_id } = req.params;
console.log(`companiesController.getAllCompanies`);
let result = await companiesModel.getAllCompanies(user_id);
if (result.isError) {
next({
status: 500,
message: "Error on companiesController.getAllCompanies in database",
});
}
res.locals.payload = result.payload;
next();
} catch (err) {
next({ status: 500, message: JSON.parse(err) });
}
};

companiesController.saveNewCompanies = async (req, res, next) => {
try {
const { companies } = req.body;
console.log(`companiesController.saveNewCompanies`);
let result = await companiesModel.saveNewCompanies(companies);
if (result.isError) {
next({
status: 500,
message: "Error on companiesController.getAllCompanies in database",
});
}
res.locals.payload = result.payload;
next();
} catch (err) {
next({ status: 500, message: JSON.parse(err) });
}
};
companiesController.updateCompanies = async (req, res, next) => {
try {
const { companies } = req.body;
console.log(`companiesController.updateCompanies`);
let result = await companiesModel.updateCompanies(companies);
if (result.isError) {
next({
status: 500,
message: "Error on companiesController.updateCompanies in database",
});
}
res.locals.payload = result.payload;
next();
} catch (err) {
next({ status: 500, message: JSON.parse(err) });
}
};
companiesController.deleteCompany = async (req, res, next) => {
try {
const { company } = req.params;
console.log(`companiesController.company`);
let result = await companiesModel.deleteCompany(company);
if (result.isError) {
next({
status: 500,
message: "Error on companiesController.deleteCompany in database",
});
}
res.locals.payload = result.payload;
next();
} catch (err) {
next({ status: 500, message: JSON.parse(err) });
}
};

module.exports = companiesController;
28 changes: 13 additions & 15 deletions server/controllers/jobController.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
const { query } = require('express');
const userModel = require('../models/userModel');
const { query } = require("express");
const database = require("../models/database.js");

const userController = {};

userController.getUsers = (req, res, next) => {
const query = 'SELECT * FROM users';
try {
userModel.query(query)
.then((data) => {
console.log(data);
return next();
})
}
catch (err) {
next(err);
}
}
const query = "SELECT * FROM users";
try {
database.query(query).then((data) => {
console.log(data);
return next();
});
} catch (err) {
next(err);
}
};

module.exports = userController;
module.exports = userController;
49 changes: 27 additions & 22 deletions server/infra/server.js
Original file line number Diff line number Diff line change
@@ -1,52 +1,57 @@
const express = require('express');
const path = require('path');
const userRouter = require('../routers/userRouter.js');
const express = require("express");
const path = require("path");
const companiesRouter = require("./routes/companiesRouter");
const userRouter = require("../routers/userRouter.js");
require("dotenv").config();

const app = express();

app.use(express.json());

//Logs all incoming request
app.use('*', (req, res, next) => {
console.log(`
app.use("*", (req, res, next) => {
console.log(`
#######\n
URL: ${req.method} ${req.url}\n
Params: ${JSON.stringify(req.params)}\n
Body: ${JSON.stringify(req.body)}
Req: ${req}
#######
`);
next();
next();
});

// serve everything from the build folder
app.use('/build', express.static(path.join(__dirname, '../client/build')));
app.use("/build", express.static(path.join(__dirname, "../client/build")));
// serve index.html to any get request on the path '/'
app.get('/', (req, res) => res.status(200).sendFile(path.join(__dirname, '../client/index.html')));
app.get("/", (req, res) =>
res.status(200).sendFile(path.join(__dirname, "../client/index.html"))
);

// will send any calls to our page through our proxy server
// app.use('/api', apiRouter);
app.use("/api/companies", companiesRouter);
/* ROUTE REQUESTS THROUGH userRouter */
app.use('/user', userRouter);
app.use("/user", userRouter);

// 404 error handler
app.use('/*', (req, res) => {
res.status(404).send('Error: This page does not exist!');
app.use("/*", (req, res) => {
res.status(404).send("Error: This page does not exist!");
});

// global error handler
app.use('/', (err, req, res, next) => {
const defaultErr = {
log: 'Global error handler caught an error',
status: 500,
message: { err: 'An error occurred' },
};
const errorObj = { ...defaultErr, err };
res.status(errorObj.status).json(errorObj.message);
app.use("/", (err, req, res, next) => {
const defaultErr = {
log: "Global error handler caught an error",
status: 500,
message: { err: "An error occurred" },
};
const errorObj = { ...defaultErr, err };
res.status(errorObj.status).json(errorObj.message);
});

// Starts the server on port 3000
const server = app.listen(3000, (err) => {
if (err) console.log('Error setting up server');
console.log('Hire-archy server running and ready to work :)');
if (err) console.log("Error setting up server");
console.log("Hire-archy server running and ready to work :)");
});

103 changes: 103 additions & 0 deletions server/models/companiesModel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
const database = require("../models/database");
module.exports = companiesModel = {
async getAllCompanies(user_id) {
try {
const query = {
text: `SELECT * FROM companies WHERE $1`,
values: [user_id],
};

let result = await database.query(query);
const normalizedResult = result.rows.map(
({ id, name, address, user_id }) => ({
id,
name,
address,
user_id,
})
);

return { isError: false, payload: normalizedResult, err: null };
} catch (e) {
console.log(`## ERR `, e);
return { isError: true, payload: null, err: e };
}
},
async saveNewCompanies(companies) {
const numOfCompanies = companies.length;
const myCompaniesVals = [];
companies.forEach((company) => {
for (const key in company) {
myCompaniesVals.push(company[key]);
}
});

let valuesArgString = "";
let args = 0;
for (let i = 0; i < companies.length; i++) {
let newStr = `(
$${++args},
$${++args},
$${++args}
),`;

valuesArgString = valuesArgString.concat(newStr);
}
valuesArgString = valuesArgString.slice(0, valuesArgString.length - 1);

try {
const query = {
text: `INSERT INTO companies (name, address, user_id)
VALUES ${valuesArgString}`,
values: myCompaniesVals,
};

let result = await database.query(query);

let createdOrUpdated = false;
if (result.rowCount >= 1) createdOrUpdated = true;
return { isError: false, payload: result.rows };
} catch (e) {
console.log(`## ERR `, e);
return { isError: true, err: e };
}
},
async updateCompanies(companies) {
const numOfCompanies = companies.length;
try {
let rowsAffected = 0, successfullyUpdate = [], errors = []
companies.forEach((company)=>{
try{
const query = {
text: `UPDATE companies SET name = $1, address = $2, user_id = $3 WHERE id = $4`,
values: [company.name, company.address, company.user_id, company.id],
};
let result = await database.query(query);
if (result.rowCount >= 1) {rowsAffected++, successfullyUpdate.push(company.id)}else{errors.push(company.id)};
}catch(e){
errors.push(company.id)
}
})
return { isError: false, payload: result.rows };
} catch (e) {
console.log(`## ERR `, e);
return { isError: true, err: e };
}
},
async deleteCompany(company) {
try {
let totalNumOfCompanies = companies.length;
const query = {
text: `DELETE FROM companies WHERE id = $1 LIMIT 1`,
values: [company.id, totalNumOfCompanies],
};

let result = await database.query(query);

return { isError: false, payload: normalizedResult, err: null };
} catch (e) {
console.log(`## ERR `, e);
return { isError: true, payload: null, err: e };
}
}
}
17 changes: 9 additions & 8 deletions server/models/userModel.js → server/models/database.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
const { Pool } = require('pg');
const { Pool } = require("pg");

const PG_URI = 'postgres://cidmudvg:[email protected]/cidmudvg';
const PG_URI =
"postgres://cidmudvg:[email protected]/cidmudvg";

// create a new pool here using the connection string above
const pool = new Pool({
connectionString: PG_URI
connectionString: PG_URI,
});

// DB Schema: https://dbdesigner.page.link/TAXQgivNoK3A7kKR7

// We export an object that contains a property called query,
// which is a function that returns the invocation of pool.query() after logging the query
// This will be required in the controllers to be the access point to the database
module.exports = {
query: (text, params, callback) => {
console.log('executed query', text);
return pool.query(text, params, callback);
}
module.exports = database = {
query: (text, params, callback) => {
console.log("executed query", text);
return pool.query(text, params, callback);
},
};
23 changes: 23 additions & 0 deletions server/routes/companiesRouter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const express = require("express");

const router = express.Router();

const companiesController = require("../controllers/companiesController.js");

router.get("/", companiesController.getAllCompanies, (req, res) => {
return res.status(200).json(res.locals.user);
});

router.post("/", companiesController.saveNewCompanies, (req, res) => {
return res.status(200).json(res.locals.payload);
});

router.put("/", companiesController.updateCompanies, (req, res) => {
return res.status(200).json(res.locals.payload);
});

router.delete("/:id", companiesController.deleteCompanies, (req, res) => {
return res.status(200).json(res.locals.payload);
});

module.exports = router;