feat: endpoint /api/v1/filtros para catalogos de area, subarea, cargo y local

Expone GET /api/v1/filtros?tipo=AREA|SUBAREA|CARGO|LOCAL sobre las foreign
tables area, subarea, cargo y locales, devolviendo {id, text} por item.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GDaQQ4oDPiTnXr2FfDLnst
parent e22d10c6
package so.planilla_be.rentaquinta.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import so.planilla_be.rentaquinta.dto.FiltroItemDTO;
import so.planilla_be.rentaquinta.dto.TipoFiltro;
import so.planilla_be.rentaquinta.service.FiltrosService;
import java.util.List;
@Tag(name = "Filtros", description = "Catálogos para los filtros de la grilla (área, subárea, cargo, local)")
@RestController
@RequestMapping("/api/v1/filtros")
public class FiltrosController {
private final FiltrosService service;
public FiltrosController(FiltrosService service) {
this.service = service;
}
@Operation(summary = "Lista catálogo por tipo: AREA, SUBAREA, CARGO o LOCAL")
@GetMapping
public List<FiltroItemDTO> listar(@RequestParam TipoFiltro tipo) {
return service.listar(tipo);
}
}
package so.planilla_be.rentaquinta.dto;
public record FiltroItemDTO(Integer id, String text) {
}
package so.planilla_be.rentaquinta.dto;
public enum TipoFiltro {
AREA,
SUBAREA,
CARGO,
LOCAL
}
package so.planilla_be.rentaquinta.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Entity
@Table(name = "area", schema = "public")
public class Area {
@Id
@Column(name = "codarea")
private Integer codarea;
@Column(name = "desarea")
private String desarea;
}
package so.planilla_be.rentaquinta.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Entity
@Table(name = "cargo", schema = "public")
public class Cargo {
@Id
@Column(name = "codcargo")
private Integer codcargo;
@Column(name = "descargo")
private String descargo;
}
package so.planilla_be.rentaquinta.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Entity
@Table(name = "locales", schema = "public")
public class Local {
@Id
@Column(name = "id_local")
private Integer idLocal;
@Column(name = "deslocal")
private String deslocal;
}
package so.planilla_be.rentaquinta.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Entity
@Table(name = "subarea", schema = "public")
public class Subarea {
@Id
@Column(name = "id_subarea")
private Integer idSubarea;
@Column(name = "nombre")
private String nombre;
}
package so.planilla_be.rentaquinta.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import so.planilla_be.rentaquinta.entity.Area;
public interface AreaRepository extends JpaRepository<Area, Integer> {
}
package so.planilla_be.rentaquinta.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import so.planilla_be.rentaquinta.entity.Cargo;
public interface CargoRepository extends JpaRepository<Cargo, Integer> {
}
package so.planilla_be.rentaquinta.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import so.planilla_be.rentaquinta.entity.Local;
public interface LocalRepository extends JpaRepository<Local, Integer> {
}
package so.planilla_be.rentaquinta.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import so.planilla_be.rentaquinta.entity.Subarea;
public interface SubareaRepository extends JpaRepository<Subarea, Integer> {
}
package so.planilla_be.rentaquinta.service;
import so.planilla_be.rentaquinta.dto.FiltroItemDTO;
import so.planilla_be.rentaquinta.dto.TipoFiltro;
import java.util.List;
public interface FiltrosService {
List<FiltroItemDTO> listar(TipoFiltro tipo);
}
package so.planilla_be.rentaquinta.service.impl;
import org.springframework.stereotype.Service;
import so.planilla_be.rentaquinta.dto.FiltroItemDTO;
import so.planilla_be.rentaquinta.dto.TipoFiltro;
import so.planilla_be.rentaquinta.repository.AreaRepository;
import so.planilla_be.rentaquinta.repository.CargoRepository;
import so.planilla_be.rentaquinta.repository.LocalRepository;
import so.planilla_be.rentaquinta.repository.SubareaRepository;
import so.planilla_be.rentaquinta.service.FiltrosService;
import java.util.List;
@Service
public class FiltrosServiceImpl implements FiltrosService {
private final AreaRepository areaRepository;
private final SubareaRepository subareaRepository;
private final CargoRepository cargoRepository;
private final LocalRepository localRepository;
public FiltrosServiceImpl(AreaRepository areaRepository, SubareaRepository subareaRepository,
CargoRepository cargoRepository, LocalRepository localRepository) {
this.areaRepository = areaRepository;
this.subareaRepository = subareaRepository;
this.cargoRepository = cargoRepository;
this.localRepository = localRepository;
}
@Override
public List<FiltroItemDTO> listar(TipoFiltro tipo) {
return switch (tipo) {
case AREA -> areaRepository.findAll().stream()
.map(a -> new FiltroItemDTO(a.getCodarea(), a.getDesarea()))
.toList();
case SUBAREA -> subareaRepository.findAll().stream()
.map(s -> new FiltroItemDTO(s.getIdSubarea(), s.getNombre()))
.toList();
case CARGO -> cargoRepository.findAll().stream()
.map(c -> new FiltroItemDTO(c.getCodcargo(), c.getDescargo()))
.toList();
case LOCAL -> localRepository.findAll().stream()
.map(l -> new FiltroItemDTO(l.getIdLocal(), l.getDeslocal()))
.toList();
};
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment