초기커밋
This commit is contained in:
313
UGQDataAccess/Service/InGameService.cs
Normal file
313
UGQDataAccess/Service/InGameService.cs
Normal file
@@ -0,0 +1,313 @@
|
||||
using MongoDB.Driver;
|
||||
using UGQDatabase.Models;
|
||||
using UGQDataAccess.Repository;
|
||||
using UGQDataAccess.Repository.Models;
|
||||
using ServerCommon.UGQ;
|
||||
using ServerCommon.UGQ.Models;
|
||||
using System.Text.Json;
|
||||
using Amazon.DynamoDBv2.Model;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using ServerCommon;
|
||||
using MetaAssets;
|
||||
|
||||
namespace UGQDataAccess.Service;
|
||||
|
||||
|
||||
public class InGameService
|
||||
{
|
||||
readonly QuestContentRepository _questContentRepository;
|
||||
readonly QuestDialogRepository _questDialogRepository;
|
||||
readonly LikeRepository _likeRepository;
|
||||
readonly BookmarkRepository _bookmarkRepository;
|
||||
readonly NpcNameRepository _npcNameRepository;
|
||||
readonly GameQuestDataRepository _gameQuestDataRepository;
|
||||
readonly ReportRepository _reportRepository;
|
||||
readonly AccountRepository _accountRepository;
|
||||
readonly QuestAcceptedRepository _questAccceptedRepository;
|
||||
readonly QuestCompletedRepository _questCompletedRepository;
|
||||
readonly QuestAbortedRepository _questAbortedRepository;
|
||||
readonly CreatorPointHistoryRepository _creatorPointHistoryRepository;
|
||||
|
||||
readonly AccountService _accountService;
|
||||
|
||||
public InGameService(
|
||||
AccountService accountService,
|
||||
QuestContentRepository questContentRepository,
|
||||
QuestDialogRepository questDialogRepository,
|
||||
LikeRepository likeRepository,
|
||||
BookmarkRepository bookmarkRepository,
|
||||
NpcNameRepository npcNameRepository,
|
||||
GameQuestDataRepository gameQuestDataRepository,
|
||||
ReportRepository reportRepository,
|
||||
AccountRepository accountRepository,
|
||||
QuestAcceptedRepository accceptedRepository,
|
||||
QuestCompletedRepository completedRepository,
|
||||
QuestAbortedRepository questAbortedRepository,
|
||||
CreatorPointHistoryRepository creatorPointHistoryRepository)
|
||||
{
|
||||
_accountService = accountService;
|
||||
_questContentRepository = questContentRepository;
|
||||
_questDialogRepository = questDialogRepository;
|
||||
_likeRepository = likeRepository;
|
||||
_bookmarkRepository = bookmarkRepository;
|
||||
_npcNameRepository = npcNameRepository;
|
||||
_gameQuestDataRepository = gameQuestDataRepository;
|
||||
_reportRepository = reportRepository;
|
||||
_accountRepository = accountRepository;
|
||||
|
||||
_questAccceptedRepository = accceptedRepository;
|
||||
_questCompletedRepository = completedRepository;
|
||||
_questAbortedRepository = questAbortedRepository;
|
||||
|
||||
_creatorPointHistoryRepository = creatorPointHistoryRepository;
|
||||
}
|
||||
|
||||
public async Task<(ServerErrorCode, AccountEntity?)> getAccount(string userGuid)
|
||||
{
|
||||
AccountEntity? entity = await _accountRepository.get(userGuid);
|
||||
if (entity == null)
|
||||
return (ServerErrorCode.UgqNullEntity, null);
|
||||
|
||||
return (ServerErrorCode.Success, entity);
|
||||
}
|
||||
|
||||
public async Task<List<QuestContentEntity>> getUserQuests(string userGuid, IEnumerable<QuestContentState> states)
|
||||
{
|
||||
return await _questContentRepository.getUserQuests(userGuid, states);
|
||||
}
|
||||
|
||||
public async Task<QuestBoardQueryResult> getQuestBoard(string? userGuid, UgqQuestBoardRequest request, int pageSize)
|
||||
{
|
||||
return await _questContentRepository.getQuestBoard(userGuid, request, pageSize);
|
||||
}
|
||||
|
||||
public async Task<QuestBoardQueryResult> getBookmarkQuests(string userGuid, UgqQuestBoardRequest request, int pageSize)
|
||||
{
|
||||
return await _questContentRepository.getBookmarkQuests(userGuid, request, pageSize);
|
||||
}
|
||||
|
||||
public async Task<QuestBoardSportlightQueryResult> getQuestBoardSpotlight()
|
||||
{
|
||||
return await _questContentRepository.getQuestBoardSpotlight();
|
||||
}
|
||||
|
||||
public async Task<QuestBoardDetailItemResult?> getQuestBoardDetail(string userGuid, long questId, long revision)
|
||||
{
|
||||
return await _questContentRepository.getQuestBoardDetail(userGuid, questId, revision);
|
||||
}
|
||||
|
||||
public async Task<ServerErrorCode> bookmark(long questId, string userGuid)
|
||||
{
|
||||
var entity = await _bookmarkRepository.get(questId, userGuid);
|
||||
if (entity != null)
|
||||
return ServerErrorCode.UgqAlreadyBookmarked;
|
||||
|
||||
return await _bookmarkRepository.insert(questId, userGuid);
|
||||
}
|
||||
|
||||
public async Task<ServerErrorCode> unbookmark(long questId, string userGuid)
|
||||
{
|
||||
var entity = await _bookmarkRepository.get(questId, userGuid);
|
||||
if (entity == null)
|
||||
return ServerErrorCode.UgqNotBookmarked;
|
||||
|
||||
return await _bookmarkRepository.delete(questId, userGuid);
|
||||
}
|
||||
|
||||
public async Task<ServerErrorCode> like(long questId, long revision, string userGuid)
|
||||
{
|
||||
var entity = await _likeRepository.get(questId, userGuid);
|
||||
if (entity != null)
|
||||
return ServerErrorCode.UgqAlreadyLiked;
|
||||
|
||||
return await _likeRepository.insert(questId, revision, userGuid);
|
||||
}
|
||||
|
||||
public async Task<ServerErrorCode> unlike(long questId, long revision, string userGuid)
|
||||
{
|
||||
var entity = await _likeRepository.get(questId, userGuid);
|
||||
if (entity == null)
|
||||
return ServerErrorCode.UgqNotLiked;
|
||||
|
||||
return await _likeRepository.delete(questId, revision, userGuid);
|
||||
}
|
||||
|
||||
public async Task<ServerErrorCode> report(string userGuid, long questId, long revision, string contents)
|
||||
{
|
||||
var entity = await _reportRepository.get(questId, revision, userGuid);
|
||||
if (entity != null)
|
||||
return ServerErrorCode.UgqAlreadyReported;
|
||||
|
||||
await _reportRepository.insert(questId, revision, userGuid, contents);
|
||||
return ServerErrorCode.Success;
|
||||
}
|
||||
|
||||
public async Task<ServerErrorCode> setQuestAccepted(string userGuid, UgqQuestAcceptedRequest request)
|
||||
{
|
||||
var gameQuestData = await _gameQuestDataRepository.get(request.QuestId, request.Revision, QuestContentState.Live);
|
||||
if (gameQuestData == null)
|
||||
return ServerErrorCode.UgqNullEntity;
|
||||
|
||||
string author = gameQuestData.UserGuid;
|
||||
|
||||
await _questAccceptedRepository.insert(request.QuestId, request.Revision, author, request.Reason, userGuid);
|
||||
return ServerErrorCode.Success;
|
||||
}
|
||||
|
||||
public async Task<ServerErrorCode> setQuestCompleted(string userGuid, UgqQuestCompletedRequest request)
|
||||
{
|
||||
var gameQuestData = await _gameQuestDataRepository.get(request.QuestId, request.Revision, QuestContentState.Live);
|
||||
if (gameQuestData == null)
|
||||
return ServerErrorCode.UgqNullEntity;
|
||||
|
||||
string author = gameQuestData.UserGuid;
|
||||
|
||||
await _questCompletedRepository.insert(request.QuestId, request.Revision, author, userGuid);
|
||||
|
||||
double cost = 0.0f;
|
||||
switch (gameQuestData.GradeType)
|
||||
{
|
||||
case UgqGradeType.Amature: cost = MetaHelper.GameConfigMeta.UgqUsageFeeAmateur / 2.0f; break;
|
||||
case UgqGradeType.RisingStar: cost = MetaHelper.GameConfigMeta.UgqUsageFeeRisingStar / 10.0f; break;
|
||||
case UgqGradeType.Master1: cost = MetaHelper.GameConfigMeta.UgqUsageFeeMaster1 / 2.0f; break;
|
||||
case UgqGradeType.Master2: cost = MetaHelper.GameConfigMeta.UgqUsageFeeMaster2 / 2.0f; break;
|
||||
case UgqGradeType.Master3: cost = MetaHelper.GameConfigMeta.UgqUsageFeeMaster3 / 2.0f; break;
|
||||
default:
|
||||
return ServerErrorCode.UgqCurrencyError;
|
||||
}
|
||||
/*
|
||||
long completeCount = await _questCompletedRepository.getCount(author);
|
||||
if(completeCount >= MetaHelper.GameConfigMeta.UGQPromoteConditionRisingstar)
|
||||
{
|
||||
await _accountService.promoteAccountGrade(author, UgqGradeType.Amature, UgqGradeType.RisingStar);
|
||||
}
|
||||
*/
|
||||
|
||||
return await _accountService.addCreatorPoint(author, request.QuestId, request.Revision, cost, UgqCreatorPointReason.QuestCompleted);
|
||||
|
||||
}
|
||||
|
||||
public async Task<ServerErrorCode> setQuestAborted(string userGuid, UgqQuestAbortedRequest request)
|
||||
{
|
||||
var gameQuestData = await _gameQuestDataRepository.get(request.QuestId, request.Revision, QuestContentState.Live);
|
||||
if (gameQuestData == null)
|
||||
return ServerErrorCode.UgqNullEntity;
|
||||
|
||||
string author = gameQuestData.UserGuid;
|
||||
|
||||
await _questAbortedRepository.insert(request.QuestId, request.Revision, author, request.Reason, userGuid);
|
||||
return ServerErrorCode.Success;
|
||||
}
|
||||
|
||||
public async Task<(ServerErrorCode, QuestContentEntity?)> changeQuestStateForInGame(string userGuid,
|
||||
long questId, long revision,
|
||||
IEnumerable<QuestContentState> before, QuestContentState after)
|
||||
{
|
||||
var content = await _questContentRepository.getByQuestIdRevision(questId, revision);
|
||||
if (content == null)
|
||||
return (ServerErrorCode.UgqNullEntity, null);
|
||||
|
||||
var errorCode = ServerErrorCode.Success;
|
||||
QuestContentEntity? updated = null;
|
||||
switch (after)
|
||||
{
|
||||
case QuestContentState.Standby:
|
||||
updated = await _questContentRepository.updateState(content.Id,
|
||||
content.QuestId, content.Revision, before, after);
|
||||
break;
|
||||
case QuestContentState.Editable:
|
||||
updated = await _questContentRepository.updateState(content.Id,
|
||||
content.QuestId, content.Revision, before, after);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> Test <20><><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
await _gameQuestDataRepository.delete(content.QuestId, content.Revision, QuestContentState.Test);
|
||||
break;
|
||||
default:
|
||||
errorCode = ServerErrorCode.UgqStateChangeError;
|
||||
break;
|
||||
}
|
||||
|
||||
if (updated == null)
|
||||
return (ServerErrorCode.UgqStateChangeError, null);
|
||||
|
||||
return (errorCode, updated);
|
||||
}
|
||||
|
||||
public async Task<(ServerErrorCode, GameQuestDataEntity?)> getTestGameQuestData(string userGuid, long questId, long revision)
|
||||
{
|
||||
GameQuestDataEntity? entity = await _gameQuestDataRepository.get(questId, revision, QuestContentState.Test);
|
||||
if (entity == null)
|
||||
return (ServerErrorCode.UgqNullEntity, null);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>ۼ<EFBFBD><DBBC><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><> Test <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if (entity.UserGuid != userGuid)
|
||||
return (ServerErrorCode.UgqNotOwnQuest, null);
|
||||
|
||||
return (ServerErrorCode.Success, entity);
|
||||
}
|
||||
|
||||
public async Task<(ServerErrorCode, GameQuestDataEntity?)> getGameQuestData(long questId, long revision, QuestContentState state)
|
||||
{
|
||||
GameQuestDataEntity? entity = await _gameQuestDataRepository.get(questId, revision, state);
|
||||
if(entity == null)
|
||||
return (ServerErrorCode.UgqNullEntity, null);
|
||||
|
||||
return (ServerErrorCode.Success, entity);
|
||||
}
|
||||
|
||||
public async Task<(ServerErrorCode, GameQuestDataEntity?)> getLatestRevisionGameQuestData(long questId)
|
||||
{
|
||||
GameQuestDataEntity? entity = await _gameQuestDataRepository.getLatestRevision(questId);
|
||||
if (entity == null)
|
||||
return (ServerErrorCode.UgqNullEntity, null);
|
||||
|
||||
return (ServerErrorCode.Success, entity);
|
||||
}
|
||||
|
||||
public async Task setAuthor()
|
||||
{
|
||||
{
|
||||
var list = await _questAbortedRepository.getAll();
|
||||
foreach (var item in list)
|
||||
{
|
||||
var gameQuestData = await _gameQuestDataRepository.get(item.QuestId, item.Revision, QuestContentState.Live);
|
||||
if (gameQuestData == null)
|
||||
continue;
|
||||
|
||||
string author = gameQuestData.UserGuid;
|
||||
await _questAbortedRepository.setAuthor(item.Id, author);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
var list = await _questAccceptedRepository.getAll();
|
||||
foreach (var item in list)
|
||||
{
|
||||
var gameQuestData = await _gameQuestDataRepository.get(item.QuestId, item.Revision, QuestContentState.Live);
|
||||
if (gameQuestData == null)
|
||||
continue;
|
||||
|
||||
string author = gameQuestData.UserGuid;
|
||||
await _questAccceptedRepository.setAuthor(item.Id, author);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
var list = await _questCompletedRepository.getAll();
|
||||
foreach (var item in list)
|
||||
{
|
||||
var gameQuestData = await _gameQuestDataRepository.get(item.QuestId, item.Revision, QuestContentState.Live);
|
||||
if (gameQuestData == null)
|
||||
continue;
|
||||
|
||||
string author = gameQuestData.UserGuid;
|
||||
await _questCompletedRepository.setAuthor(item.Id, author);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user