package io.kaif.web.api; import static java.util.stream.Collectors.*; import java.util.List; import javax.validation.Valid; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import org.springframework.beans.factory.annotation.Autowired; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; import io.kaif.model.account.AccountAccessToken; import io.kaif.model.zone.Zone; import io.kaif.model.zone.ZoneInfo; import io.kaif.service.ZoneService; import io.kaif.web.support.SingleWrapper; @RestController @RequestMapping("/api/zone") public class ZoneResource { public static class ZoneDto { private final String name; private final String title; public ZoneDto(String name, String title) { this.name = name; this.title = title; } public String getName() { return name; } public String getTitle() { return title; } } public static class CreateZone { @NotNull @Pattern(regexp = Zone.ZONE_PATTERN_STR) public String zone; @Size(max = ZoneInfo.ALIAS_NAME_MAX) @NotNull public String aliasName; } @Autowired private ZoneService zoneService; @RequestMapping(value = "/all", method = RequestMethod.GET) public List<ZoneDto> listCitizenZones() { return zoneService.listCitizenZones() .stream() .map(z -> new ZoneDto(z.getZone().value(), z.getAliasName())) .collect(toList()); } @RequestMapping(value = "/", method = RequestMethod.PUT, consumes = { MediaType.APPLICATION_JSON_VALUE }) public void create(AccountAccessToken token, @Valid @RequestBody CreateZone request) { zoneService.createByUser(request.zone, request.aliasName, token); } @RequestMapping(value = "/zone-available") public SingleWrapper<Boolean> isZoneAvailable(@RequestParam("zone") String zone) { return SingleWrapper.of(zoneService.isZoneAvailable(zone)); } @RequestMapping(value = "/can-create", method = RequestMethod.GET) public SingleWrapper<Boolean> canCreateZone(AccountAccessToken token) { return SingleWrapper.of(zoneService.canCreateZone(token)); } }