added the necessary classes for the discovery web controller #98
|
@ -0,0 +1,45 @@
|
||||||
|
package ch.unisg.tapas.auctionhouse.adapter.common.formats;
|
||||||
|
|
||||||
|
import ch.unisg.tapas.auctionhouse.domain.AuctionHouseDiscoveryInformation;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
public class AuctionHouseDiscoveryJsonRepresentation {
|
||||||
|
public static final String MEDIA_TYPE = "application/auctionhousediscovery + json";
|
||||||
|
|
||||||
|
@Getter @Setter
|
||||||
|
private String auctionHouseUri;
|
||||||
|
|
||||||
|
@Getter @Setter
|
||||||
|
private String webSubUri;
|
||||||
|
|
||||||
|
@Getter @Setter
|
||||||
|
private String taskTypes;
|
||||||
|
|
||||||
|
@Getter @Setter
|
||||||
|
private String timeStamp;
|
||||||
|
|
||||||
|
@Getter @Setter
|
||||||
|
private String groupName;
|
||||||
|
|
||||||
|
public AuctionHouseDiscoveryJsonRepresentation() {}
|
||||||
|
|
||||||
|
public AuctionHouseDiscoveryJsonRepresentation(AuctionHouseDiscoveryInformation auctionHouseDiscoveryInformation){
|
||||||
|
this.auctionHouseUri = auctionHouseDiscoveryInformation.getAuctionHouseUri().getValue();
|
||||||
|
this.webSubUri = auctionHouseDiscoveryInformation.getWebSubUri().getValue();
|
||||||
|
this.taskTypes = auctionHouseDiscoveryInformation.getTaskTypes().toString();
|
||||||
|
this.timeStamp = auctionHouseDiscoveryInformation.getTimeStamp().getValue();
|
||||||
|
this.groupName = auctionHouseDiscoveryInformation.getGroupName().getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String serialize(AuctionHouseDiscoveryInformation auctionHouseDiscoveryInformation) throws JsonProcessingException {
|
||||||
|
AuctionHouseDiscoveryJsonRepresentation representation = new AuctionHouseDiscoveryJsonRepresentation(auctionHouseDiscoveryInformation);
|
||||||
|
|
||||||
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
||||||
|
return mapper.writeValueAsString(representation);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
package ch.unisg.tapas.auctionhouse.adapter.in.web;
|
||||||
|
|
||||||
|
import ch.unisg.tapas.auctionhouse.adapter.common.formats.AuctionHouseDiscoveryJsonRepresentation;
|
||||||
|
import ch.unisg.tapas.auctionhouse.application.port.in.AuctionHouseDiscoveryUseCase;
|
||||||
|
import ch.unisg.tapas.auctionhouse.application.port.in.AuctionHouseDiscoveryCommand;
|
||||||
|
import ch.unisg.tapas.auctionhouse.domain.AuctionHouseDiscoveryInformation;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import org.springframework.web.server.ResponseStatusException;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controller that handles HTTP requests for the auction house discovery. This controller implements
|
||||||
|
* the {@link AuctionHouseDiscoveryUseCase} use case using the {@link AuctionHouseDiscoveryCommand} command.
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
public class AuctionHouseDiscoveryWebController {
|
||||||
|
private final AuctionHouseDiscoveryUseCase auctionHouseDiscoveryUseCase;
|
||||||
|
|
||||||
|
public AuctionHouseDiscoveryWebController(AuctionHouseDiscoveryUseCase auctionHouseDiscoveryUseCase) {
|
||||||
|
this.auctionHouseDiscoveryUseCase = auctionHouseDiscoveryUseCase;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping(path="/discovery/", consumes = AuctionHouseDiscoveryJsonRepresentation.MEDIA_TYPE)
|
||||||
|
public ResponseEntity<String> auctionHouseDiscovery(@RequestBody AuctionHouseDiscoveryJsonRepresentation payload) {
|
||||||
|
AuctionHouseDiscoveryInformation.GroupName groupName = (payload.getGroupName() == null) ?
|
||||||
|
null : new AuctionHouseDiscoveryInformation.GroupName(payload.getGroupName());
|
||||||
|
|
||||||
|
AuctionHouseDiscoveryCommand command = new AuctionHouseDiscoveryCommand(
|
||||||
|
new AuctionHouseDiscoveryInformation.AuctionHouseUri(payload.getAuctionHouseUri()),
|
||||||
|
new AuctionHouseDiscoveryInformation.WebSubUri(payload.getAuctionHouseUri()),
|
||||||
|
new AuctionHouseDiscoveryInformation.TaskTypes(payload.getTaskTypes()),
|
||||||
|
new AuctionHouseDiscoveryInformation.TimeStamp(payload.getTimeStamp()),
|
||||||
|
groupName
|
||||||
|
);
|
||||||
|
|
||||||
|
AuctionHouseDiscoveryInformation auctionHouseDiscoveryInformation = auctionHouseDiscoveryUseCase.auctionHouseDiscovery(command);
|
||||||
|
|
||||||
|
try {
|
||||||
|
AuctionHouseDiscoveryJsonRepresentation representation = new AuctionHouseDiscoveryJsonRepresentation(auctionHouseDiscoveryInformation);
|
||||||
|
String auctionHouseDiscoveryJson = AuctionHouseDiscoveryJsonRepresentation.serialize(auctionHouseDiscoveryInformation);
|
||||||
|
|
||||||
|
HttpHeaders responseHeaders = new HttpHeaders();
|
||||||
|
responseHeaders.add(HttpHeaders.CONTENT_TYPE, AuctionHouseDiscoveryJsonRepresentation.MEDIA_TYPE);
|
||||||
|
|
||||||
|
return new ResponseEntity<>(auctionHouseDiscoveryJson, responseHeaders, HttpStatus.OK);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
package ch.unisg.tapas.auctionhouse.application.port.in;
|
||||||
|
|
||||||
|
import ch.unisg.tapas.auctionhouse.domain.Auction;
|
||||||
|
import ch.unisg.tapas.auctionhouse.domain.AuctionHouseDiscoveryInformation;
|
||||||
|
import ch.unisg.tapas.common.SelfValidating;
|
||||||
|
import lombok.Value;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
@Value
|
||||||
|
public class AuctionHouseDiscoveryCommand extends SelfValidating<AuctionHouseDiscoveryCommand> {
|
||||||
|
@NotNull
|
||||||
|
private final AuctionHouseDiscoveryInformation.AuctionHouseUri auctionHouseUri;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private final AuctionHouseDiscoveryInformation.WebSubUri webSubUri;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private final AuctionHouseDiscoveryInformation.TaskTypes taskTypes;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private final AuctionHouseDiscoveryInformation.TimeStamp timeStamp;
|
||||||
|
|
||||||
|
//Didn't put @NotNull here since the GroupName is not required
|
||||||
|
private final AuctionHouseDiscoveryInformation.GroupName groupName;
|
||||||
|
|
||||||
|
public AuctionHouseDiscoveryCommand(AuctionHouseDiscoveryInformation.AuctionHouseUri auctionHouseUri,
|
||||||
|
AuctionHouseDiscoveryInformation.WebSubUri webSubUri,
|
||||||
|
AuctionHouseDiscoveryInformation.TaskTypes taskTypes,
|
||||||
|
AuctionHouseDiscoveryInformation.TimeStamp timeStamp,
|
||||||
|
AuctionHouseDiscoveryInformation.GroupName groupName) {
|
||||||
|
this.auctionHouseUri = auctionHouseUri;
|
||||||
|
this.webSubUri = webSubUri;
|
||||||
|
this.taskTypes = taskTypes;
|
||||||
|
this.timeStamp = timeStamp;
|
||||||
|
this.groupName = groupName;
|
||||||
|
|
||||||
|
this.validateSelf();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package ch.unisg.tapas.auctionhouse.application.port.in;
|
||||||
|
|
||||||
|
import ch.unisg.tapas.auctionhouse.domain.AuctionHouseDiscoveryInformation;
|
||||||
|
|
||||||
|
public interface AuctionHouseDiscoveryUseCase {
|
||||||
|
|
||||||
|
AuctionHouseDiscoveryInformation auctionHouseDiscovery(AuctionHouseDiscoveryCommand command);
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
package ch.unisg.tapas.auctionhouse.domain;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Value;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
//TODO: change to array type
|
||||||
|
public class AuctionHouseDiscoveryInformation {
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final AuctionHouseUri auctionHouseUri;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final WebSubUri webSubUri;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final TaskTypes taskTypes;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final TimeStamp timeStamp;
|
||||||
|
|
||||||
|
//Had to initialize this in the constructor, but it's not required, so I'm not sure
|
||||||
|
//if this is correct
|
||||||
|
@Getter
|
||||||
|
private final GroupName groupName;
|
||||||
|
|
||||||
|
public AuctionHouseDiscoveryInformation(AuctionHouseUri auctionHouseUri, WebSubUri webSubUri,
|
||||||
|
TaskTypes taskTypes, TimeStamp timeStamp, GroupName groupName){
|
||||||
|
this.auctionHouseUri = auctionHouseUri;
|
||||||
|
this.webSubUri = webSubUri;
|
||||||
|
this.taskTypes = taskTypes;
|
||||||
|
this.timeStamp = timeStamp;
|
||||||
|
this.groupName = groupName; //see above
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Value
|
||||||
|
public static class AuctionHouseUri {
|
||||||
|
private String value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Value
|
||||||
|
public static class WebSubUri {
|
||||||
|
private String value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Value
|
||||||
|
public static class TaskTypes {
|
||||||
|
private String value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Value
|
||||||
|
public static class TimeStamp {
|
||||||
|
private String value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Value
|
||||||
|
public static class GroupName {
|
||||||
|
private String value;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user