Files
operationSystem-back/src/main/java/com/caliverse/admin/dynamodb/service/DynamodbMailService.java
bcjang 3ca0ea4bb5 HISTORYTYPE > HISTORYDETAILTYPE 변경
로그 유저 아닐시 시스템으로 남기게 변경
히스토리 남기는 방식 추가 적용
HistoryRequest 생성
히스토리 API 작업
히스토리 mongodb 조회
2025-05-22 14:54:43 +09:00

146 lines
5.9 KiB
Java

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.SEARCHTYPE;
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.*;
import com.caliverse.admin.dynamodb.domain.doc.MailDoc;
import com.caliverse.admin.dynamodb.domain.doc.MailJsonDoc;
import com.caliverse.admin.dynamodb.dto.PageResult;
import com.caliverse.admin.dynamodb.entity.KeyParam;
import com.caliverse.admin.dynamodb.repository.*;
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.global.common.utils.CommonUtils;
import com.caliverse.admin.logs.Indicatordomain.StartEndTime;
import com.caliverse.admin.logs.logservice.LogServiceHelper;
import com.caliverse.admin.logs.logservice.indicators.IndicatorsMoneyService;
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;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
@RequiredArgsConstructor
public class DynamodbMailService {
private final SystemMetaMailRepository systemMetaMailRepository;
private final MailRepository mailRepository;
private final MailJsonRepository mailJsonRepository;
private final MetaDataHandler metaDataHandler;
@DynamoDBTransaction
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<MailItemAttrib> items = new ArrayList<>();
items.add(MailItemAttrib.builder()
.itemId(landData.getLinkedItem())
.count(1.0)
.productId(0)
.isRepeatProduct(CommonConstants.FALSE)
.build()
);
mailRepository.insertRecvSystemMail(guid, nickname, items, systemMailData, arguments);
}
public PageResult<MailDoc> getMail(SEARCHTYPE type, String guid, String sortKey, KeyParam pageKey){
Map<String, AttributeValue> pagingKey = null;
if(pageKey != null){
pagingKey = new HashMap<>();
pagingKey.put(DynamoDBConstants.PK_KEY_NAME, AttributeValue.builder().s(pageKey.getPk()).build());
pagingKey.put(DynamoDBConstants.SK_KEY_NAME, AttributeValue.builder().s(pageKey.getSk()).build());
}
PageResult<MailDoc> mailList = mailRepository.getMailListWithPaging(type, guid, sortKey, pagingKey);
return mailList;
}
public MailJsonAttrib getMailJsonAttrib(String pk, String sk){
try {
Key key = Key.builder()
.partitionValue(pk)
.sortValue(sk)
.build();
MailJsonDoc mailDoc = mailJsonRepository.findById(key);
return CommonUtils.stringByObject(mailDoc.getAttribValue(), MailJsonAttrib.class);
}catch (Exception e){
log.error(e.getMessage());
}
return null;
}
@DynamoDBTransaction
public void deleteMail(String type, String userGuid, String mailGuid){
Key key;
if(type.equals("SEND")){
key = Key.builder()
.partitionValue(DynamoDBConstants.PK_KEY_SENT_MAIL + userGuid)
.sortValue(mailGuid)
.build();
}else{
key = Key.builder()
.partitionValue(DynamoDBConstants.PK_KEY_RECV_MAIL + userGuid)
.sortValue(mailGuid)
.build();
}
MailDoc mailDoc = mailRepository.findById(key);
MailAttrib attrib = mailDoc.getAttribValue();
if(attrib == null){
mailJsonRepository.deleteMail(key);
}else{
mailRepository.deleteMail(key);
}
}
@DynamoDBTransaction
public void deleteMailItem(String type, String userGuid, String mailGuid, Integer itemId, double count, double newCount){
Key key;
if(type.equals("SEND")){
key = Key.builder()
.partitionValue(DynamoDBConstants.PK_KEY_SENT_MAIL + userGuid)
.sortValue(mailGuid)
.build();
}else{
key = Key.builder()
.partitionValue(DynamoDBConstants.PK_KEY_RECV_MAIL + userGuid)
.sortValue(mailGuid)
.build();
}
MailDoc mailDoc = mailRepository.findById(key);
MailAttrib attrib = mailDoc.getAttribValue();
if(attrib == null){
mailJsonRepository.deleteMailItem(key, itemId, count, newCount);
}else{
mailRepository.deleteMailItem(key, itemId, count, newCount);
}
}
}