using ServerBase; namespace BrokerApiCore; using ServerCommon; //========================================== // 유저의 인증 처리 Action 정의 //========================================== public class UserAuthAction : EntityActionBase { private readonly DynamoDbClient m_dynamo_db_client; public UserAuthAction(EntityBase owner, DynamoDbClient dynamoDbClient) : base(owner) { this.m_dynamo_db_client = dynamoDbClient; } public override Task onInit() { return Task.FromResult(new Result()); } public override void onClear() { throw new NotImplementedException(); } public async Task<(Result, AccountBaseDoc?)> findAccountDoc(string accountId) { return await EntityHelper.findDocByPk(accountId, getOwner(), m_dynamo_db_client); } public async Task<(Result, UserBaseDoc?)> findUserDoc(string userGuid) { return await EntityHelper.findDocByPk(userGuid, getOwner(), m_dynamo_db_client); } public async Task<(Result, NicknameDoc?)> findNicknameDoc(string nickname) { return await EntityHelper.findDocByPk(nickname, getOwner(), m_dynamo_db_client); } public async Task findAndSetAllAttributeByAccountId(string accountId) { var result = await findAndSetAccount(accountId); if (result.isFail()) { return result; } var user_guid = getOwner().getEntityAttributeNotNull().UserGuid; result = await findAndSetUser(user_guid); if (result.isFail()) { return result; } result = await findAndSetNickName(user_guid); if (result.isFail()) { return result; } return result; } public async Task findAndSetAllAttributeByUserGuid(string userGuid) { var result = await findAndSetUser(userGuid); if (result.isFail()) { return result; } result = await findAndSetNickName(userGuid); if (result.isFail()) { return result; } var account_id = getOwner().getEntityAttributeNotNull().AccountId; result = await findAndSetAccount(account_id); if (result.isFail()) { return result; } return result; } // account로 AccountDoc을 읽고, AccountAttribute에 저장한다. public async Task findAndSetAccount(string accountId) { var (result, doc) = await findAccountDoc(accountId); if (result.isFail()) { return result; } if (doc is null) { result.setFail(ServerErrorCode.AccountIdInvalid, accountId); return result; } var attribute = getOwner().getEntityAttributeNotNull(); attribute.copyEntityAttributeFromDoc(doc); return result; } // UserBaseDoc을 읽고 UserAttribute에 저장 public async Task findAndSetUser(string userGuid) { var (result, doc) = await findUserDoc(userGuid); if (result.isFail()) { return result; } if (doc is null) { result.setFail(ServerErrorCode.UserGuidInvalid, $"userGuid:{userGuid} not found - {getOwner().toBasicString()}"); return result; } var attribute = getOwner().getEntityAttributeNotNull(); attribute.copyEntityAttributeFromDoc(doc); return result; } // NicknameDoc을 읽고, NicknameAttribute에 저장 public async Task findAndSetNickName(string userGuid) { var (result, doc) = await findNicknameDoc(userGuid); if (result.isFail()) { return result; } if (doc is null) { result.setFail(ServerErrorCode.NotFoundNickName, $"nickname not found by userGuid:{userGuid} - {getOwner().toBasicString()}"); return result; } var attribute = getOwner().getEntityAttributeNotNull(); attribute.copyEntityAttributeFromDoc(doc); return result; } }