초기커밋

This commit is contained in:
2025-05-01 07:20:41 +09:00
commit 98bb2e3c5c
2747 changed files with 646947 additions and 0 deletions

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