Class ProductController

java.lang.Object
com.proyecto.jpa.controller.ProductController

@RestController @RequestMapping("/api/products") public class ProductController extends Object
Controlador REST para la gestión de productos (Capa de Presentación).

Expone endpoints HTTP para realizar operaciones CRUD sobre productos y consultas especializadas como búsqueda por categoría, precio, etc.

Arquitectura de 3 Capas

 ProductController (Capa de Presentación) ← Esta clase
         ↓
 ProductService (Capa de Negocio)
         ↓
 ProductRepository (Capa de Datos)
 
Since:
1.0.0
Version:
1.0.0
Author:
Proyecto JPA
See Also:
  • Constructor Details

    • ProductController

      @Autowired public ProductController(ProductService productService)
  • Method Details

    • getAllProducts

      @GetMapping public org.springframework.http.ResponseEntity<List<Product>> getAllProducts()
      Obtiene todos los productos.
      Returns:
      lista de productos con código 200 OK
    • getProductById

      @GetMapping("/{id}") public org.springframework.http.ResponseEntity<Product> getProductById(@PathVariable Long id)
      Obtiene un producto por su ID.
      Parameters:
      id - el ID del producto
      Returns:
      el producto con código 200 OK, o 404 Not Found si no existe
    • getProductsByCategory

      @GetMapping("/category/{categoryId}") public org.springframework.http.ResponseEntity<List<Product>> getProductsByCategory(@PathVariable Long categoryId)
      Obtiene productos por categoría.
      Parameters:
      categoryId - el ID de la categoría
      Returns:
      lista de productos de esa categoría
    • searchProductsByName

      @GetMapping("/search") public org.springframework.http.ResponseEntity<List<Product>> searchProductsByName(@RequestParam String name)
      Busca productos por nombre (búsqueda parcial).
      Parameters:
      name - texto a buscar en el nombre
      Returns:
      lista de productos que coinciden
    • getProductsByPriceRange

      @GetMapping("/price-range") public org.springframework.http.ResponseEntity<List<Product>> getProductsByPriceRange(@RequestParam BigDecimal minPrice, @RequestParam BigDecimal maxPrice)
      Obtiene productos en un rango de precios.
      Parameters:
      minPrice - precio mínimo
      maxPrice - precio máximo
      Returns:
      lista de productos en ese rango
    • getAvailableProducts

      @GetMapping("/available") public org.springframework.http.ResponseEntity<List<Product>> getAvailableProducts()
      Obtiene productos disponibles (con stock).
      Returns:
      lista de productos con stock > 0
    • getTopSellingProducts

      @GetMapping("/top-selling") public org.springframework.http.ResponseEntity<List<Product>> getTopSellingProducts(@RequestParam(defaultValue="5") int limit)
      Obtiene los productos más vendidos.
      Parameters:
      limit - número de productos a retornar
      Returns:
      lista de productos más vendidos
    • createProduct

      @PostMapping public org.springframework.http.ResponseEntity<Product> createProduct(@Valid @RequestBody @Valid Product product)
      Crea un nuevo producto.
      Parameters:
      product - el producto a crear
      Returns:
      el producto creado con código 201 Created
    • updateProduct

      @PutMapping("/{id}") public org.springframework.http.ResponseEntity<Product> updateProduct(@PathVariable Long id, @Valid @RequestBody @Valid Product product)
      Actualiza un producto existente.
      Parameters:
      id - el ID del producto a actualizar
      product - los nuevos datos del producto
      Returns:
      el producto actualizado con código 200 OK
    • updateStock

      @PatchMapping("/{id}/stock") public org.springframework.http.ResponseEntity<Product> updateStock(@PathVariable Long id, @RequestParam Integer newStock)
      Actualiza el stock de un producto.
      Parameters:
      id - el ID del producto
      newStock - el nuevo valor de stock
      Returns:
      el producto actualizado con código 200 OK
    • updatePrice

      @PatchMapping("/{id}/price") public org.springframework.http.ResponseEntity<Product> updatePrice(@PathVariable Long id, @RequestParam BigDecimal newPrice)
      Actualiza el precio de un producto.
      Parameters:
      id - el ID del producto
      newPrice - el nuevo precio
      Returns:
      el producto actualizado con código 200 OK
    • deleteProduct

      @DeleteMapping("/{id}") public org.springframework.http.ResponseEntity<Void> deleteProduct(@PathVariable Long id)
      Elimina un producto por su ID.
      Parameters:
      id - el ID del producto a eliminar
      Returns:
      código 204 No Content si se eliminó
    • countProducts

      @GetMapping("/count") public org.springframework.http.ResponseEntity<Long> countProducts()
      Cuenta el número total de productos.
      Returns:
      el número de productos con código 200 OK