diff --git a/src/main/java/com/kamco/cd/kamcoback/common/enums/FileUploadStatus.java b/src/main/java/com/kamco/cd/kamcoback/common/enums/FileUploadStatus.java index d6c1b004..d81ab6eb 100644 --- a/src/main/java/com/kamco/cd/kamcoback/common/enums/FileUploadStatus.java +++ b/src/main/java/com/kamco/cd/kamcoback/common/enums/FileUploadStatus.java @@ -12,7 +12,8 @@ public enum FileUploadStatus implements EnumType { INIT("초기화"), UPLOADING("업로드중"), DONE("업로드완료"), - MERGED("병합완료"); + MERGED("병합완료"), + MERGE_FAIL("병합 실패"); private final String desc; diff --git a/src/main/java/com/kamco/cd/kamcoback/common/enums/LayerType.java b/src/main/java/com/kamco/cd/kamcoback/common/enums/LayerType.java new file mode 100644 index 00000000..99816656 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/common/enums/LayerType.java @@ -0,0 +1,37 @@ +package com.kamco.cd.kamcoback.common.enums; + +import com.kamco.cd.kamcoback.common.utils.enums.CodeExpose; +import com.kamco.cd.kamcoback.common.utils.enums.EnumType; +import java.util.Optional; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@CodeExpose +@Getter +@AllArgsConstructor +public enum LayerType implements EnumType { + TILE("배경지도"), + GEOJSON("객체데이터"), + WMTS("타일레이어"), + WMS("지적도"); + + private final String desc; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } + + public static Optional from(String type) { + try { + return Optional.of(LayerType.valueOf(type)); + } catch (Exception e) { + return Optional.empty(); + } + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java b/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java index 755d5322..85907d1a 100644 --- a/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java +++ b/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java @@ -4,10 +4,12 @@ import com.kamco.cd.kamcoback.auth.CustomUserDetails; import com.kamco.cd.kamcoback.common.exception.CustomApiException; import com.kamco.cd.kamcoback.common.exception.DuplicateFileException; import com.kamco.cd.kamcoback.common.exception.ValidationException; +import com.kamco.cd.kamcoback.common.utils.HeaderUtil; import com.kamco.cd.kamcoback.config.api.ApiLogFunction; import com.kamco.cd.kamcoback.config.api.ApiResponseDto; import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ApiResponseCode; import com.kamco.cd.kamcoback.log.dto.ErrorLogDto; +import com.kamco.cd.kamcoback.log.dto.EventType; import com.kamco.cd.kamcoback.members.exception.MemberException; import com.kamco.cd.kamcoback.postgres.entity.ErrorLogEntity; import com.kamco.cd.kamcoback.postgres.repository.log.ErrorLogRepository; @@ -466,10 +468,14 @@ public class GlobalExceptionHandler { .collect(Collectors.joining("\n")) .substring(0, 255); + String actionType = HeaderUtil.get(request, "kamco-action-type"); + ErrorLogEntity errorLogEntity = new ErrorLogEntity( request.getRequestURI(), - ApiLogFunction.getEventType(request), + actionType == null + ? ApiLogFunction.getEventType(request) + : EventType.fromName(actionType), logErrorLevel, String.valueOf(httpStatus.value()), errorCode.getText(), diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java index 5197790f..2ee05262 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java @@ -309,6 +309,15 @@ public class InferenceResultDto { @Schema(description = "모델3 분석 대기") private Integer m3PendingJobs; + @Schema(description = "모델1 분석 진행중") + private Integer m1RunningJobs; + + @Schema(description = "모델2 분석 진행중") + private Integer m2RunningJobs; + + @Schema(description = "모델3 분석 진행중") + private Integer m3RunningJobs; + @Schema(description = "모델1 분석 완료") private Integer m1CompletedJobs; @@ -386,11 +395,18 @@ public class InferenceResultDto { @Schema(description = "모델3 버전") private String modelVer3; + @Schema(description = "탑지 도엽 수") + @JsonIgnore + private Long totalJobs; + public InferenceStatusDetailDto( Long detectingCnt, Integer m1PendingJobs, Integer m2PendingJobs, Integer m3PendingJobs, + Integer m1RunningJobs, + Integer m2RunningJobs, + Integer m3RunningJobs, Integer m1CompletedJobs, Integer m2CompletedJobs, Integer m3CompletedJobs, @@ -413,11 +429,15 @@ public class InferenceResultDto { String mapSheetScope, String modelVer1, String modelVer2, - String modelVer3) { + String modelVer3, + Long totalJobs) { this.detectingCnt = detectingCnt; this.m1PendingJobs = m1PendingJobs; this.m2PendingJobs = m2PendingJobs; this.m3PendingJobs = m3PendingJobs; + this.m1RunningJobs = m1RunningJobs; + this.m2RunningJobs = m2RunningJobs; + this.m3RunningJobs = m3RunningJobs; this.m1CompletedJobs = m1CompletedJobs; this.m2CompletedJobs = m2CompletedJobs; this.m3CompletedJobs = m3CompletedJobs; @@ -441,12 +461,13 @@ public class InferenceResultDto { this.modelVer1 = modelVer1; this.modelVer2 = modelVer2; this.modelVer3 = modelVer3; + this.totalJobs = totalJobs; } @Schema(description = "진행률") @JsonProperty("progress") private int getProgress() { - long tiles = this.detectingCnt; // 도엽수 + long tiles = this.totalJobs == null ? 0L : this.totalJobs; // 도엽수 int models = 3; // 모델 개수 int completed = this.m1CompletedJobs diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceStatusService.java b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceStatusService.java new file mode 100644 index 00000000..6958f1a6 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceStatusService.java @@ -0,0 +1,6 @@ +package com.kamco.cd.kamcoback.inference.service; + +import org.springframework.stereotype.Service; + +@Service +public class InferenceStatusService {} diff --git a/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelWorkDto.java b/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelWorkDto.java index 89d569d4..b9af35e6 100644 --- a/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelWorkDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelWorkDto.java @@ -205,6 +205,9 @@ public class LabelWorkDto { @Schema(description = "1일전처리개수") private Long day1AgoDoneCnt; + @Schema(description = "계정 상태") + private String memberStatus; + public Long getRemainCnt() { return this.assignedCnt - this.doneCnt; } diff --git a/src/main/java/com/kamco/cd/kamcoback/layer/LayerApiController.java b/src/main/java/com/kamco/cd/kamcoback/layer/LayerApiController.java new file mode 100644 index 00000000..e407e92d --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/layer/LayerApiController.java @@ -0,0 +1,190 @@ +package com.kamco.cd.kamcoback.layer; + +import com.kamco.cd.kamcoback.config.api.ApiResponseDto; +import com.kamco.cd.kamcoback.layer.dto.LayerDto; +import com.kamco.cd.kamcoback.layer.dto.LayerDto.OrderReq; +import com.kamco.cd.kamcoback.layer.dto.LayerDto.SearchReq; +import com.kamco.cd.kamcoback.layer.service.LayerService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; +import java.util.UUID; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "레이어 관리", description = "레이어 관리 API") +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/layer") +public class LayerApiController { + + private final LayerService layerService; + + @Operation(summary = "지도 레이어 관리 목록", description = "지도 레이어 관리 목록 api") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "검색 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = LayerDto.Basic.class))), + @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/list") + public ApiResponseDto> getLayers( + @RequestParam(required = false) String tag) { + LayerDto.SearchReq searchReq = new SearchReq(); + searchReq.setTag(tag); + List layers = layerService.getLayers(searchReq); + return ApiResponseDto.ok(layers); + } + + /** + * 레이어 등록 + * + * @param layerType + * @param dto + * @return + */ + @Operation(summary = "레이어 등록", description = "레이어 등록 api") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "201", + description = "등록 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = UUID.class))), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @PostMapping("/save/{layerType}") + public ApiResponseDto save( + @PathVariable String layerType, @RequestBody LayerDto.AddReq dto) { + return ApiResponseDto.ok(layerService.saveLayers(layerType, dto)); + } + + @PutMapping("/order") + public ApiResponseDto updateOrder(@RequestBody List dto) { + layerService.orderUpdate(dto); + return ApiResponseDto.ok(null); + } + + @Operation(summary = "상세 조회", description = "상세 조회 api") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "검색 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = LayerDto.Detail.class))), + @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/detail/{uuid}") + public ApiResponseDto getDetail(@PathVariable UUID uuid) { + return ApiResponseDto.ok(layerService.getDetail(uuid)); + } + + /** + * 레이어 삭제 + * + * @param uuid + * @return + */ + @Operation(summary = "레이어 삭제", description = "레이어 삭제 api") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "201", + description = "삭제 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = Void.class))), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @DeleteMapping("/delete/{uuid}") + public ApiResponseDto delete(@PathVariable UUID uuid) { + layerService.delete(uuid); + return ApiResponseDto.ok(null); + } + + /** + * 레이어 수정 + * + * @param uuid + * @return + */ + @Operation(summary = "레이어 수정", description = "레이어 수정 api") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "201", + description = "수정 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = Void.class))), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @PutMapping("/update/{uuid}") + public ApiResponseDto update(@PathVariable UUID uuid, @RequestBody LayerDto.Detail dto) { + layerService.update(uuid, dto); + return ApiResponseDto.ok(null); + } + + @Operation(summary = "wmts tile 조회", description = "wmts tile 조회 api") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "검색 성공", + content = + @Content( + mediaType = "application/json", + array = @ArraySchema(schema = @Schema(implementation = String.class)))), + @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/wmts/tile") + public ApiResponseDto> getWmtsTile() { + return ApiResponseDto.ok(layerService.getWmtsTile()); + } + + @Operation(summary = "wms tile 조회", description = "wms tile 조회 api") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "검색 성공", + content = + @Content( + mediaType = "application/json", + array = @ArraySchema(schema = @Schema(implementation = String.class)))), + @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/wms/tile") + public ApiResponseDto> getWmsTile() { + return ApiResponseDto.ok(layerService.getWmsTitle()); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/layer/dto/GeoJsonDto.java b/src/main/java/com/kamco/cd/kamcoback/layer/dto/GeoJsonDto.java new file mode 100644 index 00000000..012bb792 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/layer/dto/GeoJsonDto.java @@ -0,0 +1,18 @@ +package com.kamco.cd.kamcoback.layer.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +public class GeoJsonDto { + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class GeoJsonAddReqDto { + private String url; + private String description; + private String tag; + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/layer/dto/LayerDto.java b/src/main/java/com/kamco/cd/kamcoback/layer/dto/LayerDto.java new file mode 100644 index 00000000..77c9012b --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/layer/dto/LayerDto.java @@ -0,0 +1,192 @@ +package com.kamco.cd.kamcoback.layer.dto; + +import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm; +import io.swagger.v3.oas.annotations.media.Schema; +import java.math.BigDecimal; +import java.time.ZonedDateTime; +import java.util.UUID; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +public class LayerDto { + + @Getter + @Setter + @AllArgsConstructor + @Schema(name = "LayerBasic") + public static class Basic { + @Schema(description = "uuid") + private UUID uuid; + + @Schema(example = "WMTS", description = "유형 (TILE/GEOJSON/WMTS/WMS)") + private String layerType; + + @Schema(description = "설명") + private String description; + + @Schema(description = "태그") + private String tag; + + @Schema(description = "순서") + private Long order; + + @Schema(description = "변화지도 여부") + private Boolean isChangeMap; + + @Schema(description = "라벨링지도 여부") + private Boolean isLabelingMap; + + @JsonFormatDttm + @Schema(description = "등록일시") + private ZonedDateTime createdDttm; + } + + @Getter + @Setter + @AllArgsConstructor + @Schema(name = "LayerDetail") + public static class Detail { + @Schema(description = "uuid") + private UUID uuid; + + @Schema(description = "유형 (TILE/GEOJSON/WMTS/WMS)") + private String layerType; + + @Schema(description = "title") + private String title; + + @Schema(description = "설명") + private String description; + + @Schema(description = "태그") + private String tag; + + @Schema(description = "순서") + private Long order; + + @Schema(description = "변화지도 여부") + private Boolean isChangeMap; + + @Schema(description = "라벨링지도 여부") + private Boolean isLabelingMap; + + @Schema(description = "url") + private String url; + + @Schema(description = "좌측상단 경도", example = "126.0") + private BigDecimal minLon; + + @Schema(description = "좌측상단 위도", example = "34.0") + private BigDecimal minLat; + + @Schema(description = "우측하단 경도", example = "130.0") + private BigDecimal maxLon; + + @Schema(description = "우측하단 위도", example = "38.5") + private BigDecimal maxLat; + + @Schema(description = "zoom min", example = "5") + private Short min; + + @Schema(description = "zoom max", example = "18") + private Short max; + + @JsonFormatDttm + @Schema(description = "등록일시") + private ZonedDateTime createdDttm; + } + + @Getter + @Setter + @AllArgsConstructor + @Schema(name = "LayerAddReq") + public static class AddReq { + + @Schema(description = "title") + private String title; + + @Schema(description = "설명") + private String description; + + @Schema(description = "태그") + private String tag; + + @Schema(description = "url") + private String url; + + @Schema(description = "좌측상단 경도", example = "126.0") + private BigDecimal minLon; + + @Schema(description = "좌측상단 위도", example = "34.0") + private BigDecimal minLat; + + @Schema(description = "우측하단 경도", example = "130.0") + private BigDecimal maxLon; + + @Schema(description = "우측하단 위도", example = "38.5") + private BigDecimal maxLat; + + @Schema(description = "zoom min", example = "5") + private Short min; + + @Schema(description = "zoom max", example = "18") + private Short max; + } + + @Getter + @Setter + @AllArgsConstructor + @Schema(name = "LayerOrderReq") + public static class OrderReq { + + @Schema(description = "uuid") + private UUID uuid; + + @Schema(description = "레이어 순서") + private Long order; + } + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class SearchReq { + private String tag; + private String layerType; + } + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class TileAddReqDto { + @Schema(description = "설명", example = "배경지도 입니다.") + private String description; + + @Schema(description = "url", example = "http://test.gs.dabeeo.com/tile/{z}/{x}/{y}.png") + private String url; + + @Schema(description = "태그", example = "변화지도") + private String tag; + + @Schema(description = "좌측상단 경도", example = "126.0") + private BigDecimal minLon; + + @Schema(description = "좌측상단 위도", example = "34.0") + private BigDecimal minLat; + + @Schema(description = "우측하단 경도", example = "130.0") + private BigDecimal maxLon; + + @Schema(description = "우측하단 위도", example = "38.5") + private BigDecimal maxLat; + + @Schema(description = "zoom min", example = "5") + private Short min; + + @Schema(description = "zoom max", example = "18") + private Short max; + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmsDto.java b/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmsDto.java new file mode 100644 index 00000000..28a03534 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmsDto.java @@ -0,0 +1,30 @@ +package com.kamco.cd.kamcoback.layer.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +public class WmsDto { + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class WmsAddReqDto { + private String title; + private String description; + private String tag; + } + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class WmsAddDto { + private WmsLayerInfo wmsLayerInfo; + private String title; + private String description; + private String tag; + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmsLayerInfo.java b/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmsLayerInfo.java new file mode 100755 index 00000000..5fbf0647 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmsLayerInfo.java @@ -0,0 +1,172 @@ +package com.kamco.cd.kamcoback.layer.dto; + +import java.util.ArrayList; +import java.util.List; + +/** WMS 레이어 정보를 담는 DTO 클래스 */ +public class WmsLayerInfo { + private String name; + private String title; + private String abstractText; + private List keywords; + private BoundingBox boundingBox; + private List crs; // 지원하는 좌표계 목록 + + @Override + public String toString() { + return "WmsLayerInfo{" + + "name='" + + name + + '\'' + + ", title='" + + title + + '\'' + + ", abstractText='" + + abstractText + + '\'' + + ", keywords=" + + keywords + + ", boundingBox=" + + boundingBox + + ", crs=" + + crs + + '}'; + } + + public WmsLayerInfo() { + this.keywords = new ArrayList<>(); + this.crs = new ArrayList<>(); + } + + // Getters and Setters + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAbstractText() { + return abstractText; + } + + public void setAbstractText(String abstractText) { + this.abstractText = abstractText; + } + + public List getKeywords() { + return keywords; + } + + public void setKeywords(List keywords) { + this.keywords = keywords; + } + + public void addKeyword(String keyword) { + this.keywords.add(keyword); + } + + public BoundingBox getBoundingBox() { + return boundingBox; + } + + public void setBoundingBox(BoundingBox boundingBox) { + this.boundingBox = boundingBox; + } + + public List getCrs() { + return crs; + } + + public void setCrs(List crs) { + this.crs = crs; + } + + public void addCrs(String crsValue) { + this.crs.add(crsValue); + } + + /** BoundingBox 정보를 담는 내부 클래스 */ + public static class BoundingBox { + private String crs; + private double minX; + private double minY; + private double maxX; + private double maxY; + + public BoundingBox(String crs, double minX, double minY, double maxX, double maxY) { + this.crs = crs; + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; + } + + // Getters and Setters + public String getCrs() { + return crs; + } + + public void setCrs(String crs) { + this.crs = crs; + } + + public double getMinX() { + return minX; + } + + public void setMinX(double minX) { + this.minX = minX; + } + + public double getMinY() { + return minY; + } + + public void setMinY(double minY) { + this.minY = minY; + } + + public double getMaxX() { + return maxX; + } + + public void setMaxX(double maxX) { + this.maxX = maxX; + } + + public double getMaxY() { + return maxY; + } + + public void setMaxY(double maxY) { + this.maxY = maxY; + } + + @Override + public String toString() { + return "BoundingBox{" + + "crs='" + + crs + + '\'' + + ", minX=" + + minX + + ", minY=" + + minY + + ", maxX=" + + maxX + + ", maxY=" + + maxY + + '}'; + } + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmtsDto.java b/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmtsDto.java new file mode 100644 index 00000000..09987a32 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmtsDto.java @@ -0,0 +1,30 @@ +package com.kamco.cd.kamcoback.layer.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +public class WmtsDto { + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class WmtsAddReqDto { + private String title; + private String description; + private String tag; + } + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class WmtsAddDto { + private WmtsLayerInfo wmtsLayerInfo; + private String title; + private String description; + private String tag; + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmtsLayerInfo.java b/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmtsLayerInfo.java new file mode 100755 index 00000000..beb6e4ea --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/layer/dto/WmtsLayerInfo.java @@ -0,0 +1,276 @@ +package com.kamco.cd.kamcoback.layer.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.ArrayList; +import java.util.List; + +/** WMTS 레이어 정보를 담는 DTO 클래스 */ +public class WmtsLayerInfo { + + public String identifier; + public String title; + public String abstractText; + public List keywords = new ArrayList<>(); + public BoundingBox boundingBox; + public List formats = new ArrayList<>(); + public List tileMatrixSetLinks = new ArrayList<>(); + public List resourceUrls = new ArrayList<>(); + public List