From bbe481031fc06bab364e20616b6409aa6aa21f1a Mon Sep 17 00:00:00 2001 From: iyanfdezz Date: Sun, 7 Apr 2024 14:27:52 +0200 Subject: [PATCH 01/20] =?UTF-8?q?Eliminando=20relaci=C3=B3n=20innecesaria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- users/userservice/user-model.js | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/users/userservice/user-model.js b/users/userservice/user-model.js index 2e26fad8..cbd6319c 100644 --- a/users/userservice/user-model.js +++ b/users/userservice/user-model.js @@ -39,24 +39,14 @@ const groupSchema = new mongoose.Schema({ type: Date, default: Date.now }, + members: [{ + type: String, + required: true + }] }); const Group = mongoose.model('Group', groupSchema); -// Modelo para la relación entre usuarios y grupos -const userGroupSchema = new mongoose.Schema({ - user: { - type: mongoose.Schema.Types.ObjectId, - ref: 'User', - required: true - }, - group: { - type: mongoose.Schema.Types.ObjectId, - ref: 'Group', - required: true - }, -}); -const UserGroup = mongoose.model('UserGroup', userGroupSchema); -module.exports = { User, Group, UserGroup }; \ No newline at end of file +module.exports = { User, Group }; \ No newline at end of file From df8147cbc4fd0399283deaf72e0fc44ff28ed1b9 Mon Sep 17 00:00:00 2001 From: iyanfdezz Date: Sun, 7 Apr 2024 14:28:16 +0200 Subject: [PATCH 02/20] Modificando vista de Grupos --- webapp/src/pages/Social/Groups.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/webapp/src/pages/Social/Groups.js b/webapp/src/pages/Social/Groups.js index 6fdede4b..9ac045a1 100644 --- a/webapp/src/pages/Social/Groups.js +++ b/webapp/src/pages/Social/Groups.js @@ -17,7 +17,7 @@ const Groups = () => { useEffect(() => { const fetchData = async () => { try { - const response = await axios.get(`${apiEndpoint}/group/list`); + const response = await axios.get(`${apiEndpoint}/groups`); setGroups(response.data.groups); } catch (error) { console.error('Error fetching data:', error); @@ -28,7 +28,7 @@ const Groups = () => { const addGroup = async () => { try { - await axios.post(`${apiEndpoint}/group/add`, { + await axios.post(`${apiEndpoint}/groups`, { name: name, username: username }); @@ -41,7 +41,7 @@ const Groups = () => { const handleJoinGroup = async (groupId) => { try { - await axios.post(`${apiEndpoint}/group/join`, { groupId }); + await axios.post(`${apiEndpoint}/groups/${groupId}/join`, { username }); setGroups(prevGroups => prevGroups.filter(group => group._id !== groupId)); } catch (error) { console.error('Error joining group:', error); @@ -80,7 +80,7 @@ const Groups = () => { GROUPS {groups.map((group) => ( - + {group.name} @@ -95,3 +95,4 @@ const Groups = () => { }; export default Groups; + From ec9cb6f32de15afde61aed33b252b74c1c6bfbab Mon Sep 17 00:00:00 2001 From: iyanfdezz Date: Sun, 7 Apr 2024 14:29:12 +0200 Subject: [PATCH 03/20] Modificando endpoints --- users/userservice/user-service.js | 38 +++++++++++-------------------- 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/users/userservice/user-service.js b/users/userservice/user-service.js index 1da6492f..db020174 100644 --- a/users/userservice/user-service.js +++ b/users/userservice/user-service.js @@ -179,7 +179,7 @@ app.post("/saveGameList", async (req, res) => { } }); -app.get('/group/list', async (req, res) => { +app.get('/groups', async (req, res) => { try { const allGroups = await Group.find(); res.json({ groups: allGroups }); @@ -198,33 +198,25 @@ app.get('/group/:name', async (req, res) => { return res.status(404).json({ error: 'Group not found' }); } - const groupUsers = await UserGroup.find({ group: group._id }).populate('user'); - - res.json({ group, users: groupUsers }); + res.json({ group }); } catch (error) { res.status(400).json({ error: error.message }); } }); // Crear un nuevo grupo -app.post('/group/add', async (req, res) => { +app.post('/groups', async (req, res) => { try { - const { name, userId } = req.body; + const { name, username } = req.body; - // Verifica si el usuario existe - const user = await User.findById(userId); + const user = await User.findOne({ username }); if (!user) { return res.status(404).json({ error: 'User not found' }); } - // Crea un nuevo grupo - const newGroup = new Group({ name }); + const newGroup = new Group({ name, members: [username] }); await newGroup.save(); - // Agrega al usuario como miembro del grupo - const userGroup = new UserGroup({ user: userId, group: newGroup._id }); - await userGroup.save(); - res.json({ message: 'Group created successfully' }); } catch (error) { res.status(400).json({ error: error.message }); @@ -232,31 +224,26 @@ app.post('/group/add', async (req, res) => { }); // Unirse a un grupo existente -app.post('/group/join', async (req, res) => { +app.post('/groups/:groupId/join', async (req, res) => { try { - const { groupId, userId } = req.body; + const { groupId, username } = req.body; - // Verifica si el usuario existe - const user = await User.findById(userId); + const user = await User.findOne({ username }); if (!user) { return res.status(404).json({ error: 'User not found' }); } - // Verifica si el grupo existe const group = await Group.findById(groupId); if (!group) { return res.status(404).json({ error: 'Group not found' }); } - // Verifica si el usuario ya es miembro del grupo - const existingMembership = await UserGroup.findOne({ user: userId, group: groupId }); - if (existingMembership) { + if (group.members.includes(username)) { return res.status(400).json({ error: 'User already a member of this group' }); } - // Agrega al usuario como miembro del grupo - const userGroup = new UserGroup({ user: userId, group: groupId }); - await userGroup.save(); + group.members.push(username); + await group.save(); res.json({ message: 'User joined the group successfully' }); } catch (error) { @@ -264,6 +251,7 @@ app.post('/group/join', async (req, res) => { } }); + const server = app.listen(port, () => { console.log(`User Service listening at http://localhost:${port}`); }); From 5e3ee88beba738c67933f4c629917b2f6046a850 Mon Sep 17 00:00:00 2001 From: iyanfdezz Date: Sun, 7 Apr 2024 15:01:24 +0200 Subject: [PATCH 04/20] Cambios en los endpoints --- users/userservice/user-service.js | 10 ++++++---- webapp/src/pages/Social/Groups.js | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/users/userservice/user-service.js b/users/userservice/user-service.js index db020174..d5bb0458 100644 --- a/users/userservice/user-service.js +++ b/users/userservice/user-service.js @@ -205,16 +205,18 @@ app.get('/group/:name', async (req, res) => { }); // Crear un nuevo grupo -app.post('/groups', async (req, res) => { +app.post('/group/create', async (req, res) => { try { - const { name, username } = req.body; + const name= req.body.name; + const username= req.body.username; - const user = await User.findOne({ username }); + const user = await User.findOne({ username:username }); if (!user) { return res.status(404).json({ error: 'User not found' }); } - const newGroup = new Group({ name, members: [username] }); + const newGroup = new Group({ name: name, + members: [username] }); await newGroup.save(); res.json({ message: 'Group created successfully' }); diff --git a/webapp/src/pages/Social/Groups.js b/webapp/src/pages/Social/Groups.js index 9ac045a1..9b97f398 100644 --- a/webapp/src/pages/Social/Groups.js +++ b/webapp/src/pages/Social/Groups.js @@ -28,7 +28,7 @@ const Groups = () => { const addGroup = async () => { try { - await axios.post(`${apiEndpoint}/groups`, { + await axios.post(`${apiEndpoint}/group/create`, { name: name, username: username }); From aa4b3c88cfd129846ed6785309bda0a477101d66 Mon Sep 17 00:00:00 2001 From: iyanfdezz Date: Sun, 7 Apr 2024 15:13:01 +0200 Subject: [PATCH 05/20] Ya funciona el unirse a grupos y crearlos --- users/userservice/user-service.js | 4 ++-- webapp/src/pages/Social/Groups.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/users/userservice/user-service.js b/users/userservice/user-service.js index d5bb0458..43b1fd93 100644 --- a/users/userservice/user-service.js +++ b/users/userservice/user-service.js @@ -179,7 +179,7 @@ app.post("/saveGameList", async (req, res) => { } }); -app.get('/groups', async (req, res) => { +app.get('/group/list', async (req, res) => { try { const allGroups = await Group.find(); res.json({ groups: allGroups }); @@ -205,7 +205,7 @@ app.get('/group/:name', async (req, res) => { }); // Crear un nuevo grupo -app.post('/group/create', async (req, res) => { +app.post('/group/add', async (req, res) => { try { const name= req.body.name; const username= req.body.username; diff --git a/webapp/src/pages/Social/Groups.js b/webapp/src/pages/Social/Groups.js index 9b97f398..b2de0ce5 100644 --- a/webapp/src/pages/Social/Groups.js +++ b/webapp/src/pages/Social/Groups.js @@ -17,7 +17,7 @@ const Groups = () => { useEffect(() => { const fetchData = async () => { try { - const response = await axios.get(`${apiEndpoint}/groups`); + const response = await axios.get(`${apiEndpoint}/group/list`); setGroups(response.data.groups); } catch (error) { console.error('Error fetching data:', error); @@ -28,7 +28,7 @@ const Groups = () => { const addGroup = async () => { try { - await axios.post(`${apiEndpoint}/group/create`, { + await axios.post(`${apiEndpoint}/group/add`, { name: name, username: username }); From 085f4a0e3d1709ea4400c5f7d66f84720b64e26a Mon Sep 17 00:00:00 2001 From: iyanfdezz Date: Sun, 7 Apr 2024 15:28:35 +0200 Subject: [PATCH 06/20] Dividiendo los grupos en dos vistas --- users/userservice/user-service.js | 5 +- webapp/src/pages/Social/Groups.js | 113 +++++++++++++++----------- webapp/src/pages/Social/UserGroups.js | 88 ++++++++++++++++++++ 3 files changed, 156 insertions(+), 50 deletions(-) create mode 100644 webapp/src/pages/Social/UserGroups.js diff --git a/users/userservice/user-service.js b/users/userservice/user-service.js index 43b1fd93..ac05569e 100644 --- a/users/userservice/user-service.js +++ b/users/userservice/user-service.js @@ -226,9 +226,10 @@ app.post('/group/add', async (req, res) => { }); // Unirse a un grupo existente -app.post('/groups/:groupId/join', async (req, res) => { +app.post('/group/join', async (req, res) => { try { - const { groupId, username } = req.body; + const groupId=req.body.groupId; + const username=req.body.username; const user = await User.findOne({ username }); if (!user) { diff --git a/webapp/src/pages/Social/Groups.js b/webapp/src/pages/Social/Groups.js index b2de0ce5..9470776d 100644 --- a/webapp/src/pages/Social/Groups.js +++ b/webapp/src/pages/Social/Groups.js @@ -1,6 +1,6 @@ import React, { useState, useEffect } from 'react'; import axios from 'axios'; -import { Container, Box, Text, List, ListItem, Button, Divider, Input, Alert } from '@chakra-ui/react'; +import { Container, Box, Text, List, ListItem, Button, Input, Alert } from '@chakra-ui/react'; import Nav from "../../components/Nav/Nav.js"; import Footer from "../../components/Footer/Footer.js"; @@ -15,17 +15,19 @@ const Groups = () => { const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; useEffect(() => { - const fetchData = async () => { - try { - const response = await axios.get(`${apiEndpoint}/group/list`); - setGroups(response.data.groups); - } catch (error) { - console.error('Error fetching data:', error); - } - }; fetchData(); }, []); + const fetchData = async () => { + try { + const response = await axios.get(`${apiEndpoint}/group/list`); + const userGroups = response.data.groups.filter(group => !group.members.includes(username)); + setGroups(userGroups); + } catch (error) { + console.error('Error fetching data:', error); + } + }; + const addGroup = async () => { try { await axios.post(`${apiEndpoint}/group/add`, { @@ -39,14 +41,29 @@ const Groups = () => { } }; - const handleJoinGroup = async (groupId) => { - try { - await axios.post(`${apiEndpoint}/groups/${groupId}/join`, { username }); + const handleJoinGroup = (groupId) => { + fetch(`${apiEndpoint}/group/join`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + groupId: groupId, + username: localStorage.getItem('username') + }) + }) + .then(response => { + if (!response.ok) { + throw new Error('Failed to join group'); + } + setGroups(prevGroups => prevGroups.filter(group => group._id !== groupId)); - } catch (error) { + }) + .catch(error => { console.error('Error joining group:', error); - } + }); }; + const handleCloseAlert = () => { setOpenAlert(false); @@ -54,45 +71,45 @@ const Groups = () => { return ( <> -