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

@@ -30,9 +30,11 @@ app.use('/', indexRoute);
// "users"
const usersIndexRoute = require('./routes/users/index')(sequelize);
const usersFindRoute = require('./routes/users/find')(sequelize);
const signUpRoute = require('./routes/users/signup')(sequelize);
const signInRoute = require('./routes/users/signin')(sequelize);
app.use('/users', usersIndexRoute);
app.use('/users', usersFindRoute);
app.use('/users', signUpRoute);
app.use('/users', signInRoute);

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;
};

View File

@@ -17,6 +17,69 @@ module.exports = {
createdAt: new Date(),
updatedAt: new Date(),
},
{
email: 'samuel@testplat.com',
password: hashedPassword,
username: 'Samuel Golden',
role: 1,
avatarPath: null,
createdAt: new Date(),
updatedAt: new Date(),
},
{
email: 'trey@testplat.com',
password: hashedPassword,
username: 'Trey Fisher',
role: 1,
avatarPath: null,
createdAt: new Date(),
updatedAt: new Date(),
},
{
email: 'zoe@testplat.com',
password: hashedPassword,
username: 'Zoe Woodward',
role: 1,
avatarPath: null,
createdAt: new Date(),
updatedAt: new Date(),
},
{
email: 'roger@testplat.com',
password: hashedPassword,
username: 'Roger Hess',
role: 1,
avatarPath: null,
createdAt: new Date(),
updatedAt: new Date(),
},
{
email: 'jasmine@testplat.com',
password: hashedPassword,
username: 'Jasmine Moody',
role: 1,
avatarPath: null,
createdAt: new Date(),
updatedAt: new Date(),
},
{
email: 'tatsuya@testplat.com',
password: hashedPassword,
username: 'Suzuki Tatsuya',
role: 1,
avatarPath: null,
createdAt: new Date(),
updatedAt: new Date(),
},
{
email: 'eri@testplat.com',
password: hashedPassword,
username: 'Sato Eri',
role: 1,
avatarPath: null,
createdAt: new Date(),
updatedAt: new Date(),
},
]);
// Add projects table records