feat: 서비스 삭제 API 구현 (#68) #69
|
|
@ -57,6 +57,21 @@ public class ServiceController : ControllerBase
|
||||||
return Ok(ApiResponse<ServiceResponseDto>.Success(result));
|
return Ok(ApiResponse<ServiceResponseDto>.Success(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPost("delete")]
|
||||||
|
[SwaggerOperation(
|
||||||
|
Summary = "서비스 삭제",
|
||||||
|
Description = "서비스를 Soft Delete 처리합니다. IsDeleted=true, 상태를 Suspended로 변경합니다.")]
|
||||||
|
[SwaggerResponse(200, "삭제 성공", typeof(ApiResponse))]
|
||||||
|
[SwaggerResponse(401, "인증되지 않은 요청")]
|
||||||
|
[SwaggerResponse(403, "권한 없음")]
|
||||||
|
[SwaggerResponse(404, "서비스를 찾을 수 없음")]
|
||||||
|
[SwaggerResponse(409, "이미 삭제된 서비스")]
|
||||||
|
public async Task<IActionResult> DeleteAsync([FromBody] DeleteServiceRequestDto request)
|
||||||
|
{
|
||||||
|
await _serviceManagementService.DeleteAsync(request);
|
||||||
|
return Ok(ApiResponse.Success());
|
||||||
|
}
|
||||||
|
|
||||||
[HttpPost("list")]
|
[HttpPost("list")]
|
||||||
[SwaggerOperation(
|
[SwaggerOperation(
|
||||||
Summary = "서비스 목록 조회",
|
Summary = "서비스 목록 조회",
|
||||||
|
|
|
||||||
11
SPMS.Application/DTOs/Service/DeleteServiceRequestDto.cs
Normal file
11
SPMS.Application/DTOs/Service/DeleteServiceRequestDto.cs
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace SPMS.Application.DTOs.Service;
|
||||||
|
|
||||||
|
public class DeleteServiceRequestDto
|
||||||
|
{
|
||||||
|
[Required(ErrorMessage = "서비스 코드는 필수입니다.")]
|
||||||
|
[JsonPropertyName("service_code")]
|
||||||
|
public string ServiceCode { get; set; } = string.Empty;
|
||||||
|
}
|
||||||
|
|
@ -8,6 +8,7 @@ public interface IServiceManagementService
|
||||||
Task<ServiceResponseDto> UpdateAsync(UpdateServiceRequestDto request);
|
Task<ServiceResponseDto> UpdateAsync(UpdateServiceRequestDto request);
|
||||||
Task<ServiceListResponseDto> GetListAsync(ServiceListRequestDto request);
|
Task<ServiceListResponseDto> GetListAsync(ServiceListRequestDto request);
|
||||||
Task<ServiceResponseDto> GetByServiceCodeAsync(string serviceCode);
|
Task<ServiceResponseDto> GetByServiceCodeAsync(string serviceCode);
|
||||||
|
Task DeleteAsync(DeleteServiceRequestDto request);
|
||||||
Task<ServiceResponseDto> ChangeStatusAsync(string serviceCode, ChangeServiceStatusRequestDto request);
|
Task<ServiceResponseDto> ChangeStatusAsync(string serviceCode, ChangeServiceStatusRequestDto request);
|
||||||
Task<ApiKeyRefreshResponseDto> RefreshApiKeyAsync(string serviceCode);
|
Task<ApiKeyRefreshResponseDto> RefreshApiKeyAsync(string serviceCode);
|
||||||
Task RegisterApnsCredentialsAsync(string serviceCode, ApnsCredentialsRequestDto request);
|
Task RegisterApnsCredentialsAsync(string serviceCode, ApnsCredentialsRequestDto request);
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,34 @@ public class ServiceManagementService : IServiceManagementService
|
||||||
return MapToDto(serviceWithIps ?? service);
|
return MapToDto(serviceWithIps ?? service);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task DeleteAsync(DeleteServiceRequestDto request)
|
||||||
|
{
|
||||||
|
var service = await _serviceRepository.GetByServiceCodeAsync(request.ServiceCode);
|
||||||
|
if (service is null)
|
||||||
|
{
|
||||||
|
throw new SpmsException(
|
||||||
|
ErrorCodes.NotFound,
|
||||||
|
"서비스를 찾을 수 없습니다.",
|
||||||
|
404);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (service.IsDeleted)
|
||||||
|
{
|
||||||
|
throw new SpmsException(
|
||||||
|
ErrorCodes.Conflict,
|
||||||
|
"이미 삭제된 서비스입니다.",
|
||||||
|
409);
|
||||||
|
}
|
||||||
|
|
||||||
|
service.IsDeleted = true;
|
||||||
|
service.DeletedAt = DateTime.UtcNow;
|
||||||
|
service.Status = ServiceStatus.Suspended;
|
||||||
|
service.UpdatedAt = DateTime.UtcNow;
|
||||||
|
|
||||||
|
_serviceRepository.Update(service);
|
||||||
|
await _unitOfWork.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<ServiceResponseDto> ChangeStatusAsync(string serviceCode, ChangeServiceStatusRequestDto request)
|
public async Task<ServiceResponseDto> ChangeStatusAsync(string serviceCode, ChangeServiceStatusRequestDto request)
|
||||||
{
|
{
|
||||||
var service = await _serviceRepository.GetByServiceCodeAsync(serviceCode);
|
var service = await _serviceRepository.GetByServiceCodeAsync(serviceCode);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user