Merge branch 'feature/response-meta' into 'master'

Modifying the ResponseDTO to contain the ResponseMeta object. Also moving...

See merge request theappsmith/internal-tools-server!22
This commit is contained in:
Arpit Mohan 2019-09-18 08:52:14 +00:00
commit 64440cf3e7
10 changed files with 113 additions and 69 deletions

View File

@ -11,8 +11,6 @@ services:
cache: cache:
paths: paths:
- ./.m2/repository - ./.m2/repository
# keep cache across branch
key: "$CI_BUILD_REF_NAME"
variables: variables:
DOCKER_DRIVER: overlay DOCKER_DRIVER: overlay

View File

@ -1,7 +1,7 @@
package com.appsmith.server.controllers; package com.appsmith.server.controllers;
import com.appsmith.server.domains.BaseDomain; import com.appsmith.server.domains.BaseDomain;
import com.appsmith.server.dtos.ResponseDto; import com.appsmith.server.dtos.ResponseDTO;
import com.appsmith.server.exceptions.AppsmithException; import com.appsmith.server.exceptions.AppsmithException;
import com.appsmith.server.services.CrudService; import com.appsmith.server.services.CrudService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -26,31 +26,31 @@ public abstract class BaseController<S extends CrudService, T extends BaseDomain
@PostMapping @PostMapping
@ResponseStatus(HttpStatus.CREATED) @ResponseStatus(HttpStatus.CREATED)
public Mono<ResponseDto<T>> create(@Valid @RequestBody T resource) throws AppsmithException { public Mono<ResponseDTO<T>> create(@Valid @RequestBody T resource) throws AppsmithException {
log.debug("Going to create resource {}", resource.getClass().getName()); log.debug("Going to create resource {}", resource.getClass().getName());
return service.create(resource) return service.create(resource)
.map(created -> new ResponseDto<>(HttpStatus.CREATED.value(), created, null)); .map(created -> new ResponseDTO<>(HttpStatus.CREATED.value(), created, null));
} }
@GetMapping("") @GetMapping("")
public Flux<ResponseDto<T>> getAll() { public Mono<ResponseDTO<T>> getAll() {
log.debug("Going to get all resources"); log.debug("Going to get all resources");
return service.get() return service.get().collectList()
.map(resources -> new ResponseDto<>(HttpStatus.OK.value(), resources, null)); .map(resources -> new ResponseDTO<>(HttpStatus.OK.value(), resources, null));
} }
@GetMapping("/{id}") @GetMapping("/{id}")
public Mono<ResponseDto<T>> getById(@PathVariable ID id) { public Mono<ResponseDTO<T>> getById(@PathVariable ID id) {
log.debug("Going to get resource for id: {}", id); log.debug("Going to get resource for id: {}", id);
return service.getById(id) return service.getById(id)
.map(resources -> new ResponseDto<>(HttpStatus.OK.value(), resources, null)); .map(resources -> new ResponseDTO<>(HttpStatus.OK.value(), resources, null));
} }
@PutMapping("/{id}") @PutMapping("/{id}")
public Mono<ResponseDto<T>> update(@PathVariable ID id, @RequestBody T resource) { public Mono<ResponseDTO<T>> update(@PathVariable ID id, @RequestBody T resource) {
log.debug("Going to update resource with id: {}", id); log.debug("Going to update resource with id: {}", id);
return service.update(id, resource) return service.update(id, resource)
.map(updatedResource -> new ResponseDto<>(HttpStatus.OK.value(), updatedResource, null)); .map(updatedResource -> new ResponseDTO<>(HttpStatus.OK.value(), updatedResource, null));
} }
} }

View File

