Skip to content

ClassConnect-org/users-microservice

Repository files navigation

users-microservice

codecov

Este repositorio es parte del backend de la aplicacion class-connect, para conocer informacion mas general sobre el proyecto visita el siguiente link Organization Homepage.

Descripcion

Este microservicio tiene como responsabilidad el manejo de autenticacion de usuarios, ya sea creacion, login, validacion de email y demas datos, el manejo de sesiones utilizando stateless sessions con jwt tokens necesarias para el resto de los microservicios, el manejo de los perfiles incluyendo ediciones, almacenamiento de imagenes y proteccion de datos privados y finalmente la busqueda y administracion de usuarios.

Endpoints

Los endpoints de este microservicio se pueden encontrar en el swagger del mismo (o alternativamente en la carpeta docs/), los mismos son:

Swagger

  • GET /swagger/index.html (Documentacion de la API)

Autenticacion

  • GET /auth (Validar sesion actual)

  • GET /auth/activate/:id?token=string&refresh=bool (Activacion de cuenta)

  • POST /auth/recovery?token=string&refresh=bool (Recupero de cuenta)

  • POST /auth/google (Inicio de sesion/Creacion de cuenta con Google)

  • POST /auth/login (Inicio de sesion con email y password)

  • POST /signup (Creacion de cuenta con email y password)

Perfiles

  • GET /profile (Obtener perfil de la sesion actual)
  • PATCH /profile (Editar perfil de la sesion actual)
  • PUT /profile/picture (Subir imagen como foto de perfil)
  • DELETE /profile/picture (Borrar foto de perfil)
  • GET /profile/:id (Obtener perfil de un usuario dado)

Administracion

  • GET /management?name_contains=string&page=int (Buscar usuarios por nombre, con paginacion)
  • PUT /management/block_status/:id (Bloquear/Desbloquear usuario) - admin only
  • DELETE /management/:id (Eliminar usuario) - admin only

Estructura

Se utiliza la arquitectura package by layer, donde los controladores se pueden encontrar en la carpeta handlers, los servicios en services y los repositorios en repository.

Para cada grupo de rutas hay una interfaz para el Handler y otra para el Service, sin embargo solamente hay dos interfaces diferentes para repositorios (una de users repository y otra de profiles repository).

En la carpeta models se encuentran las representaciones en estructura de datos de cada tabla en la base de datos. A su vez en la carpeta dto se encuentran las representaciones de datos que se envian al cliente y se reciven del mismo.

Todos los cambios a la base de datos estan registrados en la carpeta migrations, donde cada migracion tiene su up.sql (accion creativa) y down.sql (accion desctructiva).

Desarrollo

Docker-compose de uso local

Para correr el microservicio en un entorno de desarrollo local (con base de datos local incluida), se puede utilizar el siguiente comando:

docker compose -f local-dev-compose.yml up --build

Migraciones

Para crear una migracion para cambiar tablas/entradas de la base de datos, se utiliza el comando go-migrate de la siguiente manera:

# Instalar go-migrate si no se tiene instalado
go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest

# Crear una migracion nueva (alternativamente, crear archivos manualmente con el nombre deseado)
migrate create -ext sql -dir ./migrations -seq migration_name

Despliegue

  1. Se hace feature branching desde la rama dev.
  2. Una vez listo para integrar se realiza PR a dev, donde corre el pipeline de testing y coverage.
  3. Una vez esta listo para desplegar se realiza PR a main, se vuelven a correr pipelines de calidad de codigo.
  4. Cuando se hace el push a main se ejecuta el pipeline de continous delivery, construye la imagen y la desplega a k8s.

About

Auth microservice for the Class-Connect project

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published