improvement: 태그 관리 API 프론트엔드 연동 수정 (#267) #268

Merged
seonkyu.kim merged 1 commits from improvement/#267-tag-api-frontend-fix into develop 2026-03-02 05:01:37 +00:00
6 changed files with 19 additions and 1 deletions

View File

@ -34,7 +34,8 @@ public class ServiceCodeMiddleware
// === OPTIONAL_FOR_ADMIN: 관리자는 X-Service-Code 선택 ===
if (path.StartsWithSegments("/v1/in/stats") ||
path.StartsWithSegments("/v1/in/device/list") ||
path.StartsWithSegments("/v1/in/message/list"))
path.StartsWithSegments("/v1/in/message/list") ||
path.StartsWithSegments("/v1/in/tag"))
{
if (context.Request.Headers.TryGetValue("X-Service-Code", out var optionalCode) &&
!string.IsNullOrWhiteSpace(optionalCode))

View File

@ -11,6 +11,7 @@ public class ServiceListResponseDto
public class ServiceSummaryDto
{
public long ServiceId { get; set; }
public string ServiceCode { get; set; } = string.Empty;
public string ServiceName { get; set; } = string.Empty;
public string? Description { get; set; }

View File

@ -2,6 +2,7 @@ namespace SPMS.Application.DTOs.Service;
public class ServiceResponseDto
{
public long ServiceId { get; set; }
public string ServiceCode { get; set; } = string.Empty;
public string ServiceName { get; set; } = string.Empty;
public string? Description { get; set; }

View File

@ -14,6 +14,9 @@ public class TagListResponseDto
public class TagSummaryDto
{
[JsonPropertyName("tag_index")]
public int TagIndex { get; set; }
[JsonPropertyName("tag_id")]
public long TagId { get; set; }

View File

@ -982,6 +982,7 @@ public class ServiceManagementService : IServiceManagementService
{
return new ServiceSummaryDto
{
ServiceId = service.Id,
ServiceCode = service.ServiceCode,
ServiceName = service.ServiceName,
Description = service.Description,
@ -997,6 +998,7 @@ public class ServiceManagementService : IServiceManagementService
{
return new ServiceResponseDto
{
ServiceId = service.Id,
ServiceCode = service.ServiceCode,
ServiceName = service.ServiceName,
Description = service.Description,

View File

@ -42,12 +42,22 @@ public class TagService : ITagService
var tagIds = items.Select(t => t.Id).ToList();
var deviceCounts = await _deviceRepository.GetDeviceCountsByTagIdsAsync(tagIds);
// 서비스별 태그 순번 계산 (Id 오름차순 기준 1-based)
var serviceIds = items.Select(t => t.ServiceId).Distinct().ToList();
var serviceTagOrders = new Dictionary<long, List<long>>();
foreach (var sid in serviceIds)
{
var allTags = await _tagRepository.FindAsync(t => t.ServiceId == sid);
serviceTagOrders[sid] = allTags.OrderBy(t => t.Id).Select(t => t.Id).ToList();
}
var totalPages = (int)Math.Ceiling((double)totalCount / request.Size);
return new TagListResponseDto
{
Items = items.Select(t => new TagSummaryDto
{
TagIndex = serviceTagOrders[t.ServiceId].IndexOf(t.Id) + 1,
TagId = t.Id,
TagName = t.Name,
Description = t.Description,