@ -2,7 +2,7 @@ package com.appsmith.server.controllers;
import com.appsmith.server.constants.Url; import com.appsmith.server.constants.Url;
import com.appsmith.server.domains.Layout; import com.appsmith.server.domains.Layout;
import com.appsmith.server.dtos.ResponseDto; import com.appsmith.server.dtos.ResponseDTO;
import com.appsmith.server.services.LayoutService; import com.appsmith.server.services.LayoutService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
@ -29,21 +29,21 @@ public class LayoutController {
} }
@PostMapping("/pages/{pageId}") @PostMapping("/pages/{pageId}")
public Mono<ResponseDto<Layout>> createLayout(@PathVariable String pageId, @Valid @RequestBody Layout layout) { public Mono<ResponseDTO<Layout>> createLayout(@PathVariable String pageId, @Valid @RequestBody Layout layout) {
return service.createLayout(pageId, layout) return service.createLayout(pageId, layout)
.map(created -> new ResponseDto<>(HttpStatus.CREATED.value(), created, null)); .map(created -> new ResponseDTO<>(HttpStatus.CREATED.value(), created, null));
} }
@GetMapping("/{layoutId}/pages/{pageId}") @GetMapping("/{layoutId}/pages/{pageId}")
public Mono<ResponseDto<Layout>> getLayout(@PathVariable String pageId, @PathVariable String layoutId) { public Mono<ResponseDTO<Layout>> getLayout(@PathVariable String pageId, @PathVariable String layoutId) {
return service.getLayout(pageId, layoutId) return service.getLayout(pageId, layoutId)
.map(created -> new ResponseDto<>(HttpStatus.CREATED.value(), created, null)); .map(created -> new ResponseDTO<>(HttpStatus.CREATED.value(), created, null));
} }
@PutMapping("/{layoutId}/pages/{pageId}") @PutMapping("/{layoutId}/pages/{pageId}")
public Mono<ResponseDto<Layout>> updateLayout(@PathVariable String pageId, @PathVariable String layoutId, @RequestBody Layout layout) { public Mono<ResponseDTO<Layout>> updateLayout(@PathVariable String pageId, @PathVariable String layoutId, @RequestBody Layout layout) {
return service.updateLayout(pageId, layoutId, layout) return service.updateLayout(pageId, layoutId, layout)
.map(created -> new ResponseDto<>(HttpStatus.CREATED.value(), created, null)); .map(created -> new ResponseDTO<>(HttpStatus.CREATED.value(), created, null));
} }
} }

View File

@ -4,7 +4,7 @@ import com.appsmith.server.constants.Url;
import com.appsmith.server.domains.Organization; import com.appsmith.server.domains.Organization;
import com.appsmith.server.domains.Plugin; import com.appsmith.server.domains.Plugin;
import com.appsmith.server.dtos.PluginOrgDTO; import com.appsmith.server.dtos.PluginOrgDTO;
import com.appsmith.server.dtos.ResponseDto; import com.appsmith.server.dtos.ResponseDTO;
import com.appsmith.server.services.PluginService; import com.appsmith.server.services.PluginService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
@ -29,16 +29,16 @@ public class PluginController extends BaseController<PluginService, Plugin, Stri
@PostMapping("/install") @PostMapping("/install")
@ResponseStatus(HttpStatus.CREATED) @ResponseStatus(HttpStatus.CREATED)
public Mono<ResponseDto<Organization>> install(@Valid @RequestBody PluginOrgDTO plugin) { public Mono<ResponseDTO<Organization>> install(@Valid @RequestBody PluginOrgDTO plugin) {
return service.installPlugin(plugin) return service.installPlugin(plugin)
.map(organization -> new ResponseDto<>(HttpStatus.CREATED.value(), organization, null)); .map(organization -> new ResponseDTO<>(HttpStatus.CREATED.value(), organization, null));
} }
@PostMapping("/uninstall") @PostMapping("/uninstall")
@ResponseStatus(HttpStatus.CREATED) @ResponseStatus(HttpStatus.CREATED)
public Mono<ResponseDto<Organization>> uninstall(@Valid @RequestBody PluginOrgDTO plugin) { public Mono<ResponseDTO<Organization>> uninstall(@Valid @RequestBody PluginOrgDTO plugin) {
return service.uninstallPlugin(plugin) return service.uninstallPlugin(plugin)
.map(organization -> new ResponseDto<>(HttpStatus.CREATED.value(), organization, null)); .map(organization -> new ResponseDTO<>(HttpStatus.CREATED.value(), organization, null));
} }
} }

View File

@ -2,7 +2,7 @@ package com.appsmith.server.controllers;
import com.appsmith.server.constants.Url; import com.appsmith.server.constants.Url;
import com.appsmith.server.domains.Widget; import com.appsmith.server.domains.Widget;
import com.appsmith.server.dtos.ResponseDto; import com.appsmith.server.dtos.ResponseDTO;
import com.appsmith.server.services.WidgetService; import com.appsmith.server.services.WidgetService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
@ -22,8 +22,8 @@ public class WidgetController extends BaseController<WidgetService, Widget, Stri
} }
@GetMapping("/name/{name}") @GetMapping("/name/{name}")
public Mono<ResponseDto<Widget>> getByName(@PathVariable String name) { public Mono<ResponseDTO<Widget>> getByName(@PathVariable String name) {
return service.getByName(name) return service.getByName(name)
.map(widget -> new ResponseDto<>(HttpStatus.OK.value(), widget, null)); .map(widget -> new ResponseDTO<>(HttpStatus.OK.value(), widget, null));
} }
} }

