API para la Gestión de Usuarios y Actividades 🎉
Este proyecto consiste en una API REST diseñada para gestionar usuarios y actividades, permitiendo a las aplicaciones cliente consumir sus servicios e interactuar eficientemente con el sistema.Para garantizar la seguridad y un acceso adecuado, la API implementa un mecanismo de autenticación basado en tokens utilizando Laravel Passport.
Requisitos Técnicos
Requisitos Técnicos
- Gestión de Usuarios👨👩👦👦
- Registro de nuevos usuarios: Permite a un nuevo usuario crear una cuenta en el sistema proporcionando información esencial, facilitando su acceso a las funcionalidades personalizadas de la plataforma.
- Actualización de datos del usuario: Los usuarios pueden modificar su información personal, asegurando que sus detalles estén siempre actualizados y reflejen cambios como dirección de correo o número de teléfono.
- Eliminación de usuarios: Posibilidad de un usuario de eliminar su cuenta.
- Consulta de información de usuarios: Acceso a detalles específicos de usuarios registrados, útil para administración y soporte dentro del sistema.
- Gestión de Actividades📅
- Creación de nuevas actividades: Los administradores pueden definir y programar eventos o tareas, especificando detalles como fecha, hora, lugar y capacidad máxima de participantes.
- Consulta de actividades: Los usuarios pueden explorar las actividades disponibles, obteniendo información detallada para decidir en cuáles desean participar.
- Apuntarse a una actividad: Funcionalidad que permite a los usuarios inscribirse en actividades de su interés, gestionando cupos y confirmaciones de asistencia de manera eficiente.
- Importación/Exportación📥📤
- Importar actividades desde un archivo JSON: Facilita la carga masiva de actividades al sistema mediante archivos JSON estructurados, agilizando la actualización y gestión de eventos.
- Exportar actividades en formato JSON: Permite extraer y respaldar la información de las actividades en archivos JSON, facilitando la integración con otras aplicaciones o análisis externos.
- Roles de los usuarios 📜
-
Role User 🧑💻:
- Puede: crear, ver, editar y eliminar su propia cuenta; listar(exportar) e inscribirse en actividades.
- No puede: ver, crear, editar, borrar la cuenta de otro usuario; crear o importar actividades.
Role Admin 🧑🎓:
- Puede: ver, editar y eliminar cualquier cuenta; crear, ver, editar, borrar actividades; importar y exportar actividades.
- Base de Datos🗄️
- La API se integra con una base de datos MySQL para gestionar y almacenar de manera eficiente la información de usuarios y actividades. Esta elección garantiza una gestión robusta de los datos, permitiendo operaciones CRUD seguras y consultas optimizadas que aseguran la integridad y consistencia de la información.
- Autenticación🔐
- Se implementa autenticación basada en tokens utilizando Laravel Passport, proporcionando una capa de seguridad que regula el acceso a los recursos de la API. Este enfoque garantiza que solo usuarios autenticados puedan interactuar con el sistema, protegiendo los datos sensibles y manteniendo la integridad de las operaciones.
- Test 🧪🔬
- Se empleó la metodología TDD, creando pruebas automatizadas antes del desarrollo del código funcional. Este enfoque asegura que cada funcionalidad esté respaldada por una prueba que verifica su correcto funcionamiento, promoviendo un diseño más limpio y reduciendo la probabilidad de errores.
Se ha utilizado la librería Spatie de Laravel para la gestión de roles y permisos, proporcionando una forma flexible y eficiente de controlar el acceso a las funcionalidades de la API.
Endpoints
Endpoints
A continuación, se detallan los principales endpoints disponibles.
Para probar el enpoint se debe sustituir la {base_url} por el subdominio de la API, que en mi caso seria https://project-api-activities.diegochacondev.es/ seguido del resto del endpoint. Por ejemplo para crear un usuario se debe poner: https://project-api-activities.diegochacondev.es/api/register
, ademas de que en algunos habra que poner el user_id y/o el activity_id segun lo requiera.
- Usuario
- Registro(creacion) de un nuevo usuario (POST):
{base_url}/api/register
- Editar datos de un usuario (PUT):
{base_url}/api/users/{user_id}
- Ver información de un usuario (GET):
{base_url}/api/users/{user_id}
- Eliminar un usuario (DELETE):
{base_url}/api/users/{user_id}
- Actividades
- Crear una nueva actividad (POST):
{base_url}/api/activities
- Ver una actividad (GET):
{base_url}/api/activities/{activity_id}
- Editar una actividad (PUT):
{base_url}/api/activities/{activity_id}
- Eliminar una actividad (DELETE):
{base_url}/api/activities/{activity_id}
- Un usuario se apunta a una actividad (POST):
{base_url}/api/users/{user_id}/activities/{activity_id}
- Importación/Exportació
- Importar actividades desde un archivo JSON (POST):
{base_url}/api/activities/import
- Exportar(listar) actividades en formato JSON (GET):
{base_url}/api/activities/export
Formato del JSON
Formato del JSON
Ejemplo de cómo se estructuran las actividades en formato JSON:
[
{
"name": "Sesión de Yoga",
"description": "Clase de yoga para relajarse y estirar los músculos.",
"max_capacity": 20
},
{
"name": "Taller de cocina",
"description": "Aprender a cocinar platos mediterráneos.",
"max_capacity": 15
},
{
"name": "Curso de fotografía",
"description": "Taller para mejorar tus habilidades de fotografía.",
"max_capacity": 10
},
{
"name": "Escalada en roca",
"description": "Actividad de escalada en un muro de escalada interior.",
"max_capacity": 12
},
{
"name": "Sesión de meditación",
"description": "Sesión guiada de meditación para la paz interior.",
"max_capacity": 30
}
]