Skip to content

Repository files navigation

# README - 🕹️GameRoom🕹️

Proyecto 6 - Proyecto LFG Web App con Laravel - Semanas 11 y 12

Backend de una Gameroom, por Andrés Labat, Vincenzo Donnarumma y Bienvenida Ladrón.
Desarrollado como parte del Bootcamp de Full Stack Developer de Geekshubs Academy.

Bienvenido a nuestro proyecto

_______________________________________________

Gameroom backend es un proyecto que recrea el backend de una gameroom utilizando php, laravel, mySQL, GIT y GitHub. Este proyecto incluye una base de datos relacional, así como diversos endpoints que te permiten registrarte, hacer login, acceder a la información almacenada en las tablas, e incluso actualizarla y borrarla.


Tabla de Contenidos

📋 Apartados
  1. 🚀 Introducción
  2. 🎯 Descripción del proyecto
  3. 🏗️ Diseño de la DDBB
  4. 🔚 Endpoints
  5. 🔧 Tecnologías utilizadas
  6. 🚀 Deploy
  7. 🍃 Ramas del repositorio
  8. 🚧 Problemas y soluciones
  9. 📁Importar endpoints con thunder
  10. 📦 Instrucciones dockerización
  11. 🌐 Enlaces importantes
  12. ⚖️ Licencia
  13. 🤝 Como contribuir
  14. 📧 Contacto
  15. 👏 Agradecimientos

Introducción

🚀 El planteamiento para desarrollar este proyecto consiste en desarrollar una estructura Backend completa (DDBB+PHP+Laravel) para una aplicación web LFG (Looking for Group), que permita a los empleados contactar entre ellos para formar grupos y jugar videojuegos como actividad de ocio afterwork.

Descripción del Proyecto

🎯 Dada la situación sanitaria y el trabajo remoto, la empresa desea mejorar la interacción entre los empleados. La primera fase del proyecto es crear una aplicación web LFG que permita a los usuarios registrarse, autenticarse, crear y unirse a partidas de videojuegos, así como intercambiar mensajes en un chat común. El objetivo es fomentar la socialización y compartir momentos de ocio.

Diseño de la DDBB

🏗️ Se establece que solo hay un rol por usuario, y que este es el que le da los privilegios para poder usar unos endpoints determinados u otros.

Endpoints

🔚 Estos son los endpoints de los que consta el proyecto, clasificados en base a la tabla a la que hacen referencia.

1.Register

  • Descripción: Registra un nuevo usuario.
  • Acceso: Público.
  • Validaciones: Verifica la validez del nombre, apodo, correo electrónico, contraseña y foto del usuario.
    • Registrar Usuario

      POST <http://localhost:8000/api/register>
      
      

      Payload:

      {
          "name": "Nombre del Usuario",
          "nickname": "Apodo del Usuario",
          "email": "correo@ejemplo.com",
          "password": "contraseña",
          "photo": "url_de_la_foto"
      }
      

2. Login

  • Descripción: Inicia sesión de un usuario existente.
  • Acceso: Público.
  • Validaciones: Verifica la validez del correo electrónico y la contraseña del usuario.
    • Iniciar Sesión

      POST <http://localhost:8000/api/login>
      
      

      Payload:

      {
          "email": "correo@ejemplo.com",
          "password": "contraseña"
      }
      

3. Profile

  • Descripción: Obtiene el perfil del usuario autenticado.
  • Acceso: Solo para usuarios autenticados.
    • Obtener Perfil

      GET <http://localhost:8000/api/profile>
      
      

4. Logout

  • Descripción: Cierra la sesión del usuario autenticado.
  • Acceso: Solo para usuarios autenticados.
    • Cerrar Sesión

      POST <http://localhost:8000/api/logout>
      
      

User:

