170 lines
5.7 KiB
C#
170 lines
5.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Numerics;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using Google.Protobuf.WellKnownTypes;
|
|
using Newtonsoft.Json;
|
|
|
|
|
|
using ServerCore;
|
|
using ServerBase;
|
|
using ServerControlCenter;
|
|
|
|
|
|
using USER_GUID = System.String;
|
|
using MASTER_GUID = System.String;
|
|
using MASTER_NICKNAME = System.String;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Amazon.S3.Model;
|
|
|
|
|
|
|
|
namespace ServerCommon;
|
|
|
|
public static class EntityHelper
|
|
{
|
|
public class MasterProfile
|
|
{
|
|
public MASTER_GUID MasterGuid { get; set; } = string.Empty;
|
|
public MASTER_NICKNAME MasterNickname { get; set; } = string.Empty;
|
|
}
|
|
|
|
public static (Result, MasterProfile?) getMasterProfile<TMasterEntity>(EntityBase owner)
|
|
where TMasterEntity : EntityBase
|
|
{
|
|
var result = new Result();
|
|
var err_msg = string.Empty;
|
|
|
|
var master_entity = owner as TMasterEntity;
|
|
if (null == master_entity)
|
|
{
|
|
if (true == owner.hasMasterGuid())
|
|
{
|
|
master_entity = owner.onGetMasterEntity() as TMasterEntity;
|
|
if (null == master_entity)
|
|
{
|
|
err_msg = $"Not related Master !!! : TMasterEntity:{nameof(TMasterEntity)} - {owner.toBasicString()}";
|
|
result.setFail(ServerErrorCode.MasterNotFound, err_msg);
|
|
Log.getLogger().error(err_msg);
|
|
|
|
return (result, null);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
err_msg = $"Not related Master !!! : TMasterEntity:{nameof(TMasterEntity)} - {owner.toBasicString()}";
|
|
result.setFail(ServerErrorCode.MasterNotRelated, err_msg);
|
|
Log.getLogger().error(err_msg);
|
|
|
|
return (result, null);
|
|
}
|
|
}
|
|
|
|
var entity_profile = new MasterProfile();
|
|
entity_profile.MasterGuid = (master_entity as dynamic).getUserGuid(); // 나중에 가상함수로 수정 하자. - kangms
|
|
entity_profile.MasterNickname = (master_entity as dynamic).getUserNickname(); // 나중에 가상함수로 수정 하자. - kangms
|
|
|
|
return (result, entity_profile);
|
|
}
|
|
|
|
public static OwnerEntityType toOwnerEntityType(this EntityType entityType)
|
|
{
|
|
if (EntityType.Player == entityType)
|
|
{
|
|
return OwnerEntityType.User;
|
|
}
|
|
else if (EntityType.Character == entityType)
|
|
{
|
|
return OwnerEntityType.Character;
|
|
}
|
|
else if (EntityType.UgcNpc == entityType
|
|
|| EntityType.Beacon == entityType)
|
|
{
|
|
return OwnerEntityType.UgcNpc;
|
|
}
|
|
else if (EntityType.MyHome == entityType)
|
|
{
|
|
return OwnerEntityType.Myhome;
|
|
}
|
|
|
|
var err_msg = $"Invalid EntityType !!! : EntityType:{entityType}";
|
|
Log.getLogger().error(err_msg);
|
|
|
|
return OwnerEntityType.None;
|
|
}
|
|
|
|
public static async Task<(Result, bool)> isUserLoggedIn(DynamoDbClient dynamoDbClient, USER_GUID userGuid)
|
|
{
|
|
var result = new Result();
|
|
|
|
// 1. UserBaseDoc 조회
|
|
(result, var user_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey<UserBaseDoc>(userGuid);
|
|
if (result.isFail())
|
|
{
|
|
return (result, false);
|
|
}
|
|
ArgumentNullException.ThrowIfNull(user_primary_key, $"user_primary_key is null !!! - userGuid:{userGuid}");
|
|
var query_config = dynamoDbClient.makeQueryConfigForReadByPKSK(user_primary_key.PK);
|
|
|
|
(result, var user_base_doc) = await dynamoDbClient.simpleQueryDocTypeWithQueryOperationConfig<UserBaseDoc>(query_config);
|
|
if (result.isFail())
|
|
{
|
|
return (result, false);
|
|
}
|
|
NullReferenceCheckHelper.throwIfNull(user_base_doc, () => $"user_base_doc is null !!! : userGuid:{userGuid}");
|
|
|
|
// 2. LoggedIn 체크
|
|
var user_base_attrib = user_base_doc.getAttrib<UserBaseAttrib>();
|
|
NullReferenceCheckHelper.throwIfNull(user_base_attrib, () => $"user_base_attrib is null !!!");
|
|
|
|
return (result, (user_base_attrib.GameLoginDateTime > user_base_attrib.GameLogoutDateTime));
|
|
}
|
|
|
|
public static async Task<(Result, List<ItemDoc>?)> findUserItemsWithCondition( DynamoDbClient dynamoDbClient, USER_GUID userGuid
|
|
, Func<ItemDoc, bool>? filterCondition )
|
|
{
|
|
var result = new Result();
|
|
|
|
// 1. ItemDoc 조회
|
|
(result, var user_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey<ItemDoc>(userGuid);
|
|
if (result.isFail())
|
|
{
|
|
return (result, null);
|
|
}
|
|
ArgumentNullException.ThrowIfNull(user_primary_key, $"user_primary_key is null !!! - userGuid:{userGuid}");
|
|
var query_config = dynamoDbClient.makeQueryConfigForReadByPKOnly(user_primary_key.PK);
|
|
|
|
(result, var found_item_docs) = await dynamoDbClient.simpleQueryDocTypesWithQueryOperationConfig<ItemDoc>(query_config);
|
|
if (result.isFail())
|
|
{
|
|
return (result, null);
|
|
}
|
|
NullReferenceCheckHelper.throwIfNull(found_item_docs, () => $"found_item_docs is null !!! : userGuid:{userGuid}");
|
|
|
|
if (null != filterCondition)
|
|
{
|
|
// 2. ItemDoc 조건 체크 !!!
|
|
var filtered_item_docs = new List<ItemDoc>();
|
|
|
|
foreach(var item_doc in found_item_docs)
|
|
{
|
|
var is_success = filterCondition.Invoke(item_doc);
|
|
if (is_success.isFalse())
|
|
{
|
|
continue;
|
|
}
|
|
|
|
filtered_item_docs.Add(item_doc);
|
|
}
|
|
|
|
return (result, filtered_item_docs);
|
|
}
|
|
|
|
return (result, found_item_docs);
|
|
}
|
|
}
|