Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

주의사항

Controller에 기재된대로 api의 request / response 형식을 지켜주세요.

(DB는 예시로 제공될 뿐 원하는 형태로 구성하는 것을 권장드립니다.)


DocumentVersionController.java
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;

import java.util.*;
import java.util.stream.Collectors;

@Slf4j
@RequiredArgsConstructor
@Controller
public class DocumentVersionController {
	private final DocumentVersionService documentVersionService;


	/**
     * 문서 버전 목록 가져오기
     */
    @PostMapping("/getDocumentVersionList")
    public ResponseEntity<String> getDocumentVersionList(@RequestBody Map<String, Object> request) throws JsonProcessingException {
        String id = (String) request.get("id");
        
		List<DocumentVersionModel> documentVersionModelList = documentVersionService.getDocumentVersions(id);
        List<Map<String, Object>> formattedData = documentVersionModelList.stream().map(version -> {
            Map<String, Object> versionData = new HashMap<>();
            versionData.put("id", version.getId());
            versionData.put("date", version.getCreatedAt());
            versionData.put("author", version.getUsername());
            return versionData;
        }).collect(Collectors.toList());

        ObjectMapper objectMapper = new ObjectMapper();
        String jsonResponse = objectMapper.writeValueAsString(formattedData);

        return ResponseEntity.ok()
			.header("Content-Type", "application/json; charset=UTF-8")
			.body(jsonResponse);
    }

    /**
     * 문서 버전 데이터 가져오기
     */
    @PostMapping("/getDocumentVersionData")
    public String getDocumentVersionData(@RequestBody Map<String, Object> request) {
        ObjectMapper objectMapper = new ObjectMapper();
        String id = (String) request.get("id");
        String json = documentVersionService.getDocumentVersionJson(id);
 		return ResponseEntity.ok()
				.header("Content-Type", "application/json; charset=UTF-8")
				.body(json);
    }

    /**
     * 문서 버전 데이터 삭제
     */
    @DeleteMapping("/getDocumentVersionData")
    public ResponseEntity<Map<String, Object>> deleteDocumentVersionData(@RequestBody Map<String, Object> request) {
        String id = (String) request.get("id");
        documentVersionService.deleteDocumentVersion(id);
        return ResponseEntity.ok(Map.of("message", "Document deleted successfully."));  
    }
}
DocumentVersionService.java
import java.io.*;
import java.nio.charset.Charset;
import java.util.Comparator;
import java.util.List;

@Slf4j
@Service
public class DocumentVersionService {
	@Autowired
	DocumentVersionModelDao documentVersionModelDao;
	@Autowired
	SynapUserInfoDao synapUserInfoDao;
	
	public void insertDocumentVersion(String userId, int domainId, String docId, String json) {
		documentVersionModelDao.insert(new DocumentVersionModel(userId, domainId, docId, json));
	}

	public String getDocumentVersionJson(String id) {
		return documentVersionModelDao.getDocumentVersionById(id).getJson();
	}

	public List<DocumentVersionModel> getDocumentVersions(String docId) {
		List<DocumentVersionModel> documentVersionModelList = documentVersionModelDao.getDocumentVersionByDocId(docId);
		documentVersionModelList.sort(Comparator.comparing(DocumentVersionModel::getUserId));

		String currentUserId = "";
		String targetUsername = "";

		for (DocumentVersionModel model : documentVersionModelList) {
			if (!model.getUserId().equals(currentUserId)) {
				currentUserId = model.getUserId();
				targetUsername = synapUserInfoDao.getUserInfoByUserIdAndDomain(currentUserId, model.getDomainId()).getUserName();
			}
			model.setUsername(targetUsername);
		}
		documentVersionModelList.sort(Comparator.comparing(DocumentVersionModel::getId).reversed());
		return documentVersionModelList;
	}

	public void deleteDocumentVersion(String id) {
		documentVersionModelDao.delete(id);
	}
}

DocumentVersionModelDao.java
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
@Repository
public class DocumentVersionModelDao extends AbstractDao {
    public void insert(DocumentVersionModel documentVersionModel) {
        insert("DocumentVersion.insert", documentVersionModel);
    }

