[api] CorsController.java 이쪽 컨벤션 맞춰 변경
This commit is contained in:
+16
-14
@@ -1,9 +1,8 @@
|
||||
package com.alist.api.config.cache;
|
||||
|
||||
import com.alist.api.modules.cors.mapper.CorsAllowMapper;
|
||||
import com.alist.api.modules.cors.vo.CorsOriginCacheVo;
|
||||
import com.alist.api.modules.cors.mapper.CorsMapper;
|
||||
import com.alist.api.modules.cors.vo.CorsCacheVo;
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -14,13 +13,16 @@ import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class CorsAllowedOriginsCache {
|
||||
public class CorsCache {
|
||||
|
||||
private final CorsAllowMapper corsAllowMapper;
|
||||
private final CorsMapper corsMapper;
|
||||
|
||||
// Thread-safe List (volatile로 가시성 보장)
|
||||
private volatile List<String> allowedOrigins = new ArrayList<>();
|
||||
private volatile List<String> corsOriginList = new ArrayList<>();
|
||||
|
||||
public CorsCache(CorsMapper corsMapper) {
|
||||
this.corsMapper = corsMapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* 서버 시작 시 DB에서 전체 CORS 목록 로딩
|
||||
@@ -28,7 +30,7 @@ public class CorsAllowedOriginsCache {
|
||||
@PostConstruct
|
||||
public void loadFromDatabase() {
|
||||
refresh();
|
||||
log.info("CORS allowed origins loaded from database");
|
||||
log.info("CORS allowed origins loaded...");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -36,19 +38,19 @@ public class CorsAllowedOriginsCache {
|
||||
*/
|
||||
public synchronized void refresh() {
|
||||
try {
|
||||
List<String> origins = corsAllowMapper.selectCorsAllowedCacheList()
|
||||
List<String> corsOriginList = corsMapper.selectCorsCacheList()
|
||||
.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.map(CorsOriginCacheVo::getAllowedOrigin)
|
||||
.map(CorsCacheVo::getAllowedOrigin)
|
||||
.filter(Objects::nonNull)
|
||||
.map(String::trim)
|
||||
.filter(origin -> !origin.isEmpty())
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
this.allowedOrigins = origins;
|
||||
this.corsOriginList = corsOriginList;
|
||||
|
||||
log.info("CORS cache refreshed. Total origins: {}", origins.size());
|
||||
log.info("CORS cache refreshed. Total origins: {}", corsOriginList.size());
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("Failed to refresh CORS cache", e);
|
||||
@@ -60,7 +62,7 @@ public class CorsAllowedOriginsCache {
|
||||
* @return 허용 도메인 리스트
|
||||
*/
|
||||
public List<String> getAllowedOrigins() {
|
||||
return new ArrayList<>(allowedOrigins);
|
||||
return new ArrayList<>(corsOriginList);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -68,6 +70,6 @@ public class CorsAllowedOriginsCache {
|
||||
* @return 캐시 상태 정보
|
||||
*/
|
||||
public List<String> getCacheStatus() {
|
||||
return new ArrayList<>(allowedOrigins);
|
||||
return new ArrayList<>(corsOriginList);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.alist.api.config.filter;
|
||||
|
||||
import com.alist.api.config.cache.CorsAllowedOriginsCache;
|
||||
import com.alist.api.config.cache.CorsCache;
|
||||
import jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
@@ -21,7 +21,7 @@ import java.util.List;
|
||||
@RequiredArgsConstructor
|
||||
public class DynamicCorsFilter extends OncePerRequestFilter {
|
||||
|
||||
private final CorsAllowedOriginsCache corsCache;
|
||||
private final CorsCache corsCache;
|
||||
|
||||
@Override
|
||||
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
|
||||
|
||||
@@ -1,96 +0,0 @@
|
||||
package com.alist.api.modules.cors;
|
||||
|
||||
import com.alist.api.common.response.ApiResponse;
|
||||
import com.alist.api.common.response.ApiResponseCode;
|
||||
import com.alist.api.config.cache.CorsAllowedOriginsCache;
|
||||
import com.alist.api.modules.cors.form.CorsOriginAddForm;
|
||||
import com.alist.api.modules.cors.form.CorsOriginDeleteForm;
|
||||
import com.alist.api.modules.cors.form.CorsOriginSearchForm;
|
||||
import com.alist.api.modules.cors.service.CorsAllowService;
|
||||
import com.alist.api.modules.cors.vo.CorsOriginAddVo;
|
||||
import com.alist.api.modules.cors.vo.CorsOriginDeleteVo;
|
||||
import com.alist.api.modules.cors.vo.CorsOriginListVo;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Tag(name = "901. CRS 갱신", description = "테스트 CORS 설정 관리 API")
|
||||
@RestController
|
||||
@RequestMapping("/cors")
|
||||
public class CorsAllowController {
|
||||
private final CorsAllowedOriginsCache corsCache;
|
||||
private final CorsAllowService corsAllowService;
|
||||
|
||||
public CorsAllowController(CorsAllowedOriginsCache corsCache, CorsAllowService corsAllowService) {
|
||||
this.corsCache = corsCache;
|
||||
this.corsAllowService = corsAllowService;
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "CORS 허용 도메인 목록 조회",
|
||||
description = "DB에 등록된 CORS 허용 도메인 목록을 검색 조건과 페이징으로 조회합니다."
|
||||
)
|
||||
@GetMapping("/list")
|
||||
public ResponseEntity<ApiResponse<CorsOriginListVo>> corsAllowedList(
|
||||
@ModelAttribute CorsOriginSearchForm corsOriginSearchForm
|
||||
) {
|
||||
CorsOriginListVo result = corsAllowService.selectCorsAllowedList(corsOriginSearchForm.toCorsOriginSearchDto());
|
||||
|
||||
if (result.getCorsOriginList() == null || result.getCorsOriginList().isEmpty()) {
|
||||
return ApiResponse.entity(result, ApiResponseCode.CODE_2003);
|
||||
}
|
||||
|
||||
return ApiResponse.entity(result, ApiResponseCode.CODE_2001, "CORS 허용 도메인");
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "CORS 허용 도메인 추가",
|
||||
description = "CORS 허용 도메인을 추가합니다. 추가 후 CORS 캐시를 갱신합니다."
|
||||
)
|
||||
@PostMapping("/add")
|
||||
public ResponseEntity<ApiResponse<CorsOriginAddVo>> addCorsAllowedOrigin(
|
||||
@Valid @RequestBody CorsOriginAddForm corsOriginAddForm
|
||||
) {
|
||||
CorsOriginAddVo result = corsAllowService.insertCorsAllowedOrigin(corsOriginAddForm.toCorsOriginAddDto());
|
||||
|
||||
if (!result.isCorsOriginAdded()) {
|
||||
return ApiResponse.entity(result, ApiResponseCode.CODE_2004, "CORS 허용 도메인");
|
||||
}
|
||||
|
||||
corsCache.refresh();
|
||||
return ApiResponse.entity(result, ApiResponseCode.CODE_2002, "CORS 허용 도메인");
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "CORS 화이트리스트 갱신",
|
||||
description = "DB에서 CORS 허용 도메인 목록을 다시 로딩합니다. DB에 도메인 추가 후 호출하세요."
|
||||
)
|
||||
@PostMapping("/reload")
|
||||
public ResponseEntity<ApiResponse<List<String>>> reloadCors() {
|
||||
corsCache.refresh();
|
||||
List<String> cacheStatus = corsCache.getCacheStatus();
|
||||
return ApiResponse.entity(cacheStatus, ApiResponseCode.CODE_200);
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "CORS 허용 도메인 삭제",
|
||||
description = "CORS 허용 도메인 PK 기준으로 삭제 처리합니다. 실제 삭제가 아닌 del_yn 변경 방식입니다."
|
||||
)
|
||||
@PatchMapping("/delete")
|
||||
public ResponseEntity<ApiResponse<CorsOriginDeleteVo>> deleteCorsAllowedOrigin(
|
||||
@Valid @RequestBody CorsOriginDeleteForm corsOriginDeleteForm
|
||||
) {
|
||||
CorsOriginDeleteVo result = corsAllowService.deleteCorsAllowedOrigin(corsOriginDeleteForm.toCorsOriginDeleteDto());
|
||||
|
||||
if (!result.isCorsOriginDeleted()) {
|
||||
return ApiResponse.entity(result, ApiResponseCode.CODE_2003);
|
||||
}
|
||||
|
||||
corsCache.refresh();
|
||||
return ApiResponse.entity(result, ApiResponseCode.CODE_2005, "CORS 허용 도메인 삭제");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
package com.alist.api.modules.cors;
|
||||
|
||||
import com.alist.api.common.response.ApiResponse;
|
||||
import com.alist.api.common.response.ApiResponseCode;
|
||||
import com.alist.api.config.cache.CorsCache;
|
||||
import com.alist.api.modules.cors.form.CorsAddForm;
|
||||
import com.alist.api.modules.cors.form.CorsDeleteForm;
|
||||
import com.alist.api.modules.cors.form.CorsListForm;
|
||||
import com.alist.api.modules.cors.service.CorsService;
|
||||
import com.alist.api.modules.cors.vo.CorsAddVo;
|
||||
import com.alist.api.modules.cors.vo.CorsDeleteVo;
|
||||
import com.alist.api.modules.cors.vo.CorsListVo;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Tag(name = "901. CRS 갱신", description = "테스트 CORS 설정 관리 API")
|
||||
@RestController
|
||||
@RequestMapping("/cors")
|
||||
public class CorsController {
|
||||
private final CorsCache corsCache;
|
||||
private final CorsService corsService;
|
||||
|
||||
public CorsController(CorsCache corsCache, CorsService corsService) {
|
||||
this.corsCache = corsCache;
|
||||
this.corsService = corsService;
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "CORS 허용 도메인 목록 조회"
|
||||
, description = "DB에 등록된 CORS 허용 도메인 목록을 검색 조건과 페이징으로 조회합니다."
|
||||
)
|
||||
@GetMapping("/list")
|
||||
public ResponseEntity<ApiResponse<CorsListVo>> corsList(
|
||||
@ModelAttribute CorsListForm corsListForm
|
||||
) {
|
||||
CorsListVo corsListVo = corsService.selectCorsList(corsListForm.toDto());
|
||||
|
||||
if (corsListVo.getCorsList() == null || corsListVo.getCorsList().isEmpty()) {
|
||||
return ApiResponse.entity(corsListVo, ApiResponseCode.CODE_2003);
|
||||
}
|
||||
|
||||
return ApiResponse.entity(corsListVo, ApiResponseCode.CODE_2001, "CORS 허용 도메인");
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "CORS 허용 도메인 추가"
|
||||
, description = "CORS 허용 도메인을 추가합니다. 추가 후 CORS 캐시를 갱신합니다."
|
||||
)
|
||||
@PostMapping("/add")
|
||||
public ResponseEntity<ApiResponse<CorsAddVo>> corsAdd(
|
||||
@Valid @RequestBody CorsAddForm corsAddForm
|
||||
) {
|
||||
CorsAddVo corsAddVo = corsService.insertCorsAdd(corsAddForm.toDto());
|
||||
|
||||
if (!corsAddVo.isProcessed()) {
|
||||
return ApiResponse.entity(corsAddVo, ApiResponseCode.CODE_2004, "CORS 허용 도메인");
|
||||
}
|
||||
|
||||
corsCache.refresh();
|
||||
return ApiResponse.entity(corsAddVo, ApiResponseCode.CODE_2002, "CORS 허용 도메인");
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "CORS 허용 도메인 삭제"
|
||||
, description = "CORS 허용 도메인 PK 기준으로 삭제 처리합니다. 실제 삭제가 아닌 del_yn 변경 방식입니다."
|
||||
)
|
||||
@PatchMapping("/delete")
|
||||
public ResponseEntity<ApiResponse<CorsDeleteVo>> corsDelete(
|
||||
@Valid @RequestBody CorsDeleteForm corsDeleteForm
|
||||
) {
|
||||
CorsDeleteVo corsDeleteVo = corsService.updateCorsDelete(corsDeleteForm.toDto());
|
||||
|
||||
if (!corsDeleteVo.isProcessed()) {
|
||||
return ApiResponse.entity(corsDeleteVo, ApiResponseCode.CODE_2003);
|
||||
}
|
||||
|
||||
corsCache.refresh();
|
||||
return ApiResponse.entity(corsDeleteVo, ApiResponseCode.CODE_2005, "CORS 허용 도메인 삭제");
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "CORS 화이트리스트 갱신"
|
||||
, description = "DB에서 CORS 허용 도메인 목록을 다시 로딩합니다. DB에 도메인 추가 후 호출하세요."
|
||||
)
|
||||
@PostMapping("/reload")
|
||||
public ResponseEntity<ApiResponse<List<String>>> corsReload() {
|
||||
corsCache.refresh();
|
||||
List<String> cacheStatus = corsCache.getCacheStatus();
|
||||
return ApiResponse.entity(cacheStatus, ApiResponseCode.CODE_200);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -5,6 +5,6 @@ import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class CorsOriginAddDto {
|
||||
public class CorsAddDto {
|
||||
private String allowedOrigin;
|
||||
}
|
||||
+1
-1
@@ -5,6 +5,6 @@ import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class CorsOriginDeleteDto {
|
||||
public class CorsDeleteDto {
|
||||
private Integer corsIdx;
|
||||
}
|
||||
+1
-1
@@ -6,6 +6,6 @@ import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class CorsOriginSearchDto extends PageRequest {
|
||||
public class CorsListDto extends PageRequest {
|
||||
private String keyword;
|
||||
}
|
||||
+8
-8
@@ -1,6 +1,6 @@
|
||||
package com.alist.api.modules.cors.form;
|
||||
|
||||
import com.alist.api.modules.cors.dto.CorsOriginAddDto;
|
||||
import com.alist.api.modules.cors.dto.CorsAddDto;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
@@ -10,19 +10,19 @@ import lombok.Setter;
|
||||
@Schema(description = "CORS 허용 도메인 추가 요청 폼")
|
||||
@Getter
|
||||
@Setter
|
||||
public class CorsOriginAddForm {
|
||||
public class CorsAddForm {
|
||||
|
||||
@Schema(description = "CORS 허용 도메인", example = "https://admin.alist.co.kr", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotBlank(message = "CORS 허용 도메인은 필수입니다.")
|
||||
@Pattern(
|
||||
regexp = "^(\\*|https?://[A-Za-z0-9.-]+(:[0-9]{1,5})?)$",
|
||||
message = "CORS 허용 도메인은 http(s)://domain 또는 * 형식이어야 합니다."
|
||||
regexp = "^(\\*|https?://[A-Za-z0-9.-]+(:[0-9]{1,5})?)$"
|
||||
, message = "CORS 허용 도메인은 http(s)://domain 또는 * 형식이어야 합니다."
|
||||
)
|
||||
private String allowedOrigin;
|
||||
|
||||
public CorsOriginAddDto toCorsOriginAddDto() {
|
||||
CorsOriginAddDto corsOriginAddDto = new CorsOriginAddDto();
|
||||
corsOriginAddDto.setAllowedOrigin(allowedOrigin == null ? null : allowedOrigin.trim());
|
||||
return corsOriginAddDto;
|
||||
public CorsAddDto toDto() {
|
||||
CorsAddDto corsAddDto = new CorsAddDto();
|
||||
corsAddDto.setAllowedOrigin(allowedOrigin == null ? null : allowedOrigin.trim());
|
||||
return corsAddDto;
|
||||
}
|
||||
}
|
||||
+6
-6
@@ -1,6 +1,6 @@
|
||||
package com.alist.api.modules.cors.form;
|
||||
|
||||
import com.alist.api.modules.cors.dto.CorsOriginDeleteDto;
|
||||
import com.alist.api.modules.cors.dto.CorsDeleteDto;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Getter;
|
||||
@@ -9,15 +9,15 @@ import lombok.Setter;
|
||||
@Schema(description = "CORS 허용 도메인 삭제 요청 폼")
|
||||
@Getter
|
||||
@Setter
|
||||
public class CorsOriginDeleteForm {
|
||||
public class CorsDeleteForm {
|
||||
|
||||
@Schema(description = "CORS 허용 도메인 PK", example = "1", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "CORS 허용 도메인 PK는 필수입니다.")
|
||||
private Integer corsIdx;
|
||||
|
||||
public CorsOriginDeleteDto toCorsOriginDeleteDto() {
|
||||
CorsOriginDeleteDto corsOriginDeleteDto = new CorsOriginDeleteDto();
|
||||
corsOriginDeleteDto.setCorsIdx(corsIdx);
|
||||
return corsOriginDeleteDto;
|
||||
public CorsDeleteDto toDto() {
|
||||
CorsDeleteDto corsDeleteDto = new CorsDeleteDto();
|
||||
corsDeleteDto.setCorsIdx(corsIdx);
|
||||
return corsDeleteDto;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.alist.api.modules.cors.form;
|
||||
|
||||
import com.alist.api.common.paging.PageRequest;
|
||||
import com.alist.api.modules.cors.dto.CorsListDto;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Schema(description = "CORS 허용 도메인 목록 검색 조건")
|
||||
@Getter
|
||||
@Setter
|
||||
public class CorsListForm extends PageRequest {
|
||||
|
||||
@Schema(description = "검색어. CORS 허용 도메인을 대상으로 검색합니다.", example = "alist.co.kr")
|
||||
private String keyword;
|
||||
|
||||
public CorsListDto toDto() {
|
||||
CorsListDto corsListDto = new CorsListDto();
|
||||
corsListDto.setPage(getPage());
|
||||
corsListDto.setSize(getSize());
|
||||
corsListDto.setKeyword(keyword);
|
||||
return corsListDto;
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package com.alist.api.modules.cors.form;
|
||||
|
||||
import com.alist.api.common.paging.PageRequest;
|
||||
import com.alist.api.modules.cors.dto.CorsOriginSearchDto;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Schema(description = "CORS 허용 도메인 목록 검색 조건")
|
||||
@Getter
|
||||
@Setter
|
||||
public class CorsOriginSearchForm extends PageRequest {
|
||||
|
||||
@Schema(description = "검색어. CORS 허용 도메인을 대상으로 검색합니다.", example = "alist.co.kr")
|
||||
private String keyword;
|
||||
|
||||
public CorsOriginSearchDto toCorsOriginSearchDto() {
|
||||
CorsOriginSearchDto corsOriginSearchDto = new CorsOriginSearchDto();
|
||||
corsOriginSearchDto.setPage(getPage());
|
||||
corsOriginSearchDto.setSize(getSize());
|
||||
corsOriginSearchDto.setKeyword(keyword);
|
||||
return corsOriginSearchDto;
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
package com.alist.api.modules.cors.mapper;
|
||||
|
||||
import com.alist.api.modules.cors.dto.CorsOriginAddDto;
|
||||
import com.alist.api.modules.cors.dto.CorsOriginDeleteDto;
|
||||
import com.alist.api.modules.cors.dto.CorsOriginSearchDto;
|
||||
import com.alist.api.modules.cors.vo.CorsOriginCacheVo;
|
||||
import com.alist.api.modules.cors.vo.CorsOriginVo;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface CorsAllowMapper {
|
||||
List<CorsOriginCacheVo> selectCorsAllowedCacheList();
|
||||
|
||||
List<CorsOriginVo> selectCorsAllowedList(CorsOriginSearchDto corsOriginSearchDto);
|
||||
|
||||
int selectCorsAllowedCount(CorsOriginSearchDto corsOriginSearchDto);
|
||||
|
||||
int selectCorsAllowedOriginCount(String allowedOrigin);
|
||||
|
||||
int insertCorsAllowedOrigin(CorsOriginAddDto corsOriginAddDto);
|
||||
|
||||
int deleteCorsAllowedOrigin(CorsOriginDeleteDto corsOriginDeleteDto);
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.alist.api.modules.cors.mapper;
|
||||
|
||||
import com.alist.api.modules.cors.dto.CorsAddDto;
|
||||
import com.alist.api.modules.cors.dto.CorsDeleteDto;
|
||||
import com.alist.api.modules.cors.dto.CorsListDto;
|
||||
import com.alist.api.modules.cors.vo.CorsCacheVo;
|
||||
import com.alist.api.modules.cors.vo.CorsVo;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface CorsMapper {
|
||||
List<CorsCacheVo> selectCorsCacheList();
|
||||
|
||||
List<CorsVo> selectCorsList(CorsListDto corsListDto);
|
||||
|
||||
int selectCorsListCount(CorsListDto corsListDto);
|
||||
|
||||
int selectCorsCount(String allowedOrigin);
|
||||
|
||||
int insertCorsAdd(CorsAddDto corsAddDto);
|
||||
|
||||
int updateCorsDelete(CorsDeleteDto corsDeleteDto);
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
package com.alist.api.modules.cors.service;
|
||||
|
||||
import com.alist.api.modules.cors.dto.CorsOriginAddDto;
|
||||
import com.alist.api.modules.cors.dto.CorsOriginDeleteDto;
|
||||
import com.alist.api.modules.cors.dto.CorsOriginSearchDto;
|
||||
import com.alist.api.modules.cors.mapper.CorsAllowMapper;
|
||||
import com.alist.api.modules.cors.vo.CorsOriginAddVo;
|
||||
import com.alist.api.modules.cors.vo.CorsOriginDeleteVo;
|
||||
import com.alist.api.modules.cors.vo.CorsOriginListVo;
|
||||
import com.alist.api.modules.cors.vo.CorsOriginVo;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class CorsAllowService {
|
||||
private final CorsAllowMapper corsAllowMapper;
|
||||
|
||||
public CorsAllowService(CorsAllowMapper corsAllowMapper) {
|
||||
this.corsAllowMapper = corsAllowMapper;
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public CorsOriginListVo selectCorsAllowedList(CorsOriginSearchDto corsOriginSearchDto) {
|
||||
int totalCount = corsAllowMapper.selectCorsAllowedCount(corsOriginSearchDto);
|
||||
List<CorsOriginVo> corsOriginList = corsAllowMapper.selectCorsAllowedList(corsOriginSearchDto);
|
||||
|
||||
CorsOriginListVo result = new CorsOriginListVo();
|
||||
result.setCorsOriginList(corsOriginList);
|
||||
result.setPaging(corsOriginSearchDto, totalCount);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public CorsOriginAddVo insertCorsAllowedOrigin(CorsOriginAddDto corsOriginAddDto) {
|
||||
int duplicateCount = corsAllowMapper.selectCorsAllowedOriginCount(corsOriginAddDto.getAllowedOrigin());
|
||||
|
||||
CorsOriginAddVo result = new CorsOriginAddVo();
|
||||
if (duplicateCount > 0) {
|
||||
result.setCorsOriginAdded(false);
|
||||
return result;
|
||||
}
|
||||
|
||||
int insertCount = corsAllowMapper.insertCorsAllowedOrigin(corsOriginAddDto);
|
||||
result.setCorsOriginAdded(insertCount > 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public CorsOriginDeleteVo deleteCorsAllowedOrigin(CorsOriginDeleteDto corsOriginDeleteDto) {
|
||||
int updateCount = corsAllowMapper.deleteCorsAllowedOrigin(corsOriginDeleteDto);
|
||||
|
||||
CorsOriginDeleteVo result = new CorsOriginDeleteVo();
|
||||
result.setCorsOriginDeleted(updateCount > 0);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.alist.api.modules.cors.service;
|
||||
|
||||
import com.alist.api.modules.cors.dto.CorsAddDto;
|
||||
import com.alist.api.modules.cors.dto.CorsDeleteDto;
|
||||
import com.alist.api.modules.cors.dto.CorsListDto;
|
||||
import com.alist.api.modules.cors.mapper.CorsMapper;
|
||||
import com.alist.api.modules.cors.vo.CorsAddVo;
|
||||
import com.alist.api.modules.cors.vo.CorsDeleteVo;
|
||||
import com.alist.api.modules.cors.vo.CorsListVo;
|
||||
import com.alist.api.modules.cors.vo.CorsVo;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class CorsService {
|
||||
private final CorsMapper corsMapper;
|
||||
|
||||
public CorsService(CorsMapper corsMapper) {
|
||||
this.corsMapper = corsMapper;
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public CorsListVo selectCorsList(CorsListDto corsListDto) {
|
||||
int totalCount = corsMapper.selectCorsListCount(corsListDto);
|
||||
List<CorsVo> corsList = corsMapper.selectCorsList(corsListDto);
|
||||
|
||||
CorsListVo corsListVo = new CorsListVo();
|
||||
corsListVo.setCorsList(corsList);
|
||||
corsListVo.setPaging(corsListDto, totalCount);
|
||||
|
||||
return corsListVo;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public CorsAddVo insertCorsAdd(CorsAddDto corsAddDto) {
|
||||
int duplicateCount = corsMapper.selectCorsCount(corsAddDto.getAllowedOrigin());
|
||||
|
||||
CorsAddVo corsAddVo = new CorsAddVo();
|
||||
|
||||
if (duplicateCount > 0) {
|
||||
corsAddVo.setProcessed(false);
|
||||
return corsAddVo;
|
||||
}
|
||||
|
||||
int insertCount = corsMapper.insertCorsAdd(corsAddDto);
|
||||
corsAddVo.setProcessed(insertCount > 0);
|
||||
|
||||
return corsAddVo;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public CorsDeleteVo updateCorsDelete(CorsDeleteDto corsDeleteDto) {
|
||||
int updateCount = corsMapper.updateCorsDelete(corsDeleteDto);
|
||||
|
||||
CorsDeleteVo corsDeleteVo = new CorsDeleteVo();
|
||||
corsDeleteVo.setProcessed(updateCount > 0);
|
||||
|
||||
return corsDeleteVo;
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -7,7 +7,7 @@ import lombok.Setter;
|
||||
@Schema(description = "CORS 허용 도메인 추가 응답")
|
||||
@Getter
|
||||
@Setter
|
||||
public class CorsOriginAddVo {
|
||||
public class CorsAddVo {
|
||||
@Schema(description = "CORS 허용 도메인 추가 여부", example = "true")
|
||||
private boolean corsOriginAdded;
|
||||
private boolean processed;
|
||||
}
|
||||
+1
-1
@@ -7,7 +7,7 @@ import lombok.Setter;
|
||||
@Schema(description = "CORS 허용 도메인 캐시 항목")
|
||||
@Getter
|
||||
@Setter
|
||||
public class CorsOriginCacheVo {
|
||||
public class CorsCacheVo {
|
||||
@Schema(description = "CORS 허용 도메인", example = "https://admin.alist.co.kr")
|
||||
private String allowedOrigin;
|
||||
}
|
||||
+2
-2
@@ -7,7 +7,7 @@ import lombok.Setter;
|
||||
@Schema(description = "CORS 허용 도메인 삭제 응답")
|
||||
@Getter
|
||||
@Setter
|
||||
public class CorsOriginDeleteVo {
|
||||
public class CorsDeleteVo {
|
||||
@Schema(description = "CORS 허용 도메인 삭제 여부", example = "true")
|
||||
private boolean corsOriginDeleted;
|
||||
private boolean processed;
|
||||
}
|
||||
+2
-2
@@ -10,7 +10,7 @@ import java.util.List;
|
||||
@Schema(description = "CORS 허용 도메인 목록 조회 응답")
|
||||
@Getter
|
||||
@Setter
|
||||
public class CorsOriginListVo extends PageResponse {
|
||||
public class CorsListVo extends PageResponse {
|
||||
@Schema(description = "CORS 허용 도메인 목록")
|
||||
private List<CorsOriginVo> corsOriginList;
|
||||
private List<CorsVo> corsList;
|
||||
}
|
||||
+1
-1
@@ -7,7 +7,7 @@ import lombok.Setter;
|
||||
@Schema(description = "CORS 허용 도메인 목록 항목")
|
||||
@Getter
|
||||
@Setter
|
||||
public class CorsOriginVo {
|
||||
public class CorsVo {
|
||||
@Schema(description = "CORS 허용 도메인 PK", example = "1")
|
||||
private Integer corsIdx;
|
||||
|
||||
+16
-16
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
|
||||
<mapper namespace="com.alist.api.modules.cors.mapper.CorsAllowMapper">
|
||||
<sql id="corsAllowedWhere">
|
||||
<mapper namespace="com.alist.api.modules.cors.mapper.CorsMapper">
|
||||
<sql id="corsWhere">
|
||||
FROM ALISTLMS.test_cors_allowed_list
|
||||
WHERE del_yn = 1
|
||||
AND allowed_origin IS NOT NULL
|
||||
@@ -11,24 +11,24 @@
|
||||
</if>
|
||||
</sql>
|
||||
|
||||
<select id="selectCorsAllowedList" resultType="com.alist.api.modules.cors.vo.CorsOriginVo">
|
||||
/* CorsMapper.selectCorsAllowedList */
|
||||
<select id="selectCorsList" resultType="com.alist.api.modules.cors.vo.CorsVo">
|
||||
/*CorsMapper.selectCorsList*/
|
||||
SELECT cors_idx
|
||||
, allowed_origin
|
||||
<include refid="corsAllowedWhere"/>
|
||||
<include refid="corsWhere"/>
|
||||
ORDER BY cors_idx DESC
|
||||
LIMIT #{limit}
|
||||
OFFSET #{offset}
|
||||
</select>
|
||||
|
||||
<select id="selectCorsAllowedCount" resultType="int">
|
||||
/* CorsAllowMapper.selectCorsAllowedCount */
|
||||
<select id="selectCorsListCount" resultType="int">
|
||||
/*CorsMapper.selectCorsListCount*/
|
||||
SELECT COUNT(*)
|
||||
<include refid="corsAllowedWhere"/>
|
||||
<include refid="corsWhere"/>
|
||||
</select>
|
||||
|
||||
<select id="selectCorsAllowedCacheList" resultType="com.alist.api.modules.cors.vo.CorsOriginCacheVo">
|
||||
/* CorsAllowMapper.selectCorsAllowedCacheList */
|
||||
<select id="selectCorsCacheList" resultType="com.alist.api.modules.cors.vo.CorsCacheVo">
|
||||
/*CorsMapper.selectCorsCacheList*/
|
||||
SELECT allowed_origin
|
||||
FROM ALISTLMS.test_cors_allowed_list
|
||||
WHERE del_yn = 1
|
||||
@@ -36,16 +36,16 @@
|
||||
ORDER BY cors_idx
|
||||
</select>
|
||||
|
||||
<select id="selectCorsAllowedOriginCount" parameterType="string" resultType="int">
|
||||
/* CorsAllowMapper.selectCorsAllowedOriginCount */
|
||||
<select id="selectCorsCount" parameterType="string" resultType="int">
|
||||
/*CorsMapper.selectCorsCount*/
|
||||
SELECT COUNT(1)
|
||||
FROM ALISTLMS.test_cors_allowed_list
|
||||
WHERE del_yn = 1
|
||||
AND allowed_origin = #{allowedOrigin}
|
||||
</select>
|
||||
|
||||
<insert id="insertCorsAllowedOrigin" parameterType="com.alist.api.modules.cors.dto.CorsOriginAddDto">
|
||||
/* CorsAllowMapper.insertCorsAllowedOrigin */
|
||||
<insert id="insertCorsAdd" parameterType="com.alist.api.modules.cors.dto.CorsAddDto">
|
||||
/*CorsMapper.insertCorsAdd*/
|
||||
INSERT INTO ALISTLMS.test_cors_allowed_list (
|
||||
allowed_origin
|
||||
, del_yn
|
||||
@@ -55,8 +55,8 @@
|
||||
)
|
||||
</insert>
|
||||
|
||||
<update id="deleteCorsAllowedOrigin">
|
||||
/* CorsAllowMapper.deleteCorsAllowedOrigin */
|
||||
<update id="updateCorsDelete">
|
||||
/*CorsMapper.updateCorsDelete*/
|
||||
UPDATE ALISTLMS.test_cors_allowed_list
|
||||
SET del_yn = 0
|
||||
WHERE cors_idx = #{corsIdx}
|
||||
Reference in New Issue
Block a user