dynamodb 우편 추가

This commit is contained in:
2025-03-14 18:21:32 +09:00
parent 2a94eb8f65
commit 8b316bd5a3
9 changed files with 251 additions and 11 deletions

View File

@@ -0,0 +1,54 @@
package com.caliverse.admin.dynamodb.domain.atrrib;
import com.caliverse.admin.dynamodb.entity.MailItem;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.*;
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
import java.util.List;
@Getter
@Setter
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@DynamoDbBean
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class MailAttrib extends DynamoDBAttribBase{
@JsonProperty("mail_guid")
private String mailGuid;
@JsonProperty("is_read")
private boolean isRead;
@JsonProperty("is_get_item")
private boolean isGetItem;
@JsonProperty("is_system_mail")
private boolean isSystemMail;
@JsonProperty("sender_nickname")
private String senderNickName;
@JsonProperty("sender_guid")
private String senderGuid;
@JsonProperty("receiver_nickname")
private String receiverNickName;
@JsonProperty("receiver_guid")
private String receiverGuid;
private String title;
private String text;
@JsonProperty("create_time")
private String createTime;
@JsonProperty("expire_time")
private String expireTime;
@JsonProperty("is_text_by_meta_data")
private boolean isTextByMetaData;
@JsonProperty("item_list")
private List<MailItem> itemList;
@JsonProperty("package_order_id")
private String packageOrderId;
@JsonProperty("contents_arguments")
private List<String> contentsArguments;
}

View File

@@ -0,0 +1,40 @@
package com.caliverse.admin.dynamodb.domain.doc;
import com.caliverse.admin.global.common.constants.DynamoDBConstants;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbAttribute;
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@DynamoDbBean
public class MailDoc extends DynamoDBDocBase {
private String mailAttrib;
@Setter
private long ttl;
public String getAttribFieldName() {
return DynamoDBConstants.ATTRIB_MAIL;
}
@DynamoDbAttribute(DynamoDBConstants.ATTRIB_MAIL)
@JsonProperty(DynamoDBConstants.ATTRIB_MAIL)
public String getAttribValue() {
return mailAttrib;
}
@DynamoDbAttribute("TTL")
@JsonProperty("TTL")
public long getTtl() {
return ttl;
}
public void setAttribValue(String value) {
this.mailAttrib = value;
}
}

View File