1. Update

  • Descripción: Actualiza el perfil del usuario autenticado.
  • Acceso: Solo para usuarios autenticados.
    • Actualizar Perfil

      POST <http://localhost:8000/api/user>
      
      

      Payload:

      {
          "name": "Nuevo Nombre",
          "nickname": "Nuevo Apodo",
          "email": "nuevo_correo@ejemplo.com",
          "password": "nueva_contraseña",
          "photo": "nueva_url_de_la_foto"
      }
      

2. Delete User

  • Descripción: Elimina el usuario autenticado.
  • Acceso: Solo para usuarios autenticados.
    • Eliminar Usuario

      DELETE <http://localhost:8000/api/user>
      
      

Game:

1. Get All Games

  • Descripción: Obtiene todos los juegos.
  • Acceso: Público.
    • Obtener Todos los Juegos

      GET <http://localhost:8000/api/games>
      
      

2. Get Game By ID

  • Descripción: Obtiene un juego específico por su ID.

  • Acceso: Público.

    • Obtener Juego por ID
      GET <http://localhost:8000/api/game/{id}>
      
    

Room:

1. Get Room By ID

  • Descripción: Obtiene una sala por su ID.
  • Acceso: Solo para usuarios autenticados.
    • Obtener Sala

      GET <http://localhost:8000/api/room/{id}>
      
      

2. Create Room

  • Descripción: Crea una nueva sala.
  • Acceso: Solo para usuarios autenticados.
    • Crear Sala

      POST <http://localhost:8000/api/room>
      
      

      Payload:

      {
          "name": "Nombre de la Sala",
          "game_id": "ID del Juego"
      }
      

3. Update Room

  • Descripción: Actualiza una sala existente.
  • Acceso: Solo para usuarios autenticados y propietarios de la sala.
    • Actualizar Sala

      PUT <http://localhost:8000/api/room/{id}>
      

      Payload:

      {
          "name": "Nuevo Nombre de la Sala",
          "game_id": "Nuevo ID del Juego"
      }

4. Delete Room

  • Descripción: Elimina una sala existente.

  • Acceso: Solo para usuarios autenticados y propietarios de la sala.

    DELETE <http://localhost:8000/api/room/{id}>
    

Room_User:

1. Rooms Member

  • Descripción: Obtiene los miembros de una sala por su ID.
  • Acceso: Solo para usuarios autenticados y miembros de la sala.
  • Obtener Miembros de la Sala
GET <http://localhost:8000/api/members-room/{id}>

2. Get Rooms Member

  • Descripción: Obtiene las salas del usuario autenticado.
  • Acceso: Solo para usuarios autenticados.
  • Obtener Salas del Usuario
GET <http://localhost:8000/api/rooms-user>

3. Delete Member Room

  • Descripción: Eliminar un usuario a una sala existente.

  • Acceso: Solo para usuarios autenticados y propietarios de la sala.

  • Añadir usuario

    DELETE <http://localhost:8000/api/room-user>
    

    Payload:

    {
      "user_id": "Número de user_id",
      "room_id": "Número de room_id"
    }

4. Add Member to room

  • Descripción: Añadir un usuario a una sala existente.

  • Acceso: Solo para usuarios autenticados y propietarios de la sala.

  • Añadir usuario

    POST <http://localhost:8000/api/room-user>
    

    Payload:

    {
      "user_id": "Número de user_id",
      "room_id": "Número de room_id"
    }

Message:

1. Create Message

  • Descripción: Crear un nuevo mensaje a un chat existente.

  • Acceso: Solo para usuarios autenticados e integrantes de la sala.

    POST <http://localhost:8000/api/message>
    

    Payload:

    { 
      "room_id": 1,
      "message":"Mensaje que quieras introducir"
    }

2.Room Chat

  • Descripción: Obtiene los mensajes de un chat existente.

  • Acceso: Solo para usuarios autenticados e integrantes de la sala.

    GET <http://localhost:8000/api/messages>
    

    Payload:

    { 
      "room_id": 1 
    }

