personal-finances/Common/src/main/java/dev/mvvasilev/common/controller/AbstractRestController.java

53 lines
2.1 KiB
Java
Raw Normal View History

2023-12-15 20:04:57 +02:00
package dev.mvvasilev.common.controller;
import dev.mvvasilev.common.web.APIErrorDTO;
import dev.mvvasilev.common.web.APIResponseDTO;
import dev.mvvasilev.common.web.CrudResponseDTO;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
2023-12-15 20:04:57 +02:00
import java.util.Collection;
2023-12-15 20:04:57 +02:00
import java.util.List;
import java.util.stream.Collectors;
2023-12-15 20:04:57 +02:00
public abstract class AbstractRestController {
2023-12-15 20:04:57 +02:00
protected <T> ResponseEntity<APIResponseDTO<T>> withStatus(HttpStatus status, T body) {
return ResponseEntity.status(status).body(new APIResponseDTO<>(body, null, status.value(), status.getReasonPhrase()));
2023-12-15 20:04:57 +02:00
}
protected <T> ResponseEntity<APIResponseDTO<T>> withSingleError(HttpStatus status, String errorMessage, String errorCode, String stacktrace) {
return ResponseEntity.status(status).body(new APIResponseDTO<>(null, List.of(new APIErrorDTO(errorMessage, errorCode, stacktrace)), status.value(), status.getReasonPhrase()));
2023-12-15 20:04:57 +02:00
}
protected <T> ResponseEntity<APIResponseDTO<T>> ok(T body) {
return withStatus(HttpStatus.OK, body);
}
protected <T> ResponseEntity<APIResponseDTO<Object>> emptySuccess() {
return withStatus(HttpStatus.OK, null);
}
protected <T> ResponseEntity<APIResponseDTO<CrudResponseDTO>> created(Long id) {
return withStatus(HttpStatus.CREATED, new CrudResponseDTO(id, null));
}
protected <T> ResponseEntity<APIResponseDTO<Collection<CrudResponseDTO>>> created(Collection<Long> ids) {
return withStatus(
HttpStatus.CREATED,
ids.stream()
.map(id -> new CrudResponseDTO(id, null))
.collect(Collectors.toList())
);
}
protected <T> ResponseEntity<APIResponseDTO<CrudResponseDTO>> updated(Integer affectedRows) {
return withStatus(HttpStatus.OK, new CrudResponseDTO(null, affectedRows));
}
protected <T> ResponseEntity<APIResponseDTO<CrudResponseDTO>> deleted(Integer affectedRows) {
return withStatus(HttpStatus.OK, new CrudResponseDTO(null, affectedRows));
2023-12-15 20:04:57 +02:00
}
}