using System.Globalization; using Asp.Versioning; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using ServerCommon; using ServerCommon.UGQ.Models; using Swashbuckle.AspNetCore.Annotations; using UGQApiServer.Controllers.Common; using UGQApiServer.Converter; using UGQApiServer.Models; using UGQDataAccess.Repository.Models; using UGQDataAccess.Service; using UGQApiServer.UGQData; using ServerBase; namespace UGQApiServer.Controllers.Admin; [Authorize] [ApiController] [ApiVersion("1.0")] [ApiExplorerSettings(GroupName = "admin")] [Route("api/v{version:apiVersion}/Admin/MetaData")] [ControllerName("MetaData")] [UGQAdminApi] [Authorize(Roles = "Admin,Service")] public class AdminMetaDataController : ControllerBase { AccountService _accountService; QuestEditorService _questEditorService; MetaDataApi _metaDataApi; QuestEditorApi _questEditorApi; DynamoDbClient _dynamoDbClient; public AdminMetaDataController( AccountService accountService, QuestEditorService questEditorService, MetaDataApi metaDataApi, QuestEditorApi questEditorApi, DynamoDbClient dynamoDbClient) { _accountService = accountService; _questEditorService = questEditorService; _metaDataApi = metaDataApi; _questEditorApi = questEditorApi; _dynamoDbClient = dynamoDbClient; } ///////////////////////////////////////////////////////////////////////////// // 메타데이터 어드민 ///////////////////////////////////////////////////////////////////////////// /// /// 사용가능한 시작 npc 가져오기 /// /// 유저 Guid /// 페이지 /// pageSize (최대 100) [HttpGet] [Route("assignable-npcs")] [Produces("application/json")] [SwaggerResponse(StatusCodes.Status200OK, Type = typeof(UGQNpcMetaDataList))] [SwaggerResponse(StatusCodes.Status400BadRequest, Type = typeof(ApiErrorResponse))] public async Task getAssignableNpcs([FromQuery] string userGuid, [FromQuery] int pageNumber, [FromQuery] int pageSize) { return await _metaDataApi.getAssignableNpcs(userGuid, pageNumber, pageSize); } /// /// 사용가능한 task action 가져오기 /// /// 유저 Guid /// 페이지 /// pageSize (최대 100) [HttpGet] [Route("available-task-actions")] [Produces("application/json")] [SwaggerResponse(StatusCodes.Status200OK, Type = typeof(TaskActionList))] [SwaggerResponse(StatusCodes.Status400BadRequest, Type = typeof(ApiErrorResponse))] public async Task getAvailableTaskActions([FromQuery] string userGuid, [FromQuery] int pageNumber, [FromQuery] int pageSize) { return await _metaDataApi.getAvailableTaskActions(pageNumber, pageSize); } /// /// 액션의 입력가능한 값 리스트 얻어오기 /// /// /// Task Action이 의상장착인 경우에 사용 /// /// 유저 Guid /// TaskAction의 아이디 /// 페이지 /// pageSize (최대 100) [HttpGet] [Route("task-action-values")] [Produces("application/json")] [SwaggerResponse(StatusCodes.Status200OK, Type = typeof(TaskActionValueList))] [SwaggerResponse(StatusCodes.Status400BadRequest, Type = typeof(ApiErrorResponse))] public async Task getActionValues([FromQuery] string userGuid, [FromQuery] int taskActionId, [FromQuery] int pageNumber, [FromQuery] int pageSize) { return await _metaDataApi.getActionValues(userGuid, taskActionId, pageNumber, pageSize); } /// /// 사용가능한 dialog 유형 가져오기 /// /// 유저 Guid /// 페이지 /// pageSize (최대 100) [HttpGet] [Route("dialog-types")] [Produces("application/json")] [SwaggerResponse(StatusCodes.Status200OK, Type = typeof(DialogTypeList))] [SwaggerResponse(StatusCodes.Status400BadRequest, Type = typeof(ApiErrorResponse))] public async Task getDialogTypes([FromQuery] string userGuid, [FromQuery] int pageNumber, [FromQuery] int pageSize) { return await _metaDataApi.getDialogTypes(pageNumber, pageSize); } /// /// dialog 유형에 따라 사용가능한 dialog 액션 가져오기 /// /// 유저 Guid /// dialog 유형 /// 페이지 /// pageSize (최대 100) [HttpGet] [Route("dialog-actions")] [Produces("application/json")] [SwaggerResponse(StatusCodes.Status200OK, Type = typeof(DialogActionList))] [SwaggerResponse(StatusCodes.Status400BadRequest, Type = typeof(ApiErrorResponse))] public async Task getDialogActions([FromQuery] string userGuid, [FromQuery] int dialogType, [FromQuery] int pageNumber, [FromQuery] int pageSize) { return await _metaDataApi.getDialogActions(dialogType, pageNumber, pageSize); } /// /// dialog 액션에 따라 입력 가능한 값 가져오기 /// /// 유저 Guid /// 다이얼로그 타입 /// 조건 종류 /// 페이지 /// pageSize (최대 100) [HttpGet] [Route("dialog-action-values")] [Produces("application/json")] [SwaggerResponse(StatusCodes.Status200OK, Type = typeof(DialogActionValueList))] [SwaggerResponse(StatusCodes.Status400BadRequest, Type = typeof(ApiErrorResponse))] public async Task getDialogConditionValues([FromQuery] string userGuid, [FromQuery] int dialogType, [FromQuery] int dialogActionId, [FromQuery] int pageNumber, [FromQuery] int pageSize) { return await _metaDataApi.getDialogConditionValues(dialogType, dialogActionId, pageNumber, pageSize); } [HttpGet] [Route("preset-images")] [Produces("application/json")] [SwaggerResponse(StatusCodes.Status200OK, Type = typeof(DialogActionValueList))] [SwaggerResponse(StatusCodes.Status400BadRequest, Type = typeof(ApiErrorResponse))] public async Task getPresetImages([FromQuery] string userGuid, [FromQuery] PresetKind kind, [FromQuery] PresetCategory category) { return await _metaDataApi.getPresetImages(kind, category); } }