View File

@ -0,0 +1,39 @@
package com.appsmith.server.dtos;
import com.appsmith.server.exceptions.ErrorDTO;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class ResponseDTO<T> implements Serializable {
private static final long serialVersionUID = 8965011907233699993L;
private ResponseMetaDTO responseMeta;
private T data;
public ResponseDTO(int status, T data, String message) {
this.responseMeta = new ResponseMetaDTO(status, message);
this.data = data;
}
public ResponseDTO(int status, T data, String message, boolean success) {
this.responseMeta = new ResponseMetaDTO(status, message, success);
this.data = data;
}
public ResponseDTO(int status, ErrorDTO errorDTO) {
this.responseMeta = new ResponseMetaDTO(status, errorDTO);
}
}

View File

@ -1,34 +0,0 @@
package com.appsmith.server.dtos;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class ResponseDto<T> implements Serializable {
private static final long serialVersionUID = 8965011907233699993L;
private int status;
private T data;
private String message;
private boolean success = true;
public ResponseDto(int status, T data, String message) {
this.status = status;
this.data = data;
this.message = message;
}
}

View File

@ -0,0 +1,41 @@
package com.appsmith.server.dtos;
import com.appsmith.server.exceptions.ErrorDTO;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class ResponseMetaDTO {
private int status;
private String message;
private boolean success = true;
private ErrorDTO error;
public ResponseMetaDTO(int status, String message, boolean success) {
this.status = status;
this.message = message;
this.success = success;
}
public ResponseMetaDTO(int status, String message) {
this.status = status;
this.message = message;
}
public ResponseMetaDTO(int status, ErrorDTO errorDTO) {
this.status = status;
this.error = errorDTO;
this.success = false;
}
}

View File

@ -13,7 +13,7 @@ import java.io.Serializable;
@AllArgsConstructor @AllArgsConstructor
public class ErrorDTO implements Serializable { public class ErrorDTO implements Serializable {
private int errorCode; private int code;
private String errorMessage; private String message;
} }

View File

@ -1,6 +1,6 @@
package com.appsmith.server.exceptions; package com.appsmith.server.exceptions;
import com.appsmith.server.dtos.ResponseDto; import com.appsmith.server.dtos.ResponseDTO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ControllerAdvice;
@ -28,10 +28,10 @@ public class GlobalExceptionHandler {
*/ */
@ExceptionHandler @ExceptionHandler
@ResponseBody @ResponseBody
public Mono<ResponseDto<ErrorDTO>> catchAppsmithException(AppsmithException e, ServerWebExchange exchange) { public Mono<ResponseDTO<ErrorDTO>> catchAppsmithException(AppsmithException e, ServerWebExchange exchange) {
exchange.getResponse().setStatusCode(HttpStatus.resolve(e.getHttpStatus())); exchange.getResponse().setStatusCode(HttpStatus.resolve(e.getHttpStatus()));
log.error("", e); log.error("", e);
return Mono.just(new ResponseDto<>(e.getHttpStatus(), new ErrorDTO(e.getAppErrorCode(), e.getMessage()), null, false)); return Mono.just(new ResponseDTO<>(e.getHttpStatus(), new ErrorDTO(e.getAppErrorCode(), e.getMessage())));
} }
/** /**
@ -44,11 +44,11 @@ public class GlobalExceptionHandler {
*/ */
@ExceptionHandler @ExceptionHandler
@ResponseBody @ResponseBody
public Mono<ResponseDto<ErrorDTO>> catchException(Exception e, ServerWebExchange exchange) { public Mono<ResponseDTO<ErrorDTO>> catchException(Exception e, ServerWebExchange exchange) {
exchange.getResponse().setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR); exchange.getResponse().setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
log.error("", e); log.error("", e);
return Mono.just(new ResponseDto<>(HttpStatus.INTERNAL_SERVER_ERROR.value(), new ErrorDTO(AppsmithError.INTERNAL_SERVER_ERROR.getHttpErrorCode(), return Mono.just(new ResponseDTO<>(HttpStatus.INTERNAL_SERVER_ERROR.value(), new ErrorDTO(AppsmithError.INTERNAL_SERVER_ERROR.getHttpErrorCode(),
AppsmithError.INTERNAL_SERVER_ERROR.getMessage()), null, false)); AppsmithError.INTERNAL_SERVER_ERROR.getMessage())));
} }
} }