초기커밋
This commit is contained in:
169
ServerCommon/Helper/EntityHelper.cs
Normal file
169
ServerCommon/Helper/EntityHelper.cs
Normal file
@@ -0,0 +1,169 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user