Move most code from controller to service
This commit is contained in:
parent
d1c233068c
commit
94d617ba04
|
@ -7,7 +7,6 @@ import pl.materus.ghrepo.service.GitHubService;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.HttpStatus;
|
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
|
@ -44,41 +43,13 @@ public class GitHubController {
|
||||||
@ExceptionHandler(WebClientResponseException.class)
|
@ExceptionHandler(WebClientResponseException.class)
|
||||||
public ResponseEntity<ResponseErrorModel> handleResponseException(WebClientResponseException ex) {
|
public ResponseEntity<ResponseErrorModel> handleResponseException(WebClientResponseException ex) {
|
||||||
|
|
||||||
HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR;
|
return gitHubService.handleWebClientException(ex);
|
||||||
HttpHeaders httpHeaders = new HttpHeaders();
|
|
||||||
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
String message;
|
|
||||||
Integer statusCode = ex.getStatusCode().value();
|
|
||||||
switch (statusCode) {
|
|
||||||
case 404:
|
|
||||||
message = "User not found";
|
|
||||||
status = HttpStatus.NOT_FOUND;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 403:
|
|
||||||
message = "Github API limit";
|
|
||||||
status = HttpStatus.FORBIDDEN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
message = "Unknown github webclient error";
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ResponseErrorModel responseErrorModel = new ResponseErrorModel(statusCode,message);
|
|
||||||
return ResponseEntity.status(status).headers(httpHeaders).body(responseErrorModel);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExceptionHandler(WrongHeaderException.class)
|
@ExceptionHandler(WrongHeaderException.class)
|
||||||
public ResponseEntity<ResponseErrorModel> handleResponseException(WrongHeaderException ex) {
|
public ResponseEntity<ResponseErrorModel> handleResponseException(WrongHeaderException ex) {
|
||||||
ResponseErrorModel responseErrorModel = new ResponseErrorModel(HttpStatus.BAD_REQUEST.value(),ex.getMessage());
|
|
||||||
|
|
||||||
HttpHeaders httpHeaders = new HttpHeaders();
|
return gitHubService.handleWrongHeaderException(ex);
|
||||||
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
return ResponseEntity.badRequest().headers(httpHeaders).body(responseErrorModel);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,19 @@
|
||||||
package pl.materus.ghrepo.service;
|
package pl.materus.ghrepo.service;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.reactive.function.client.WebClient;
|
import org.springframework.web.reactive.function.client.WebClient;
|
||||||
|
import org.springframework.web.reactive.function.client.WebClientResponseException;
|
||||||
|
|
||||||
|
import pl.materus.ghrepo.exception.WrongHeaderException;
|
||||||
import pl.materus.ghrepo.model.GitHubBranchModel;
|
import pl.materus.ghrepo.model.GitHubBranchModel;
|
||||||
import pl.materus.ghrepo.model.GitHubRepositoryModel;
|
import pl.materus.ghrepo.model.GitHubRepositoryModel;
|
||||||
import pl.materus.ghrepo.model.ResponseBranchModel;
|
import pl.materus.ghrepo.model.ResponseBranchModel;
|
||||||
|
import pl.materus.ghrepo.model.ResponseErrorModel;
|
||||||
import pl.materus.ghrepo.model.ResponseRepositoryModel;
|
import pl.materus.ghrepo.model.ResponseRepositoryModel;
|
||||||
|
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
|
@ -39,6 +46,43 @@ public class GitHubService {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<ResponseErrorModel> handleWebClientException(WebClientResponseException ex) {
|
||||||
|
HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR;
|
||||||
|
HttpHeaders httpHeaders = new HttpHeaders();
|
||||||
|
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
|
||||||
|
|
||||||
|
String message;
|
||||||
|
Integer statusCode = ex.getStatusCode().value();
|
||||||
|
switch (statusCode) {
|
||||||
|
case 404:
|
||||||
|
message = "User not found";
|
||||||
|
status = HttpStatus.NOT_FOUND;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 403:
|
||||||
|
message = "Github API limit";
|
||||||
|
status = HttpStatus.FORBIDDEN;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
message = "Unknown github webclient error";
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ResponseErrorModel responseErrorModel = new ResponseErrorModel(statusCode, message);
|
||||||
|
return ResponseEntity.status(status).headers(httpHeaders).body(responseErrorModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<ResponseErrorModel> handleWrongHeaderException(WrongHeaderException ex) {
|
||||||
|
ResponseErrorModel responseErrorModel = new ResponseErrorModel(HttpStatus.BAD_REQUEST.value(), ex.getMessage());
|
||||||
|
|
||||||
|
HttpHeaders httpHeaders = new HttpHeaders();
|
||||||
|
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
|
||||||
|
|
||||||
|
return ResponseEntity.badRequest().headers(httpHeaders).body(responseErrorModel);
|
||||||
|
}
|
||||||
|
|
||||||
private Flux<ResponseBranchModel> getRepoBranches(String owner, String repo) {
|
private Flux<ResponseBranchModel> getRepoBranches(String owner, String repo) {
|
||||||
return githubWebClient.get()
|
return githubWebClient.get()
|
||||||
.uri("/repos/{owner}/{repo}/branches", owner, repo)
|
.uri("/repos/{owner}/{repo}/branches", owner, repo)
|
||||||
|
|
Reference in New Issue