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);
}
}