package io.kaif.web.v1; import static io.kaif.model.clientapp.ClientAppScope.PUBLIC; import java.util.Map; import javax.validation.Valid; import javax.validation.constraints.Size; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import io.kaif.model.clientapp.ClientAppUserAccessToken; import io.kaif.model.exception.RequireCitizenException; import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; @Api(tags = "echo", description = "Echo service for testing") @RestController @RequestMapping(value = "/v1/echo", produces = MediaType.APPLICATION_JSON_VALUE) public class V1EchoResource { static class MessageEntry { @ApiModelProperty(required = true) @Size(min = 1, max = 1000) public String message; } static class ObjectEntry { @ApiModelProperty(required = false) public Map<?, ?> object; } @ApiOperation(value = "[public] Get system current time", notes = "Get system current time in milliseconds") @RequiredScope(PUBLIC) @RequestMapping(value = "/current-time", method = RequestMethod.GET) public long currentTime(ClientAppUserAccessToken accessToken) { return System.currentTimeMillis(); } @ApiOperation(value = "[public] Echo input message", notes = "Echo input message to response") @RequiredScope(PUBLIC) @RequestMapping(value = "/message", method = RequestMethod.POST) public String message(ClientAppUserAccessToken accessToken, @Valid @RequestBody MessageEntry message) { return message.message; } @ApiOperation(value = "[public] Echo input object", notes = "Echo input object to response", hidden = true) @RequiredScope(PUBLIC) @RequestMapping(value = "/object", method = RequestMethod.POST) public Map<?, ?> object(ClientAppUserAccessToken accessToken, @RequestBody ObjectEntry entry) { return entry.object; } @ApiOperation(value = "for test", hidden = true) @RequiredScope(PUBLIC) @RequestMapping(value = "/test-failure", method = RequestMethod.POST) public void testFailure(ClientAppUserAccessToken accessToken, @Valid @RequestBody MessageEntry message) { throw new RequireCitizenException(); } }