    public void delete(String id) { delete("DocumentVersion.remove", id); }

    public DocumentVersionModel getDocumentVersionById(String id) {
        Map<String, Object> params = new HashMap<>();
        params.put("id", id);
        return (DocumentVersionModel) select("DocumentVersion.getDocumentVersionById", params);
    }

    public List<DocumentVersionModel> getDocumentVersionByDocId(String docId) {
        return list("DocumentVersion.getDocumentVersionByDocId", docId);
    }
}
AbstractDao.java
import com.ibatis.sqlmap.client.SqlMapClient;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import javax.annotation.Resource;
import java.util.List;

@SuppressWarnings("deprecation")
public abstract class AbstractDao extends SqlMapClientDaoSupport {
    protected AbstractDao() {

	}

    public final Object insert(final String queryId, final Object parameterObject) {
		return getSqlMapClientTemplate().insert(queryId, parameterObject);
	}

    public final int update(final String queryId, final Object parameterObject) {
		return getSqlMapClientTemplate().update(queryId, parameterObject);
	}

    public final int delete(final String queryId, final Object parameterObject) {
		return getSqlMapClientTemplate().delete(queryId, parameterObject);
	}

    public final Object select(final String queryId, final Object parameterObject) {
		return getSqlMapClientTemplate().queryForObject(queryId, parameterObject);
	}

    @SuppressWarnings("rawtypes")
	public final List list(final String queryId, final Object parameterObject) {
		return getSqlMapClientTemplate().queryForList(queryId, parameterObject);
	}

}

DocumentVersionModel.java
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.sql.Date;

@Data
@NoArgsConstructor
public class DocumentVersionModel implements Serializable {
    private long id;
	private String userId;
	private int domainId;
	private String username;
	private String docId;
	private String json;
	private Date createdAt;

	DocumentVersionModel(String userId, int domainId, String docId, String json) {
		this.userId = userId;
		this.domainId = domainId;
		this.docId = docId;
		this.json = json;
	}
}


DocumentVersion.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="DocumentVersion">
	<resultMap id="documentVersion" class="(DocumentVersionModel path)">
		<result property="id" column="id" columnIndex="1"/>
		<result property="userId" column="user_id" columnIndex="2"/>
		<result property="domainId" column="domain_id" columnIndex="3"/>
		<result property="docId" column="doc_id" columnIndex="4"/>
		<result property="json" column="json" columnIndex="5"/>
		<result property="createdAt" column="created_at" columnIndex="6"/>
	</resultMap>
	<resultMap id="documentVersionList" class="(DocumentVersionModel path)">
		<result property="id" column="id" columnIndex="1"/>
		<result property="userId" column="user_id" columnIndex="2"/>
		<result property="domainId" column="domain_id" columnIndex="3"/>
		<result property="docId" column="doc_id" columnIndex="4"/>
		<result property="createdAt" column="created_at" columnIndex="5"/>
	</resultMap>

	<insert id="insert">
		INSERT INTO
			document_version(user_id, domain_id, doc_id, json, created_at)
		VALUES
			(#userId#, #domainId#, #docId# , #json#, SYSDATE())
	</insert>
	
    <delete id="remove">
		DELETE FROM document_version
		WHERE id = #id#
	</delete>

	<select id="getDocumentVersionById" resultMap="documentVersion">
		SELECT id, user_id, domain_id, doc_id, json, created_at
		FROM document_version
		WHERE
			id = #id#
	</select>

	<select id="getDocumentVersionByDocId" resultClass="java.util.List" resultMap="documentVersionList">
		SELECT id, user_id, domain_id, doc_id, created_at
		FROM document_version
		WHERE
			doc_id = #docId#
		ORDER BY id DESC
		LIMIT 500
	</select>
</sqlMap>

document_version DDL
CREATE TABLE `document_version` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `domain_id` int(11) NOT NULL DEFAULT 1,
  `doc_id` varchar(100) NOT NULL,
  `json` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` datetime NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=671 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  • No labels