Coder Social home page Coder Social logo

hossvel / betca-tpv-spring Goto Github PK

View Code? Open in Web Editor NEW

This project forked from gabehh/betca-tpv-spring

0.0 1.0 0.0 1.77 MB

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

Home Page: http://miw.etsisi.upm.es

License: MIT License

Java 100.00%

betca-tpv-spring's Introduction

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

betca-tpv-spring's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.