@@ -7,11 +7,11 @@ import lombok.Data;
@Data
@Builder
public class MailItem {
@JsonProperty("itemId")
@JsonProperty("ItemId")
private Integer itemId;
@JsonProperty("count")
@JsonProperty("Count")
private Double count;
@JsonProperty("productId")
@JsonProperty("ProductId")
private Integer productId;
@JsonProperty("isRepeatProduct")
private boolean isRepeatProduct;

View File

@@ -62,7 +62,7 @@ public class BuildingRepositoryImpl extends BaseDynamoDBRepository<BuildingDoc>
BuildingAttrib attrib = new BuildingAttrib();
attrib.setAttribType(DynamoDBConstants.ATTRIB_BUILDING);
attrib.setBuildingName(landRequest.getBuildingName());
attrib.setBuildingName("");
attrib.setBuildingMetaId(building_id);
attrib.setDescription("");
attrib.setOwnerUserGuid(guid);

View File

@@ -60,7 +60,7 @@ public class LandRepositoryImpl extends BaseDynamoDBRepository<LandDoc> implemen
LandAttrib attrib = new LandAttrib();
attrib.setAttribType(DynamoDBConstants.ATTRIB_LAND);
attrib.setLandName(landRequest.getLandName());
attrib.setLandName("");
attrib.setLandMetaId(land_id);
attrib.setDescription("");
attrib.setOwnerUserGuid(guid);

View File

@@ -0,0 +1,99 @@
package com.caliverse.admin.dynamodb.repository.Impl;
import com.caliverse.admin.domain.entity.HISTORYTYPE;
import com.caliverse.admin.domain.entity.Mail;
import com.caliverse.admin.domain.entity.metadata.MetaSystemMailData;
import com.caliverse.admin.dynamodb.domain.atrrib.MailAttrib;
import com.caliverse.admin.dynamodb.domain.doc.MailDoc;
import com.caliverse.admin.dynamodb.entity.MailItem;
import com.caliverse.admin.dynamodb.repository.BaseDynamoDBRepository;
import com.caliverse.admin.dynamodb.repository.MailRepository;
import com.caliverse.admin.dynamodb.service.DynamoDBOperations;
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.global.common.utils.DateUtils;
import com.caliverse.admin.history.service.DynamodbHistoryLogService;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.List;
import static com.caliverse.admin.global.common.utils.CommonUtils.convertUTCDate;
import static com.caliverse.admin.global.common.utils.DynamodbUtil.createMailItems;
@Component
@Slf4j
public class MailRepositoryImpl extends BaseDynamoDBRepository<MailDoc> implements MailRepository {
public MailRepositoryImpl(DynamoDBOperations operations, DynamodbHistoryLogService dynamodbHistoryLogService, ObjectMapper objectMapper) {
super(operations, MailDoc.class, dynamodbHistoryLogService, objectMapper);
}
@Override
public void insertRecvSystemMail(String userGuid, String nickname, List<MailItem> mailItems, MetaSystemMailData systemMailData, List<String> arguments) {
try {
LocalDateTime nowDate = LocalDateTime.now();
LocalDateTime maxDate = DateUtils.getMaxTime();
String expireTime = DateUtils.stringToISODateTimeMillisNano(maxDate);
String pk = DynamoDBConstants.PK_KEY_RECV_MAIL + userGuid;
String sk = String.format("%s-%s", DateUtils.getMailDateFormat(nowDate), CommonUtils.getCreateGuId());
MailAttrib attrib = new MailAttrib();
attrib.setAttribType(DynamoDBConstants.ATTRIB_MAIL);
attrib.setMailGuid(sk);
attrib.setRead(false);
attrib.setGetItem(false);
attrib.setSystemMail(true);
attrib.setSenderNickName(systemMailData.getSender());
attrib.setSenderGuid("");
attrib.setReceiverNickName(nickname);
attrib.setReceiverGuid(nickname);
attrib.setTitle(systemMailData.getMailTitle());
attrib.setText(systemMailData.getMailDesc());
attrib.setExpireTime(expireTime);
attrib.setCreateTime(DateUtils.stringToISODateTimeMillisNano(nowDate));
attrib.setTextByMetaData(true);
attrib.setItemList(mailItems);
attrib.setPackageOrderId("");
attrib.setContentsArguments(arguments);
MailDoc doc = new MailDoc();
doc.setPK(pk);
doc.setSK(sk);
doc.setDocType(DynamoDBConstants.DOC_Mail);
doc.setAttribValue(objectMapper.writeValueAsString(attrib));
doc.setCreatedDateTime(convertUTCDate(nowDate));
doc.setUpdatedDateTime(convertUTCDate(nowDate));
doc.setDeletedDateTime(DynamoDBConstants.MIN_DATE);
doc.setRestoredDateTime(DynamoDBConstants.MIN_DATE);
doc.setTtl(DateUtils.dateToISOUnixTime(maxDate));
save(doc);
log.info("MailDoc Recv Insert Success: {}", objectMapper.writeValueAsString(doc));
dynamodbHistoryLogService.insertHistoryLog(
HISTORYTYPE.LAND_OWNER_CHANGE_MAIL,
HISTORYTYPE.LAND_OWNER_CHANGE_MAIL.name(),
doc,
CommonUtils.getAdmin() == null ? "" : CommonUtils.getAdmin().getEmail(),
CommonUtils.getClientIp() == null ? "" : CommonUtils.getClientIp()
);
}catch (Exception e){
log.error("insert Error: {}", e.getMessage());
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.DYNAMODB_CONNECTION_ERROR.getMessage());
}
}
@Override
public void insertSentMail(Mail mail) {
}
}

View File

@@ -0,0 +1,14 @@
package com.caliverse.admin.dynamodb.repository;
import com.caliverse.admin.domain.entity.Mail;
import com.caliverse.admin.domain.entity.metadata.MetaSystemMailData;
import com.caliverse.admin.domain.request.MailRequest;
import com.caliverse.admin.dynamodb.domain.doc.MailDoc;
import com.caliverse.admin.dynamodb.entity.MailItem;
import java.util.List;
public interface MailRepository extends DynamoDBRepository<MailDoc> {
void insertRecvSystemMail(String userGuid, String nickname, List<MailItem> mailItems, MetaSystemMailData systemMailData, List<String> arguments);
void insertSentMail(Mail mail);
}

View File

