improvement: 관리자 기기 삭제/차단 API 추가 (#239)
- IDeviceService: AdminDeleteAsync(long deviceId) 추가 - DeviceService: Device 조회 → IsActive=false → 토큰 캐시 무효화 - DeviceController: POST /v1/in/device/admin/delete [Authorize] 엔드포인트 추가 - 기존 SDK 삭제 API와 분리, JWT 인증 기반 관리자 전용 Closes #239
This commit is contained in:
parent
d98f8c89a4
commit
48049bba9e
|
|
@ -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 인증 필요.")]
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user