package com.ctrip.framework.apollo.biz.service; import com.google.gson.Gson; import com.ctrip.framework.apollo.biz.entity.Audit; import com.ctrip.framework.apollo.biz.entity.ReleaseHistory; import com.ctrip.framework.apollo.biz.repository.ReleaseHistoryRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.Map; /** * @author Jason Song(song_s@ctrip.com) */ @Service public class ReleaseHistoryService { private Gson gson = new Gson(); @Autowired private ReleaseHistoryRepository releaseHistoryRepository; @Autowired private AuditService auditService; public Page<ReleaseHistory> findReleaseHistoriesByNamespace(String appId, String clusterName, String namespaceName, Pageable pageable) { return releaseHistoryRepository.findByAppIdAndClusterNameAndNamespaceNameOrderByIdDesc(appId, clusterName, namespaceName, pageable); } public Page<ReleaseHistory> findByReleaseIdAndOperation(long releaseId, int operation, Pageable page) { return releaseHistoryRepository.findByReleaseIdAndOperationOrderByIdDesc(releaseId, operation, page); } public Page<ReleaseHistory> findByPreviousReleaseIdAndOperation(long previousReleaseId, int operation, Pageable page) { return releaseHistoryRepository.findByPreviousReleaseIdAndOperationOrderByIdDesc(previousReleaseId, operation, page); } @Transactional public ReleaseHistory createReleaseHistory(String appId, String clusterName, String namespaceName, String branchName, long releaseId, long previousReleaseId, int operation, Map<String, Object> operationContext, String operator) { ReleaseHistory releaseHistory = new ReleaseHistory(); releaseHistory.setAppId(appId); releaseHistory.setClusterName(clusterName); releaseHistory.setNamespaceName(namespaceName); releaseHistory.setBranchName(branchName); releaseHistory.setReleaseId(releaseId); releaseHistory.setPreviousReleaseId(previousReleaseId); releaseHistory.setOperation(operation); if (operationContext == null) { releaseHistory.setOperationContext("{}"); //default empty object } else { releaseHistory.setOperationContext(gson.toJson(operationContext)); } releaseHistory.setDataChangeCreatedTime(new Date()); releaseHistory.setDataChangeCreatedBy(operator); releaseHistory.setDataChangeLastModifiedBy(operator); releaseHistoryRepository.save(releaseHistory); auditService.audit(ReleaseHistory.class.getSimpleName(), releaseHistory.getId(), Audit.OP.INSERT, releaseHistory.getDataChangeCreatedBy()); return releaseHistory; } @Transactional public int batchDelete(String appId, String clusterName, String namespaceName, String operator) { return releaseHistoryRepository.batchDelete(appId, clusterName, namespaceName, operator); } }