Class AbstractReadOnlyController<E,D,ID,FD extends GenericFilterDTO>

java.lang.Object
org.praxisplatform.uischema.controller.base.AbstractCrudController<E,D,ID,FD>
org.praxisplatform.uischema.controller.base.AbstractReadOnlyController<E,D,ID,FD>

public abstract class AbstractReadOnlyController<E,D,ID,FD extends GenericFilterDTO> extends AbstractCrudController<E,D,ID,FD>

📄 Controller Base — Somente Leitura (Views JPA / @Immutable)

Para recursos materializados a partir de views do banco ou entidades @Immutable, este controller oferece uma superfície de leitura completa — e bloqueia escrita com 405. Sem duplicar endpoints; você herda e ganha tudo de graça.

✨ O que vem pronto

GET /{id}
GET /all
POST /filter
POST /filter/cursor
POST /locate
GET /by-ids
POST /options/filter
GET /options/by-ids
POST /option-sources/{sourceKey}/options/filter
GET /option-sources/{sourceKey}/options/by-ids
POST /stats/group-by
POST /stats/timeseries
POST /stats/distribution
GET /schemas → /schemas/filtered

Escrita segura: POST /, PUT /{id}, DELETE /{id}, DELETE /batch → 405 Method Not Allowed

Filtros (26 operações) + paginação tradicional e por cursor; options id/label, option-sources, stats e schema x-ui.

Quando escolher esta base

  • Views materializadas, visoes SQL ou entidades anotadas com @Immutable.
  • Recursos analiticos ou de consulta em que a escrita nao deve ser exposta pela API.
  • Superficies em que a UI ainda precisa de filtros, options e schema metadata-driven.

Esta classe preserva a mesma superficie de leitura do CRUD base e apenas sobrescreve as operacoes mutantes para responder com 405 Method Not Allowed. Assim, a API continua coerente para consumidores de schema, filtros e componentes dinâmicos, sem sugerir capacidades de escrita inexistentes.

  • Constructor Details

    • AbstractReadOnlyController

      public AbstractReadOnlyController()
  • Method Details

    • isReadOnlyResource

      protected boolean isReadOnlyResource()
      Description copied from class: AbstractCrudController
      Indica se o recurso Ă© somente leitura. Subclasses podem sobrescrever.
      Overrides:
      isReadOnlyResource in class AbstractCrudController<E,D,ID,FD extends GenericFilterDTO>
    • create

      @PostMapping public org.springframework.http.ResponseEntity<RestApiResponse<D>> create(@Valid @RequestBody D dto)
      Bloqueia criacao de registros em recursos somente leitura.

      A operacao e mantida no controller apenas para preservar a simetria contratual com a base CRUD. Na pratica, qualquer tentativa de POST / falha com 405, deixando claro para clientes HTTP e para integradores que o recurso nao aceita escrita.

      Overrides:
      create in class AbstractCrudController<E,D,ID,FD extends GenericFilterDTO>
      Parameters:
      dto - payload recebido; ignorado porque a operacao e proibida
      Returns:
      nunca retorna normalmente
      Throws:
      org.springframework.web.server.ResponseStatusException - sempre com 405 Method Not Allowed
    • update

      @PutMapping("/{id}") public org.springframework.http.ResponseEntity<RestApiResponse<D>> update(@PathVariable ID id, @Valid @RequestBody D dto)
      Bloqueia atualizacao de registros em recursos somente leitura.
      Overrides:
      update in class AbstractCrudController<E,D,ID,FD extends GenericFilterDTO>
      Parameters:
      id - identificador do recurso alvo
      dto - payload recebido; ignorado porque a operacao e proibida
      Returns:
      nunca retorna normalmente
      Throws:
      org.springframework.web.server.ResponseStatusException - sempre com 405 Method Not Allowed
    • delete

      @DeleteMapping("/{id}") public org.springframework.http.ResponseEntity<Void> delete(@PathVariable ID id)
      Bloqueia exclusao individual de registros em recursos somente leitura.
      Overrides:
      delete in class AbstractCrudController<E,D,ID,FD extends GenericFilterDTO>
      Parameters:
      id - identificador do recurso alvo
      Returns:
      nunca retorna normalmente
      Throws:
      org.springframework.web.server.ResponseStatusException - sempre com 405 Method Not Allowed
    • deleteBatch

      @DeleteMapping("/batch") public org.springframework.http.ResponseEntity<Void> deleteBatch(@RequestBody List<ID> ids)
      Bloqueia exclusao em lote de registros em recursos somente leitura.
      Overrides:
      deleteBatch in class AbstractCrudController<E,D,ID,FD extends GenericFilterDTO>
      Parameters:
      ids - identificadores recebidos; ignorados porque a operacao e proibida
      Returns:
      nunca retorna normalmente
      Throws:
      org.springframework.web.server.ResponseStatusException - sempre com 405 Method Not Allowed