diff --git a/backend-services/user-service/controllers/appController.js b/backend-services/user-service/controllers/appController.js index 735587686d87210627bd0ead44b542f937285a75..40e1ca87f5a69d7a72013d01ffa98ec8dc52ab45 100644 --- a/backend-services/user-service/controllers/appController.js +++ b/backend-services/user-service/controllers/appController.js @@ -70,7 +70,17 @@ export async function register(req,res){ // return save result as a response user.save() - .then(result => res.status(201).send({ msg: "User Registered Successfully"})) + .then(async (result) => { + const user = await UserModel.findOne({username: username}) + + // create jwt token + const token = jwt.sign({ + userId: user._id, + username : user.username + }, ENV.JWT_SECRET , { expiresIn : "24h"}); + + res.status(201).send({ msg: "User Registered Successfully", username: user.username, token }) + }) .catch(error => res.status(500).send({error})) }).catch(error => { @@ -195,3 +205,49 @@ export async function updateUser(req,res){ } } +/** + * POST /userlist + * This DOES NOT return emails and passwords + * @param {*} req + * @param {*} res + * @returns + * + * body: {userIdList: []} + */ +export const GetUserList = async (req,res) => { + try { + const {userIdList} = req.body; + const users = await UserModel.find({ '_id': { $in: userIdList } }, {password: 0, email: 0}); + return res.status(201).send({ userList: users}); + } catch(error){ + return res.status(401).send({ error }); + } +} + +/** + * GET /search + * This endpoint OMITS the password and email fields + * @param {*} req + * @param {*} res + * @returns + * + * query: {query: string} + */ + export const Search = async (req,res) => { + try { + const {searchQuery} = req.query; + + console.log(searchQuery) + + if(searchQuery === undefined || searchQuery.length === 0){ + throw new Error("Please provide a valid query!") + } + + const usersWithMatchingUsername = await UserModel.find({"username": {"$regex": `^${searchQuery}`}}, {password: 0, email: 0}) + const usersWithMatchingName = await UserModel.find({$or: [{"firstName": {"$regex": `^${searchQuery}`,"$options": 'i'}}, {"lastName": {"$regex": `^${searchQuery}`,"$options": 'i'}}]}, {password: 0, email: 0}) + return res.status(201).send({ usersByUsername: usersWithMatchingUsername, usersByName: usersWithMatchingName}); + } catch(error){ + return res.status(401).send({ error: error.message }); + } +} + diff --git a/backend-services/user-service/router/route.js b/backend-services/user-service/router/route.js index aecf0eae40f561bcbfd2c9a5deb8797c2511c881..fc224040c2ed55e216cd7465d5b0afde63403f78 100644 --- a/backend-services/user-service/router/route.js +++ b/backend-services/user-service/router/route.js @@ -8,9 +8,11 @@ const router = Router(); /** POST Methods */ router.route('/register').post(controller.register); // Register router.route('/login').post(controller.verifyUser, controller.login); // Login +router.route('/userlist').post(controller.GetUserList) // Get user list /** GET Methods */ router.route('/user/:username').get(controller.getUser); // GetUser +router.route("/search").get(controller.Search) // Search /** PUT Methods */ diff --git a/daily-thought-frontend/src/pages/register.tsx b/daily-thought-frontend/src/pages/register.tsx index f9e4f6bc66e1973a48db0d17f71955bf105eff36..079f32e568e80f077eea82e968b64652c47eef87 100644 --- a/daily-thought-frontend/src/pages/register.tsx +++ b/daily-thought-frontend/src/pages/register.tsx @@ -29,12 +29,14 @@ const Register = () => { const response = await fetch(endpoint, options) const result = await response.json() - console.log(result.error) - if(result.error !== undefined){ setError(result.error.error) - } else { - Router.push("/feed") + } else { + if(result.token !== undefined && result.username !== undefined){ + sessionStorage.setItem('username', result.username) + sessionStorage.setItem('token', result.token) + Router.push("/feed") + } } }