Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
package DGU_AI_LAB.admin_be.domain.alarm.service;

import DGU_AI_LAB.admin_be.error.ErrorCode;
import DGU_AI_LAB.admin_be.error.exception.BusinessException;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Value;
import lombok.RequiredArgsConstructor;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
// import java.util.Map;
import DGU_AI_LAB.admin_be.error.ErrorCode;

@Service
@RequiredArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package DGU_AI_LAB.admin_be.domain.containerImage.repository;

import DGU_AI_LAB.admin_be.domain.containerImage.entity.ContainerImage;
import DGU_AI_LAB.admin_be.domain.containerImage.entity.ContainerImageId;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package DGU_AI_LAB.admin_be.domain.containerImage.service;

import DGU_AI_LAB.admin_be.domain.containerImage.repository.ContainerImageRepository;
import DGU_AI_LAB.admin_be.domain.containerImage.dto.request.ContainerImageCreateRequest;
import DGU_AI_LAB.admin_be.domain.containerImage.dto.response.ContainerImageResponseDTO;
import DGU_AI_LAB.admin_be.domain.containerImage.entity.ContainerImage;
import DGU_AI_LAB.admin_be.domain.containerImage.repository.ContainerImageRepository;
import DGU_AI_LAB.admin_be.error.ErrorCode;
import DGU_AI_LAB.admin_be.error.exception.BusinessException;
import lombok.RequiredArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import DGU_AI_LAB.admin_be.domain.dashboard.controller.docs.DashBoardApi;
import DGU_AI_LAB.admin_be.domain.dashboard.service.DashboardService;
import DGU_AI_LAB.admin_be.domain.requests.dto.response.ChangeRequestResponseDTO;
import DGU_AI_LAB.admin_be.domain.requests.dto.response.UserServerResponseDTO;
import DGU_AI_LAB.admin_be.domain.requests.entity.Status;
import DGU_AI_LAB.admin_be.global.auth.CustomUserDetails;
Expand All @@ -25,15 +26,11 @@ public class DashboardController implements DashBoardApi {

private final DashboardService dashboardService;


/**
* 사용자 신청 현황 서버 목록 조회 API (대시보드 전용)
* GET /api/dashboard/me/servers
* 사용자 신청 현황 서버 목록 조회 API
*
* @param principal 현재 로그인한 사용자의 인증 정보 (CustomUserDetails)
* @param status 조회할 서버 요청의 상태 (필수 값: PENDING, FULFILLED, DENIED, ALL)
* 사용자의 승인받은 서버 목록 또는 승인 대기중인 신청 목록을 필터링하여 반환합니다.
* 'ALL' 상태를 사용하면 모든 상태의 요청을 반환합니다.
*/
@GetMapping("/me/servers")
public ResponseEntity<SuccessResponse<?>> getUserServers(
Expand All @@ -43,4 +40,5 @@ public ResponseEntity<SuccessResponse<?>> getUserServers(
List<UserServerResponseDTO> userServers = dashboardService.getUserServers(principal.getUserId(), status);
return SuccessResponse.ok(userServers);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import DGU_AI_LAB.admin_be.domain.requests.dto.response.UserServerResponseDTO;
import DGU_AI_LAB.admin_be.domain.requests.entity.Status;
import DGU_AI_LAB.admin_be.error.dto.ErrorResponse;
import DGU_AI_LAB.admin_be.global.common.SuccessResponse;
import DGU_AI_LAB.admin_be.global.auth.CustomUserDetails;
import DGU_AI_LAB.admin_be.global.common.SuccessResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package DGU_AI_LAB.admin_be.domain.pod.controller;

import DGU_AI_LAB.admin_be.domain.pod.controller.docs.PodApi;
import DGU_AI_LAB.admin_be.domain.pod.dto.response.PodResponseDTO;
import DGU_AI_LAB.admin_be.error.ErrorCode;
import DGU_AI_LAB.admin_be.error.exception.BusinessException;
import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.client.*;
import io.fabric8.kubernetes.client.KubernetesClient;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import DGU_AI_LAB.admin_be.domain.pod.dto.response.PodResponseDTO;

import java.util.List;
import java.util.stream.Collectors;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,55 +1,76 @@
package DGU_AI_LAB.admin_be.domain.requests.controller;

import DGU_AI_LAB.admin_be.domain.requests.controller.docs.AdminRequestApi;
import DGU_AI_LAB.admin_be.domain.requests.dto.request.ApproveModificationDTO;
import DGU_AI_LAB.admin_be.domain.requests.dto.request.ApproveRequestDTO;
import DGU_AI_LAB.admin_be.domain.requests.dto.request.RejectRequestDTO;
import DGU_AI_LAB.admin_be.domain.requests.dto.response.ChangeRequestResponseDTO;
import DGU_AI_LAB.admin_be.domain.requests.dto.response.ContainerInfoDTO;
import DGU_AI_LAB.admin_be.domain.requests.dto.response.ResourceUsageDTO;
import DGU_AI_LAB.admin_be.domain.requests.dto.response.SaveRequestResponseDTO;
import DGU_AI_LAB.admin_be.domain.requests.service.RequestService;
import DGU_AI_LAB.admin_be.domain.requests.service.AdminRequestCommandService;
import DGU_AI_LAB.admin_be.domain.requests.service.AdminRequestQueryService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/admin/requests")
public class AdminRequestController implements AdminRequestApi {
public class AdminRequestController {

private final RequestService requestService;
private final AdminRequestCommandService adminRequestCommandService;
private final AdminRequestQueryService adminRequestQueryService;

/*@PostMapping("/modify/approve")
public ResponseEntity<Void> approveModification(@RequestBody ApproveModificationDTO dto) {
requestService.approveModification(dto);
@PatchMapping("/change/approve")
public ResponseEntity<Void> approveModification(
@AuthenticationPrincipal(expression = "userId") Long adminId,
@RequestBody @Valid ApproveModificationDTO dto
) {
adminRequestCommandService.approveModification(adminId, dto);
return ResponseEntity.ok().build();
}*/
}

@GetMapping("/usage")
public ResponseEntity<List<ResourceUsageDTO>> getAllResourceUsage() {
return ResponseEntity.ok(requestService.getAllFulfilledResourceUsage());
return ResponseEntity.ok(adminRequestQueryService.getAllFulfilledResourceUsage());
}

@GetMapping("/containers")
public ResponseEntity<List<ContainerInfoDTO>> getAllActiveContainers() {
return ResponseEntity.ok(requestService.getActiveContainers());
return ResponseEntity.ok(adminRequestQueryService.getAllActiveContainers());
}

@GetMapping
public ResponseEntity<List<SaveRequestResponseDTO>> getAllRequests() {
List<SaveRequestResponseDTO> requests = requestService.getAllRequests();
/**
* 신규 신청 목록 조회 (관리자용)
* PENDING 상태의 Request 목록을 반환합니다.
*/
@GetMapping("/new")
public ResponseEntity<List<SaveRequestResponseDTO>> getNewRequests() {
List<SaveRequestResponseDTO> requests = adminRequestQueryService.getNewRequests();
return ResponseEntity.ok(requests);
}

/**
* 변경 요청 목록 조회 (관리자용)
* PENDING 상태의 ChangeRequest 목록을 반환합니다.
*/
@GetMapping("/change")
public ResponseEntity<List<ChangeRequestResponseDTO>> getChangeRequests() {
List<ChangeRequestResponseDTO> changeRequests = adminRequestQueryService.getChangeRequests();
return ResponseEntity.ok(changeRequests);
}

@PatchMapping("/approval")
public ResponseEntity<SaveRequestResponseDTO> approve(@RequestBody @Valid ApproveRequestDTO dto) {
return ResponseEntity.ok(requestService.approveRequest(dto));
return ResponseEntity.ok(adminRequestCommandService.approveRequest(dto));
}

@PatchMapping("/reject")
public ResponseEntity<SaveRequestResponseDTO> reject(@RequestBody @Valid RejectRequestDTO dto) {
return ResponseEntity.ok(requestService.rejectRequest(dto));
return ResponseEntity.ok(adminRequestCommandService.rejectRequest(dto));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package DGU_AI_LAB.admin_be.domain.requests.controller;

import DGU_AI_LAB.admin_be.domain.requests.dto.response.AcceptInfoResponseDTO;
import DGU_AI_LAB.admin_be.domain.requests.service.ConfigRequestService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/requests/config")
public class ConfigRequestController {

private final ConfigRequestService configRequestService;

@GetMapping("/check-username")
public ResponseEntity<?> checkUbuntuUsername(@RequestParam String username) {
boolean available = configRequestService.isUbuntuUsernameAvailable(username);
return ResponseEntity.ok().body(
java.util.Map.of(
"available", available
)
);
}

@GetMapping("/{username}")
public ResponseEntity<AcceptInfoResponseDTO> getAcceptInfo(@PathVariable String username) {
AcceptInfoResponseDTO response = configRequestService.getAcceptInfo(username);
return ResponseEntity.ok(response);
}

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package DGU_AI_LAB.admin_be.domain.requests.controller;

import DGU_AI_LAB.admin_be.domain.requests.controller.docs.RequestApi;
import DGU_AI_LAB.admin_be.domain.requests.dto.request.ModifyRequestDTO;
import DGU_AI_LAB.admin_be.domain.requests.dto.request.SaveRequestRequestDTO;
import DGU_AI_LAB.admin_be.domain.requests.dto.response.SaveRequestResponseDTO;
import DGU_AI_LAB.admin_be.domain.requests.service.RequestService;
import DGU_AI_LAB.admin_be.domain.requests.service.RequestCommandService;
import DGU_AI_LAB.admin_be.domain.requests.service.RequestQueryService;
import DGU_AI_LAB.admin_be.global.auth.CustomUserDetails;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
Expand All @@ -18,37 +20,33 @@
@RequestMapping("/api/requests")
public class RequestController implements RequestApi {

private final RequestService requestService;
private final RequestQueryService requestService;
private final RequestCommandService requestCommandService;

@PostMapping
public ResponseEntity<SaveRequestResponseDTO> createRequest(
@AuthenticationPrincipal(expression = "userId") Long userId,
@RequestBody @Valid SaveRequestRequestDTO dto
) {
SaveRequestResponseDTO body = requestService.createRequest(userId, dto);
SaveRequestResponseDTO body = requestCommandService.createRequest(userId, dto);
return ResponseEntity.ok(body);
}

@PostMapping("/{requestId}/change")
public ResponseEntity<Void> createChangeRequest(
@AuthenticationPrincipal(expression = "userId") Long userId,
@PathVariable Long requestId,
@RequestBody @Valid ModifyRequestDTO dto
) {
requestCommandService.createModificationRequest(userId, requestId, dto);
return ResponseEntity.ok().build();
}

@GetMapping("/my")
public ResponseEntity<List<SaveRequestResponseDTO>> getMyRequests(
@AuthenticationPrincipal CustomUserDetails user
) {
return ResponseEntity.ok(requestService.getRequestsByUserId(user.getUserId()));
}

@GetMapping("/check-username")
public ResponseEntity<?> checkUbuntuUsername(@RequestParam String username) {
boolean available = requestService.isUbuntuUsernameAvailable(username);
return ResponseEntity.ok().body(
java.util.Map.of(
"available", available
)
);
}

/*@PostMapping("/modify")
public ResponseEntity<Void> requestModification(@RequestBody ModifyRequestDTO dto) {
requestService.requestModification(dto);
return ResponseEntity.ok().build();
}*/
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

import DGU_AI_LAB.admin_be.domain.requests.dto.response.AcceptInfoResponseDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
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.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import org.springframework.http.ResponseEntity;

@Tag(name = "Config Server용 승인 정보 관리", description = "Ubuntu username별 승인 정보 조회 API")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
import DGU_AI_LAB.admin_be.domain.requests.dto.request.RejectRequestDTO;
import DGU_AI_LAB.admin_be.domain.requests.dto.response.SaveRequestResponseDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.*;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
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.tags.Tag;
import org.springframework.http.ResponseEntity;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
import DGU_AI_LAB.admin_be.domain.requests.dto.response.SaveRequestResponseDTO;
import DGU_AI_LAB.admin_be.global.auth.CustomUserDetails;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.*;
import io.swagger.v3.oas.annotations.Parameter;
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.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package DGU_AI_LAB.admin_be.domain.requests.dto.request;

import DGU_AI_LAB.admin_be.domain.requests.entity.Request;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;

public record ApproveModificationDTO(
Long requestId
@NotNull(message = "변경 요청 ID는 필수입니다.")
Long changeRequestId,
@NotBlank(message = "승인 사유는 필수입니다.")
String adminComment
) {
/*public void applyTo(Request request) {
request.applyModification();
}*/
}
}
Loading