Skip to content

Code Structure

Ana Belén Hernández edited this page May 21, 2025 · 5 revisions

📚 Proyecto Spring Boot AWS API

Una aplicación completa de Spring Boot con integración de despliegue en AWS.

📂 Estructura del Proyecto

spring-boot-aws-api/
├── 📂 src/
│   ├── 📂 main/
│   │   ├── 📂 java/
│   │   │       │   └── 📄 ProductRepository.java
│   │   │       └── 📄 ApiApplication.java
│   │   └── 📂 resources/
│   │       ├── 📂 static/
│   │       │   ├── 📂 css/
│   │       │   │   └── 📄 styles.css
│   │       │   ├── 📂 js/
│   │       │   │   └── 📄 script.js
│   │       │   └── 📄 index.html
│   │       └── 📄 application.properties
├── 📂 .github/
│   └── 📂 workflows/
│       └── 📄 deploy.yml
├── 📄 Dockerfile
└── 📄 README.md

🧩 Componentes Principales

📊 Modelo (Model)

La clase Product.java define la entidad principal con sus atributos y mapeo JPA:

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private String description;
    private Double price;
    private Integer stock;
    
    // Getters y Setters
}

Función: Define la estructura de datos y el mapeo a la tabla de base de datos.

🗄️ Repositorio (Repository)

ProductRepository.java proporciona los métodos de acceso a datos:

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
    // Métodos heredados: findAll(), findById(), save(), delete()
}

Función: Proporciona operaciones CRUD automáticas gracias a Spring Data JPA.

🎮 Controlador (Controller)

ProductController.java implementa los endpoints REST:

@RestController
@RequestMapping("/api/products")
public class ProductController {
    @Autowired
    private ProductRepository productRepository;
    
    @GetMapping
    public List<Product> getAllProducts() {...}
    
    @GetMapping("/{id}")
    public ResponseEntity<Product> getProductById(@PathVariable Long id) {...}
    
    @PostMapping
    public ResponseEntity<Product> createProduct(@RequestBody Product product) {...}
    
    @PutMapping("/{id}")
    public ResponseEntity<Product> updateProduct(...) {...}
    
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteProduct(@PathVariable Long id) {...}
}

Función: Expone los endpoints HTTP y coordina las operaciones de la aplicación.

📱 Frontend

HTML (index.html)

Define la estructura de la interfaz de usuario con:

  • Formulario para crear/editar productos
  • Tabla para visualizar la lista de productos
  • Integración con archivos CSS y JavaScript

CSS (styles.css)

Aplica estilos visuales a la interfaz:

  • Disposición responsive
  • Esquema de colores
  • Estilos de formularios y tablas

JavaScript (script.js)

Implementa la lógica interactiva:

  • Comunicación con la API REST
  • Actualización dinámica de la interfaz
  • Gestión del formulario y validación

⚙️ Configuración

El archivo application.properties contiene la configuración principal:

# Configuración de la base de datos
spring.datasource.url=jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:api_database}
spring.datasource.username=${DB_USERNAME:root}
spring.datasource.password=${DB_PASSWORD:password}

# JPA/Hibernate
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.show-sql=true

# Server
server.port=8080

Función: Define la configuración de conexión a la base de datos y comportamiento de la aplicación.

🔄 Flujo de Control

El flujo de control en la aplicación sigue un patrón MVC:

  1. Las peticiones HTTP llegan al Controlador
  2. El controlador utiliza el Repositorio para acceder a los datos
  3. El repositorio interactúa con la base de datos a través de operaciones JPA
  4. Los datos se devuelven como Modelos en formato JSON
  5. El Frontend muestra los datos y permite la interacción del usuario └── 📂 com/anabelen/api/ │ │ │ ├── 📂 controller/ │ │ │ │ └── 📄 ProductController.java │ │ │ ├── 📂 model/ │ │ │ │ └── 📄 Product.java │ │ │ ├── 📂 repository/ │ │ │ │ └── 📄 ProductRepository.java │ │ │