@@ -45,7 +45,7 @@ public class DynamodbLandService {
int buildingId = landRequest.getBuildingId();
String guid = landRequest.getUserGuid();
log.info("ChangesLandOwner land: {}, guid: {}", landId, guid);
log.info("ChangesLandOwner land: {}, building: {}, guid: {}", landId, buildingId ,guid);
LandAttrib landAttrib = landRepository.findLandAttrib(landId);
if(landAttrib == null){
@@ -60,11 +60,11 @@ public class DynamodbLandService {
BuildingAttrib buildingAttrib = buildingRepository.findBuildingAttrib(buildingId);
if(buildingAttrib == null){
buildingRepository.insertBuilding(landRequest);
ownedBuildingRepository.insert(guid, landId);
ownedBuildingRepository.insert(guid, buildingId);
}else{
ownedBuildingRepository.delete(buildingAttrib.getOwnerUserGuid(), landId);
ownedBuildingRepository.delete(buildingAttrib.getOwnerUserGuid(), buildingId);
buildingRepository.updateBuilding(landRequest);
ownedBuildingRepository.insert(guid, landId);
ownedBuildingRepository.insert(guid, buildingId);
}
}
}

View File

@@ -1,16 +1,22 @@
package com.caliverse.admin.dynamodb.service;
import com.caliverse.admin.Indicators.entity.MoneyLogInfo;
import com.caliverse.admin.domain.datacomponent.MetaDataHandler;
import com.caliverse.admin.domain.entity.Event;
import com.caliverse.admin.domain.entity.Item;
import com.caliverse.admin.domain.entity.Message;
import com.caliverse.admin.domain.entity.metadata.MetaLandData;
import com.caliverse.admin.domain.entity.metadata.MetaSystemMailData;
import com.caliverse.admin.domain.request.LandRequest;
import com.caliverse.admin.dynamodb.domain.atrrib.MoneyAttrib;
import com.caliverse.admin.dynamodb.domain.atrrib.UserNicknameRegistryAttrib;
import com.caliverse.admin.dynamodb.entity.MailItem;
import com.caliverse.admin.dynamodb.repository.MailRepository;
import com.caliverse.admin.dynamodb.repository.MoneyRepository;
import com.caliverse.admin.dynamodb.repository.SystemMetaMailRepository;
import com.caliverse.admin.dynamodb.repository.UserNicknameRegistryRepository;
import com.caliverse.admin.global.common.annotation.DynamoDBTransaction;
import com.caliverse.admin.global.common.constants.AdminConstants;
import com.caliverse.admin.global.common.constants.CommonConstants;
import com.caliverse.admin.global.common.constants.DynamoDBConstants;
import com.caliverse.admin.logs.Indicatordomain.StartEndTime;
import com.caliverse.admin.logs.logservice.LogServiceHelper;
import com.caliverse.admin.logs.logservice.indicators.IndicatorsMoneyService;
@@ -21,6 +27,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@@ -31,10 +38,12 @@ public class DynamodbService {
private final UserNicknameRegistryRepository userNicknameRegistryRepository;
private final MoneyRepository moneyRepository;
private final SystemMetaMailRepository systemMetaMailRepository;
private final MailRepository mailRepository;
private final IndicatorsMoneyService moneyService;
private final ObjectMapper mapper = new ObjectMapper();
private final MetaDataHandler metaDataHandler;
public void saveUserMoney(){
try {
@@ -58,4 +67,28 @@ public class DynamodbService {
public void insertSystemMail(Event event){
systemMetaMailRepository.insert(event);
}
@DynamoDBTransaction
public void insertLandChangesMail(LandRequest landRequest){
MetaSystemMailData systemMailData = metaDataHandler.getMetaSystemMailListData().stream()
.filter(data -> data.getKey().equals(CommonConstants.SYSTEM_MAIL_LAND_TRANS_KEY)).findFirst().orElse(null);
MetaLandData landData = metaDataHandler.getMetaLandData(landRequest.getLandId());
List<String> arguments = new ArrayList<>();
arguments.add(landRequest.getUserName());
arguments.add(landData.getLandName());
String guid = landRequest.getUserGuid();
String nickname = landRequest.getUserName();
List<MailItem> items = new ArrayList<>();
items.add(MailItem.builder()
.itemId(landData.getLinkedItem())
.count(1.0)
.productId(0)
.isRepeatProduct(false)
.build()
);
mailRepository.insertRecvSystemMail(guid, nickname, items, systemMailData, arguments);
}
}