3.Delete Message

  • Descripción: Elimina un mensaje seleccionado.

  • Acceso: Solo para usuarios autenticados e integrantes de la sala.

    DELETE <http://localhost:8000/api/messages>
    

    Payload:

    { 
      "room_id": 1 ,
      "message": "Mensaje a eliminar"
    }

4.Update Message

  • Descripción: Actualiza un mensaje seleccionado.

  • Acceso: Solo para usuarios autenticados e integrantes de la sala.

    PUT <http://localhost:8000/api/message>
    

    Payload:

    { 
      "room_id":11,
      "message": "Mensaje actual",
      "newMessage": "Nuevo mensaje"
    }

Super Admin:

1.Create Game

  • Descripción: Crea un nuevo juego en la tabla.

  • Acceso: Solo para usuarios autenticados como super_admin.

    POST <http://localhost:8000/api/game>
    

    Payload:

    { 
     "name":"Zelda",
     "category":"adventure" 
    }

2.Update Game

  • Descripción: Actualiza un juego en la tabla.

  • Acceso: Solo para usuarios autenticados como super_admin.

    PUT <http://localhost:8000/api/game/{id}>
    

    Payload:

    { 
     "name":"Nombre del juego",
     "category":"adventure",
     "user_id":13
    }

3.Delete Game

  • Descripción: Actualiza un juego en la tabla.

  • Acceso: Solo para usuarios autenticados como super_admin.

    DELETE <http://localhost:8000/api/game/{id}>
    

4.Get All Rooms

  • Descripción: Obtiene todas las salas existentes.

  • Acceso: Solo para usuarios autenticados como super_admin.

    GET <http://localhost:8000/api/rooms>
    

5.Get All Users

  • Descripción: Obtiene todos los ususarios de la aplicación.

  • Acceso: Solo para usuarios autenticados como super_admin.

    GET <http://localhost:8000/api/rooms>
    

Tecnologías Utilizadas

🔧 Tecnologías
  • Php: es el lenguaje de programación sobre el que se han montado el servidor y los distintos endpoints.

  • Laravel: Diseñado para facilitar y agilizar el desarrollo de aplicaciones web, Laravel sigue el patrón de arquitectura MVC (Modelo-Vista-Controlador) y ofrece numerosas características y herramientas que permiten a los desarrolladores crear aplicaciones robustas y escalables de manera eficiente..

  • MySQL: Es el sistema de gestión de bases de datos sobre el que se han construido las tablas en SQL.

  • Git: Sistema de control de versiones para el seguimiento de cambios en el proyecto.

  • GitHub: Plataforma para alojar el repositorio en línea y colaborar en el desarrollo del proyecto.

Deploy

🚀 Por el momento su único uso es en local, en el futuro se realizará el deploy.

Ramas del Repositorio

🍃 Este proyecto se ha desarrollado en las siguientes ramas:

1.- Master: considerada como la rama principal, en ella únicamente se ha iniciado y finalizado el proyecto para poder hacer el deploy.

2.- Dev: es la rama sobre la que pivotan todas las features.

3.- Middleware: aquí procedimos a la creación de los middlewares necesarios para la aplicación, en este caso IsSuperAdmin y el Auth:Sanctum.

4.- UserController: contiene la creación y testeo de todos los endpoints del usuario.

5.- GameController: compuesta por los commits que hacen referencia a los endpoints de la tabla "games".

6.- MessageController: abarca la creación y comprobación de los controladores de la tabla intermedia "messages".

7.- SuperAdminController: únicamente se han realizado aquí los endpoints a los que pueden acceder los usuarios con role super admin.

8.- Room_userController: en esta rama se crearon los controladores de la tabla "room_user"

9.- Readme: es la última rama, se creó únicamente para crear este README.

Problemas y Soluciones

