Skip to content

BETCA (Spring). Back-end con Tecnologías de Código Abierto

License

Notifications You must be signed in to change notification settings

hyl2099/betca-tpv-spring

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Back-end con Tecnologías de Código Abierto: SPRING

Proyecto TPV. Este proyecto es un apoyo docente de la asignatura. Es una aplicación Back-end, mediante programación asíncrona, funcionando conjuntamente con Front-end: betca-tpv-angular, realizado en Angular.

Estado del código

Build Status Quality Gate BCH compliance Heroku broken

Tecnologías necesarias

Java (8) Maven (3.6) Spring-Boot (2.1) Reactor MondoDB (4.0) --- CI: GitHub Travis-CI Sonarcloud Better Code Hub Heroku

⚙️ Instalación del proyecto

  1. Clonar el repositorio en tu equipo, mediante consola:
> cd <folder path>
> git clone https://github.com/miw-upm/betca-tpv-spring
  1. Importar el proyecto mediante IntelliJ IDEA

    1. Import Project, y seleccionar la carpeta del proyecto.
    2. Marcar Create Project from external model, elegir Maven.
    3. NextFinish.
  2. Ejecución

    • Ejecución de test: se utiliza MongoDB embebido.
    • Ejecución en local:
      1. Se debe tener arrancado el motor de MongoDB: mongodb://localhost:27017/tpv
      2. Ejecutar mediante linea de comando: > mvn clean spring-boot:run

📖 Documentación del proyecto

Este proyecto es la práctica de Angular desarrollada de forma colaborativa por todos los alumnos. Se parte de la versión core, ya implementada, y se pretende ampliar con un conjunto de mejoras.
Un Terminal Punto de Venta es un sistema informático que gestiona el proceso de venta mediante una interfaz accesible para los vendedores o compradores. Un único sistema informático permite la creación e impresión del recibo ticket o factura de venta —con los detalles de las referencias y precios— de los artículos vendidos, actualiza los cambios en el nivel de existencias de mercancías (STOCK) en la base de datos...

Arquitectura

Responsabilidades

  • config Clases de configuración de Spring.
  • exceptionstratamiento de errores, convierte las excepciones lanzadas en respuestas de error HTTP.
  • rest_controllers Clases que conforman el API.
    • Define el path del recurso.
    • Deben organizar la recepción de datos de la petición.
    • Delega en los dtos la validación de campos.
    • Delega en exceptions las respuestas de errores HTTP.
    • Delega en los bussines_controllers la ejecución de la petición.
  • bussines_controllers Clases que procesan la petición.
    • Desarrollan el proceso que conlleva la ejecución de la petición.
    • Construye los documents a partir de los dtos de entrada.
    • Delega en los dtos la construcción de los dtos de respuesta a partir de los documents.
    • Delega en los repositories el acceso básico a las BD.
    • Delega en los data_services procesos de acceso avanzado a las BD.
    • Delega en los business_services procesos genéricos avanzados de la capa de negocio.
  • busines_services Clases de servicios de apoyo, como fachada de construcción de PDF, fachada de tratamiento de JWT, encriptación...
  • data_services Clases de servicios avanzados de BD.
  • repositories Clases de acceso a BD mediante el patrón DAO.
    • Operaciones CRUD sobre BD.
    • Consultas a BD.
  • documents Clases con los documentos persistentes en BD y utilidades.

Autenticación

Se plantean mediante Basic Auth para logearse y obtener un API Key o token de tipo JSON Web Tokens (JWT). Uso del Bearer APIkEY para el acceso a los recursos.
Para obtener el API Key se accede al recurso: POST \users\token, enviando por Basic auth las credenciales, van en la cabecera de la petición. Para el acceso a los recursos, se envia el token mediante Bearer auth, tambien en la cabecera de la petición.

Authorization = Basic "user:pass"Base64
Authorization = Bearer "token"Base64

Para asegurar los recursos, se plantea una filosofía distribuida, es decir, se establece sobre cada recursos (clase). Para ello, se anotará sobre cada clase los roles permitidos; modificando el rol sobre el método si éste, tuviese un rol diferente.

@PreAuthorize("hasRole('ADMIN') or hasRole('MANAGER')")
public class Clazz {
    //...
    @PreAuthorize("hasRole('ADMIN')")
    public void method(){...}
    //...
    public void method2(){...}
}

Existe un rol especial que se obtiene cuando se envía el usuario y contraseña por Basic Auth y es el rol de authenticated, sólo se utiliza para logearse.

Tratamiento de errores

Se realiza un tratamiento de error centralizado.

Documentos

Documentos.

DTOs

Son los objetos de transferencia del API, para recibir los datos (input) y enviar las respuestas (output).

  • Los input se encargan de las validaciones de entrada mediante las anotaciones.
  • Los output. Se deben poder construir a partir de los documentos. Añadir la anotación @JsonInclude(Include.NON_NULL) para que no se devuelvan null en el Json.

Bases de datos

Se dispone de un servicio para poblar la BD: DatabaseSeederService se carga automáticamente al iniciar la aplicación en el perfil dev.
Existe el recurso /admins/db para poder borrar o poblar la BD.
El servicio DatabaseSeederService nos permiter recargar las BD.
Se debe intentar no abusar de la recarga, ya que ralentiza la ejecución de los tests.

Si se crea un nuevo documento, se debe añadir el deleteAll() asociado al nuevo documento, dentro del método deleteAllAndInitialize de la clase DatabaseSeederService

About

BETCA (Spring). Back-end con Tecnologías de Código Abierto

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%