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

18 superuser manage data #90

Merged
merged 11 commits into from
Oct 24, 2019
4 changes: 2 additions & 2 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,6 @@ module.exports = {
singleQuote: false,
},
],
"no-underscore-dangle": 0,
},
"no-underscore-dangle": 0
}
};
23,026 changes: 10,377 additions & 12,649 deletions client/package-lock.json

Large diffs are not rendered by default.

129 changes: 129 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
},
"devDependencies": {
"codecov": "^3.6.1",
"babel-eslint": "^10.0.3",
"eslint": "^6.1.0",
"eslint-config-airbnb": "^18.0.1",
"eslint-config-airbnb-base": "^14.0.0",
Expand Down
9 changes: 8 additions & 1 deletion server/controllers/index.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
const express = require("express");
const { getLocations, addLocation } = require("./locations");
const {
getLocations,
addLocation,
getSuperUserRecords,
} = require("./locations");

const { getReps, handleStreetRepRequest } = require("./reps");
const admin = require("./admin");

const router = express.Router();

router.get("/locations", getLocations);
router.post("/locations", addLocation);

router.get("/reps/locations", getSuperUserRecords);
router.get("/reps", getReps);
router.post("/reps", handleStreetRepRequest);

Expand Down
46 changes: 46 additions & 0 deletions server/controllers/locations/getSuperUserRecords.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
const boom = require("@hapi/boom");

const connectToDatabase = require("../../database/dbConnection");
const getSuperUserSubUsers = require("../../database/queries/user/getSuperUserSubUsers");
const getRentalRecordsByIds = require("../../database/queries/rentalRecord/getRentalRecordsByIds");
const { roles, status } = require("../../constants/users");

// temp
const User = require("../../database/models/User");

// Stub - function to be replaced with one that gets ID of logged in user
const getCurrentUser = () => User.findOne({ name: "Farah Zaqout" });

module.exports = async function getSuperUserRecords(req, res, next) {
try {
await connectToDatabase();
} catch (err) {
return next(boom.badImplementation(err));
}

try {
const currentUser = await getCurrentUser();
if (!currentUser) {
return next(
boom.forbidden("Please make sure you are logged in and try again"),
);
}

const isSuperUser = currentUser.role === roles.SUPERUSER;

if (!isSuperUser) {
return next(boom.forbidden("Request not allowed"));
}

const users = await getSuperUserSubUsers(currentUser._id);

if (!users.length) {
return next(boom.notFound("Superuser has no sub users"));
}
const rentalRecords = await getRentalRecordsByIds(users);

return res.status(200).send(rentalRecords);
} catch (err) {
return next(boom.badImplementation(err));
}
};
2 changes: 2 additions & 0 deletions server/controllers/locations/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
const addLocation = require("./addLocation");
const getLocations = require("./getLocations");
const getSuperUserRecords = require("./getSuperUserRecords");

module.exports = {
addLocation,
getLocations,
getSuperUserRecords,
};
5 changes: 5 additions & 0 deletions server/database/queries/rentalRecord/getRentalRecordsByIds.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const RentalRecord = require("../../models/RentalRecord");

module.exports = function getRentalRecordsByIds(ids) {
return RentalRecord.find({ submittedBy: { $in: ids } });
};
5 changes: 5 additions & 0 deletions server/database/queries/user/getSuperUserSubUsers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const User = require("../../models/User");

module.exports = function getSuperUserSubUsers(superUserId) {
return User.find({ verifiedBy: superUserId }).distinct("_id");
};
19 changes: 16 additions & 3 deletions server/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"test:coverage": "jest --runInBand --detectOpenHandles --forceExit --coverage"
},
"dependencies": {
"@hapi/boom": "^8.0.1",
"axios": "^0.19.0",
"body-parser": "^1.19.0",
"csv": "^5.1.3",
Expand Down
4 changes: 2 additions & 2 deletions server/utils/isValidMongoID.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const mongoose = require('mongoose');
const mongoose = require("mongoose");

const { ObjectId } = mongoose.Types;

Expand All @@ -12,4 +12,4 @@ const isValidMongoObjectId = id => {
return false;
};

export default isValidMongoObjectId;
module.exports = isValidMongoObjectId;