improvement: 관리자 기기 삭제/차단 API 추가 (#239) #240

Merged
seonkyu.kim merged 1 commits from improvement/#239-device-admin-delete into develop 2026-02-25 08:12:49 +00:00
3 changed files with 23 additions and 0 deletions

View File

@ -73,6 +73,15 @@ public class DeviceController : ControllerBase
return Ok(ApiResponse.Success()); return Ok(ApiResponse.Success());
} }
[HttpPost("admin/delete")]
[Authorize]
[SwaggerOperation(Summary = "관리자 기기 삭제", Description = "관리자가 기기를 삭제(비활성화)합니다. 삭제 즉시 발송이 차단됩니다. JWT 인증 필요.")]
public async Task<IActionResult> AdminDeleteAsync([FromBody] DeviceDeleteRequestDto request)
{
await _deviceService.AdminDeleteAsync(request.DeviceId);
return Ok(ApiResponse.Success());
}
[HttpPost("list")] [HttpPost("list")]
[Authorize] [Authorize]
[SwaggerOperation(Summary = "디바이스 목록", Description = "대시보드에서 디바이스 목록을 조회합니다. JWT 인증 필요.")] [SwaggerOperation(Summary = "디바이스 목록", Description = "대시보드에서 디바이스 목록을 조회합니다. JWT 인증 필요.")]

View File

@ -8,6 +8,7 @@ public interface IDeviceService
Task<DeviceInfoResponseDto> GetInfoAsync(long serviceId, DeviceInfoRequestDto request); Task<DeviceInfoResponseDto> GetInfoAsync(long serviceId, DeviceInfoRequestDto request);
Task UpdateAsync(long serviceId, DeviceUpdateRequestDto request); Task UpdateAsync(long serviceId, DeviceUpdateRequestDto request);
Task DeleteAsync(long serviceId, DeviceDeleteRequestDto request); Task DeleteAsync(long serviceId, DeviceDeleteRequestDto request);
Task AdminDeleteAsync(long deviceId);
Task<DeviceListResponseDto> GetListAsync(long? serviceId, DeviceListRequestDto request); Task<DeviceListResponseDto> GetListAsync(long? serviceId, DeviceListRequestDto request);
Task SetTagsAsync(long serviceId, DeviceTagsRequestDto request); Task SetTagsAsync(long serviceId, DeviceTagsRequestDto request);
Task SetAgreeAsync(long serviceId, DeviceAgreeRequestDto request); Task SetAgreeAsync(long serviceId, DeviceAgreeRequestDto request);

View File

@ -119,6 +119,19 @@ public class DeviceService : IDeviceService
await _tokenCache.InvalidateAsync(serviceId, device.Id); await _tokenCache.InvalidateAsync(serviceId, device.Id);
} }
public async Task AdminDeleteAsync(long deviceId)
{
var device = await _deviceRepository.GetByIdAsync(deviceId);
if (device == null)
throw new SpmsException(ErrorCodes.DeviceNotFound, "존재하지 않는 디바이스입니다.", 404);
device.IsActive = false;
device.UpdatedAt = DateTime.UtcNow;
_deviceRepository.Update(device);
await _unitOfWork.SaveChangesAsync();
await _tokenCache.InvalidateAsync(device.ServiceId, device.Id);
}
public async Task<DeviceListResponseDto> GetListAsync(long? serviceId, DeviceListRequestDto request) public async Task<DeviceListResponseDto> GetListAsync(long? serviceId, DeviceListRequestDto request)
{ {
Platform? platform = null; Platform? platform = null;