Project member management

This commit is contained in:
Takeshi Kimata
2024-05-30 22:29:46 +09:00
parent abf2d48bee
commit db121940d8
13 changed files with 362 additions and 14 deletions

View File

@@ -2,6 +2,7 @@ const express = require('express');
const router = express.Router();
const defineMember = require('../../models/members');
const { DataTypes } = require('sequelize');
const { memberRoles } = require('../../routes/users/authSettings');
module.exports = function (sequelize) {
const { verifySignedIn, verifyProjectManager } = require('../../middleware/auth')(sequelize);
@@ -24,9 +25,11 @@ module.exports = function (sequelize) {
return res.status(400).send('Record already exists');
}
const managerRoleIndex = memberRoles.findIndex((entry) => entry.uid === 'reporter');
const newMember = await Member.create({
userId: userId,
projectId: projectId,
role: managerRoleIndex,
});
res.json(newMember);

View File

@@ -0,0 +1,41 @@
const express = require('express');
const router = express.Router();
const defineUser = require('../../models/users');
const { DataTypes, Op } = require('sequelize');
module.exports = function (sequelize) {
const { verifySignedIn } = require('../../middleware/auth')(sequelize);
const User = defineUser(sequelize, DataTypes);
router.get('/find', verifySignedIn, async (req, res) => {
try {
const { search, excludeIds } = req.query;
if (!search) {
return res.status(400).json({ error: 'search text is required' });
}
let where = {};
if (search) {
where = {
[Op.or]: [{ email: { [Op.like]: `%${search}%` } }, { username: { [Op.like]: `%${search}%` } }],
};
}
if (excludeIds) {
const excludeIdArray = excludeIds.split(',').map((id) => parseInt(id, 10));
where.id = { [Op.notIn]: excludeIdArray };
}
const users = await User.findAll({
where,
limit: 7,
});
res.json(users);
} catch (error) {
console.error(error);
res.status(500).send('Internal Server Error');
}
});
return router;
};