1. Una gran cantidad de endpoints fallaban por un error 500 sin aparente conexión entre ellos.

  • 🚧Problema: Este error 500 nos decía que era un tipo de error de servidor y nos ocurría en practicamente todos los controladores de tablas intermedias.

    • 💡Solución: Revisar los modelos y percatarnos de que no estabamos incluyendo las foreign keys en ellos, por lo que no reconocía las request como válidas, también fue importante en el caso de los endpoints de messages el revisar las importaciones de dichos modelos en el archivo api.php.

    Error 500 al añadir a un miembro nuevo a una sala

2. Imposibilidad de eliminar usuarios de la tabla una vez realizados los seeders que rellenan toda la base de datos.

  • 🚧Problema: Comprobando el correcto funcionamiento de los endpoints, una vez finalizados todos los controladores, nos encontramos ante un error de tipo 500 en el caso de querer eliminar un usuario de nuestra tabla principal "users".

    • 💡Solución: Añadir en las migraciónes en la parte de código que hace referencia a todas las foreign keys que estas debían tener la propiedad constrained y además que pudieran realizarse los deletes en cascade.
    ->constrained()->onDelete('cascade')

Error 500 al intentar eliminar un usuario

Importar endpoints con thunder

📁 En la carpeta app/Http/EndpointsThunder encontrarás todos los archivos necesarios para poder ejecutar las rutas en Thunder, recuerda importarlo en un Thunder:

Instrucciones Dockerización

📦 Para facilitar la implementación y ejecución del proyecto, se proporcionan instrucciones de Dockerización:

  1. Clonar el Repositorio:

    git clone <https://github.com/AndresLabat/Project6-GameRoom.git>
    
  2. Acceder al Directorio del Proyecto:

    cd Project6-GameRoom
    
  3. Configuración de Variables de Entorno:

Crear un archivo .env basado en el ejemplo .env.example y configurar las variables de entorno necesarias.

  1. Construir y Levantar Contenedores:

    docker-compose up -d --build
    
  2. Instalar Dependencias de Laravel:

    docker-compose exec app composer install
    
  3. Generar Clave de Laravel:

    docker-compose exec app php artisan key:generate
    
  4. Ejecutar Migraciones y Seeders:

    docker-compose exec app php artisan migrate --seed
    
  5. Acceder a la Aplicación:

La aplicación estará disponible en http://localhost.

Enlaces Importantes

🌐 Mediante estos enlaces puedes acceder a ellos:

Licencia

⚖️ Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para obtener más información.

Cómo Contribuir

🤝 Si deseas contribuir a este proyecto, puedes realizar un fork del repositorio en GitHub, hacer tus cambios y enviar una solicitud de extracción (pull request). Tu contribución será revisada y, si es apropiada, se fusionará con la rama principal.

  1. Haz un fork de este repositorio.

  2. Crea una nueva rama para tu contribución: git checkout -b tu-nueva-caracteristica.

  3. Realiza tus cambios y commitea: git commit -m "Añade una nueva característica".

  4. Envía tus cambios al repositorio: git push origin tu-nueva-caracteristica.

  5. Crea una solicitud de extracción en GitHub.

Espero que disfrutes explorando y utilizando este backend de nuestra Gameroom. Si tienes alguna pregunta o necesitas asistencia, no dudes en ponerte en contacto con nosotros a través de la información de contacto proporcionada.

Contacto

📧 Para cualquier pregunta o comentario, no dudes en ponerte en contacto:

 const developer1 = "Andrés Labat";

 const developer2 = "Vincenzo Donnaruma";

 const developer3 = "Bienvenida Ladrón";

 console.log("Desarrollado por: " + developer1 + developer2 + developer3);
  • Vincenzo Donnarumma

  • Andrés Labat

  • Bienve Ladrón

  • Fecha de Comienzo del Proyecto*: 30/11/2023

Agradecimientos

👏 Agradecimentos a GeeksHubs Academy por los conocimientos que hemos podido adquirir a lo largo de todo el curso y que han hecho posible este proyecto, y a nuestros queridos profesores David Ochando y Dani Tarazona y su gran paciencia con nosotros.

¡Gracias por visitar GameRoom Backend y explorar nuestro proyecto!

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages