유저 닉네임 변경 처리

This commit is contained in:
2025-05-12 17:04:15 +09:00
parent fe6eb55766
commit f537b6d424
10 changed files with 162 additions and 20 deletions

View File

@@ -57,7 +57,10 @@ public enum HISTORYTYPE {
MENU_BANNER_DELETE("메뉴 배너 삭제"),
ITEM_UPDATE("아이템 수정"),
ITEM_DELETE("아이템 삭제"),
USER_ADMIN_AUTH_UPDATE("유저 관리자 권한 수정")
USER_ADMIN_AUTH_UPDATE("유저 관리자 권한 수정"),
NICKNAME_REGISTRY_DELETE("닉네임 레지스트리 삭제"),
NICKNAME_REGISTRY_ADD("닉네임 레지스트리 등록"),
NICKNAME_UPDATE("닉네임 수정")
;
private String historyType;
HISTORYTYPE(String type) {

View File

@@ -56,7 +56,6 @@ public class UsersService {
private final DynamodbUserService dynamodbUserService;
private final DynamodbItemService dynamodbItemService;
//metadataHandler 어떻게 가져와야 되는가
@Autowired
private MetaDataHandler metaDataHandler;
@@ -69,17 +68,11 @@ public class UsersService {
//신규 닉네임 유효성 체크
ErrorCode check = CommonUtils.isValidNickname(newNickname);
if(!check.equals(ErrorCode.SUCCESS)){
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), check.getMessage() );
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), check.toString() );
}
String isGuid = dynamodbUserService.getNameByGuid(newNickname);
if(!isGuid.isEmpty()){
//변경 닉네임이 존재합니다. 다시 시도해주세요.
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.NICKNAME_EXIT_ERROR.getMessage() );
}else{
dynamoDBService.updateNickname(guid,nickname,newNickname);
}
userGameSessionService.kickUserSession(guid, String.format("%s User Nickname Changes", nickname));
dynamodbUserService.changesNickname(guid, nickname, newNickname);
return UsersResponse.builder()
.resultData(UsersResponse.ResultData.builder()
@@ -133,14 +126,23 @@ public class UsersService {
// Map<String,String> res = dynamoDBService.findUsersBykey(searchType, searchKey);
Map<String,String> resultMap = new HashMap<>();
if(searchType.equals(SEARCHTYPE.NAME.name())){
resultMap.put("guid", dynamodbUserService.getNameByGuid(searchKey.toLowerCase())); //nickname은 무조건 소문자
resultMap.put("nickname", searchKey);
String name_guid = dynamodbUserService.getNameByGuid(searchKey.toLowerCase());
if(!name_guid.isEmpty()){
resultMap.put("guid", name_guid); //nickname은 무조건 소문자
resultMap.put("nickname", searchKey);
}
}else if(searchType.equals(SEARCHTYPE.GUID.name())){
resultMap.put("guid", searchKey);
resultMap.put("nickname", dynamodbUserService.getGuidByName(searchKey));
String guid_name = dynamodbUserService.getGuidByName(searchKey);
if(!guid_name.isEmpty()){
resultMap.put("guid", searchKey);
resultMap.put("nickname", guid_name);
}
}else if(searchType.equals(SEARCHTYPE.ACCOUNT.name())){
resultMap.put("guid", dynamodbUserService.getAccountIdByGuid(searchKey));
resultMap.put("nickname", dynamodbUserService.getAccountIdByName(searchKey));
String account_guid = dynamodbUserService.getAccountIdByGuid(searchKey);
if(!account_guid.isEmpty()){
resultMap.put("guid", account_guid);
resultMap.put("nickname", dynamodbUserService.getAccountIdByName(searchKey));
}
}
return UsersResponse.builder()

View File

@@ -97,6 +97,8 @@ public class LandAuctionRegistryRepositoryImpl extends BaseDynamoDBRepository<La
registry.setDeletedDateTime(DynamoDBConstants.MIN_DATE);
registry.setRestoredDateTime(DynamoDBConstants.MIN_DATE);
save(registry);
log.info("LandAuctionRegistryDoc Insert Success: {}", objectMapper.writeValueAsString(registry));
dynamodbHistoryLogService.insertHistoryLog(
@@ -105,7 +107,6 @@ public class LandAuctionRegistryRepositoryImpl extends BaseDynamoDBRepository<La
registry
);
save(registry);
}catch (Exception e){
log.error("Insert LandAuctionRegistry Error: {}", e.getMessage());
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.DYNAMODB_CONNECTION_ERROR.getMessage());

View File

@@ -1,7 +1,10 @@
package com.caliverse.admin.dynamodb.repository.Impl;
import com.caliverse.admin.domain.entity.HISTORYTYPE;
import com.caliverse.admin.dynamodb.domain.atrrib.NicknameAttrib;
import com.caliverse.admin.dynamodb.domain.atrrib.UserNicknameRegistryAttrib;
import com.caliverse.admin.dynamodb.domain.doc.NicknameDoc;
import com.caliverse.admin.dynamodb.domain.doc.UserNicknameRegistryDoc;
import com.caliverse.admin.dynamodb.repository.BaseDynamoDBRepository;
import com.caliverse.admin.dynamodb.repository.NicknameRepository;
import com.caliverse.admin.dynamodb.service.DynamoDBOperations;
@@ -9,6 +12,7 @@ import com.caliverse.admin.global.common.code.CommonCode;
import com.caliverse.admin.global.common.code.ErrorCode;
import com.caliverse.admin.global.common.constants.DynamoDBConstants;
import com.caliverse.admin.global.common.exception.RestApiException;
import com.caliverse.admin.global.common.utils.CommonUtils;
import com.caliverse.admin.history.service.DynamodbHistoryLogService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -16,6 +20,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import software.amazon.awssdk.enhanced.dynamodb.Key;
import java.time.LocalDateTime;
@Component
@Slf4j
public class NicknameRepositoryImpl extends BaseDynamoDBRepository<NicknameDoc> implements NicknameRepository {
@@ -40,4 +46,40 @@ public class NicknameRepositoryImpl extends BaseDynamoDBRepository<NicknameDoc>
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.DYNAMODB_CONNECTION_ERROR.getMessage());
}
}
@Override
public void updateNickname(String guid, String newNickname) {
Key key = Key.builder()
.partitionValue(DynamoDBConstants.PK_KEY_NICKNAME + guid)
.sortValue(DynamoDBConstants.EMPTY)
.build();
try {
NicknameDoc beforeDoc = findById(key);
if (beforeDoc != null) {
NicknameDoc afterDoc = deepCopy(beforeDoc, NicknameDoc.class);
NicknameAttrib attrib = CommonUtils.stringByObject(afterDoc.getAttribValue(), NicknameAttrib.class);
attrib.setNickname(newNickname);
afterDoc.setAttribValue(CommonUtils.objectByString(attrib));
afterDoc.setUpdatedDateTime(CommonUtils.convertUTCDate(LocalDateTime.now()));
update(afterDoc);
log.info("NicknameDoc Update Success: {}", objectMapper.writeValueAsString(afterDoc));
dynamodbHistoryLogService.updateHistoryLog(
HISTORYTYPE.NICKNAME_UPDATE,
HISTORYTYPE.NICKNAME_UPDATE.name(),
beforeDoc,
afterDoc
);
}
}catch (Exception e){
log.error("Update Nickname Error: {}", e.getMessage());
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.DYNAMODB_CONNECTION_ERROR.getMessage());
}
}
}

View File

@@ -1,7 +1,10 @@
package com.caliverse.admin.dynamodb.repository.Impl;
import com.caliverse.admin.domain.entity.HISTORYTYPE;
import com.caliverse.admin.dynamodb.domain.atrrib.AccountBaseAttrib;
import com.caliverse.admin.dynamodb.domain.atrrib.LandAuctionRegistryAttrib;
import com.caliverse.admin.dynamodb.domain.atrrib.UserNicknameRegistryAttrib;
import com.caliverse.admin.dynamodb.domain.doc.LandAuctionRegistryDoc;
import com.caliverse.admin.dynamodb.domain.doc.UserNicknameRegistryDoc;
import com.caliverse.admin.dynamodb.repository.BaseDynamoDBRepository;
import com.caliverse.admin.dynamodb.repository.UserNicknameRegistryRepository;
@@ -19,6 +22,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import software.amazon.awssdk.enhanced.dynamodb.Key;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -89,4 +93,63 @@ public class UserNicknameRegistryRepositoryImpl extends BaseDynamoDBRepository<U
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
@Override
public void deleteNickname(String nickname) {
Key key = Key.builder()
.partitionValue(DynamoDBConstants.PK_KEY_USER_NICKNAME_REGISTRY)
.sortValue(nickname.toLowerCase())
.build();
try {
UserNicknameRegistryDoc beforeDoc = findById(key);
if (beforeDoc != null) {
delete(key);
log.info("UserNicknameRegistryDoc Delete Success: {}", objectMapper.writeValueAsString(beforeDoc));
dynamodbHistoryLogService.deleteHistoryLog(
HISTORYTYPE.NICKNAME_REGISTRY_DELETE,
HISTORYTYPE.NICKNAME_REGISTRY_DELETE.name(),
beforeDoc
);
}
}catch (Exception e){
log.error("Delete UserNicknameRegistry Error: {}", e.getMessage());
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.DYNAMODB_CONNECTION_ERROR.getMessage());
}
}
@Override
public void insertChangesNickname(UserNicknameRegistryDoc beforeDoc, String newNickname) {
LocalDateTime nowDate = LocalDateTime.now();
try {
if (beforeDoc != null) {
UserNicknameRegistryDoc afterDoc = deepCopy(beforeDoc, UserNicknameRegistryDoc.class);
UserNicknameRegistryAttrib attrib = CommonUtils.stringByObject(afterDoc.getAttribValue(), UserNicknameRegistryAttrib.class);
attrib.setNickname(newNickname.toLowerCase());
afterDoc.setSK(newNickname.toLowerCase());
afterDoc.setAttribValue(CommonUtils.objectByString(attrib));
afterDoc.setCreatedDateTime(CommonUtils.convertUTCDate(nowDate));
afterDoc.setUpdatedDateTime(CommonUtils.convertUTCDate(nowDate));
save(afterDoc);
log.info("UserNicknameRegistryDoc Insert Success: {}", objectMapper.writeValueAsString(afterDoc));
dynamodbHistoryLogService.insertHistoryLog(
HISTORYTYPE.NICKNAME_REGISTRY_ADD,
HISTORYTYPE.NICKNAME_REGISTRY_ADD.name(),
afterDoc
);
}
}catch (Exception e){
log.error("Insert UserNicknameRegistry Error: {}", e.getMessage());
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.DYNAMODB_CONNECTION_ERROR.getMessage());
}
}
}

View File

@@ -5,4 +5,5 @@ import com.caliverse.admin.dynamodb.domain.doc.NicknameDoc;
public interface NicknameRepository extends DynamoDBRepository<NicknameDoc> {
NicknameAttrib findUser(String guid);
void updateNickname(String guid, String newNickname);
}

View File

@@ -10,4 +10,6 @@ public interface UserNicknameRegistryRepository extends DynamoDBRepository<UserN
UserNicknameRegistryAttrib findUser(String nickname);
List<String> findAllNicknameByGuid();
List<UserNicknameRegistryAttrib> findAllAttrib();
void deleteNickname(String nickname);
void insertChangesNickname(UserNicknameRegistryDoc beforeDoc, String newNickname);
}

View File

@@ -2,13 +2,19 @@ package com.caliverse.admin.dynamodb.service;
import com.caliverse.admin.domain.entity.BlackList;
import com.caliverse.admin.dynamodb.domain.atrrib.*;
import com.caliverse.admin.dynamodb.domain.doc.UserNicknameRegistryDoc;
import com.caliverse.admin.dynamodb.entity.EAuthAdminLevelType;
import com.caliverse.admin.dynamodb.repository.*;
import com.caliverse.admin.global.common.annotation.DynamoDBTransaction;
import com.caliverse.admin.global.common.code.CommonCode;
import com.caliverse.admin.global.common.code.ErrorCode;
import com.caliverse.admin.global.common.constants.DynamoDBConstants;
import com.caliverse.admin.global.common.exception.RestApiException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import software.amazon.awssdk.enhanced.dynamodb.Key;
@Slf4j
@@ -124,4 +130,26 @@ public class DynamodbUserService {
return moneyRepository.findAttrib(guid);
}
@DynamoDBTransaction
public void changesNickname(String guid, String oldNickname, String newNickname){
UserNicknameRegistryAttrib newNicknameAttrib = userNicknameRegistryRepository.findUser(newNickname.toLowerCase());
if(newNicknameAttrib != null){
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.NICKNAME_EXIT_ERROR.toString());
}
Key key = Key.builder()
.partitionValue(DynamoDBConstants.PK_KEY_USER_NICKNAME_REGISTRY)
.sortValue(oldNickname.toLowerCase())
.build();
UserNicknameRegistryDoc beforeDoc = userNicknameRegistryRepository.findById(key);
if(beforeDoc == null){
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.DYNAMODB_NOT_USER.toString());
}
userNicknameRegistryRepository.deleteNickname(oldNickname);
userNicknameRegistryRepository.insertChangesNickname(beforeDoc, newNickname);
nicknameRepository.updateNickname(guid, newNickname);
}
}

View File

@@ -62,7 +62,7 @@ public class DynamoDBTransactionAspect {
} catch (Exception e) {
log.error("DynamoDB operation error: {}", e.getMessage());
throw new RestApiException(CommonCode.ERROR.getHttpStatus(),
ErrorCode.DYNAMODB_CONNECTION_ERROR.getMessage());
e.getMessage().isEmpty() ? ErrorCode.DYNAMODB_CONNECTION_ERROR.getMessage() : e.getMessage());
} finally {
// 트랜잭션 컨텍스트 정리
DynamoDBTransactionContext.clear();

View File

@@ -99,7 +99,7 @@ public class RedisUserInfoService {
allChannels.addAll(channels_c);
String server_name = allChannels.stream().findFirst().get();
log.info("noticeJob DynamicScheduler.getFirstChannel serverList : {}", allChannels);
log.info("getFirstChannel serverList : {}", allChannels);
return server_name;
}