Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Warning
title주의사항

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

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


Code Block
languagejava
themeEmacs
titleDocumentVersionDocumentVersionController.java
import javax.persistence.Columncom.fasterxml.jackson.core.JsonProcessingException;
import javax.persistence.Entitycom.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import javaxlombok.extern.persistenceslf4j.IdSlf4j;
import javaxorg.springframework.persistencehttp.TableResponseEntity;
import javaorg.springframework.utilstereotype.DateController;

@Entity
@Table(name = " ") // 테이블 이름import java.util.*;
import java.util.stream.Collectors;

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

@Id    /**
private String id;   * 문서 private버전 String데이터 name;저장하기
    private String json; */
    @Column@PostMapping(name = "create_at"/saveDocumentVersionData")
    private Date createdAt;
    @Column(name = "list_id")
    private String listId;public String getDocumentVersionData(
			UserInfo userInfo, 
			@RequestParam("docId") final String docId,
			@RequestParam("jsonData") final String jsonData
	) {
       public String getId() {
  documentVersionService.insertDocumentVersion(userInfo.getUserId(), domainService.getDomainInfo(userInfo).getId(), Long.parseLong(docId), jsonData);
 		return ResponseEntity.ok(Map.of("message", "Document saved successfully."));  
    }
return id;
	/**
    } * 문서 버전 목록 가져오기
public void setId(String _id) { */
    @PostMapping("/getDocumentVersionList")
  this.id = _id;public ResponseEntity<String> getDocumentVersionList(@RequestBody Map<String, Object> }request) throws JsonProcessingException {
		long docId public= Long.parseLong((String) getName() {request.get("docId"));
        
		List<DocumentVersionModel> documentVersionModelList return name= documentVersionService.getDocumentVersions(docId);
    }    List<Map<String, Object>> publicformattedData void setName(String name)= documentVersionModelList.stream().map(version -> {
        this.name    Map<String, Object> versionData = new nameHashMap<>();
    }       public String getJson() { versionData.put("id", version.getId());
            return jsonversionData.put("date", version.getCreatedAt());
    }      public void setJson(String json) {versionData.put("author", version.getUsername());
           this.json =return jsonversionData;
    }    }).collect(Collectors.toList());

public Date getCreatedAt() {      ObjectMapper objectMapper = returnnew createdAtObjectMapper();
    }    String jsonResponse public void setCreatedAt(Date createdAt) {= objectMapper.writeValueAsString(formattedData);

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

    public/**
  String getListId() { * 문서 버전 데이터 가져오기
   return listId; */
   } @PostMapping("/getDocumentVersionData")
    public voidString setListId(String idgetDocumentVersionData(@RequestBody Map<String, Object> request) {
        this.listIdObjectMapper objectMapper = id;new ObjectMapper();
       } long }id 
Code Block
languagejava
themeEmacs
titleDocumentVersionController.java
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import synap.editor.server.model2.DocumentVersion;
import synap.editor.server.repository.DocumentVersionRepository;

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

@RestController
public class DocumentVersionController {

    @Autowired
    private DocumentVersionRepository documentVersionRepository;

	= Long.parseLong((String) request.get("id"));
        String json = documentVersionService.getDocumentVersionJson(id);
 		return ResponseEntity.ok()
				.header("Content-Type", "application/json; charset=UTF-8")
				.body(json);
    }

    /**
     * 문서 버전 목록데이터 가져오기삭제
     */
    @PostMapping@DeleteMapping("/getDocumentVersionListgetDocumentVersionData")
    public ResponseEntity<Map<String, ResponseEntity<String>Object>> getDocumentVersionListdeleteDocumentVersionData(@RequestBody Map<String, Object> request) {
        Stringlong id = Long.parseLong((String) request.get("id"));
        documentVersionService.deleteDocumentVersion(id);
try {       return ResponseEntity.ok(Map.of("message", "Document deleted successfully."));  List<DocumentVersion>
results = documentVersionRepository.findVersionsByListId(id);  }
}


Code Block
languagejava
themeEmacs
titleDocumentVersionService.java
import java.io.*;
import java.nio.charset.Charset;
import java.util.Comparator;
import java.util.List;

@Slf4j
@Service
//public 결과를class 새로운DocumentVersionService 형식으로{
변환 (id, createdAt, name)
            List<Map<String, Object>> formattedData = results.stream().map(version -> {
                Map<String, Object> versionData = new HashMap<>();
                versionData.put("id", version.getId());
                versionData.put("date", version.getCreatedAt());
                versionData.put("author", version.getName());
                return versionData;
            }).collect(Collectors.toList());

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

            return ResponseEntity.ok(jsonResponse);

        } catch (Exception e) {
            return ResponseEntity.status(500).body("{\"message\": \"Internal server error\", \"error\": \"" + e.getMessage() + "\"}");
        }
    }

    /**
     * 문서 버전 데이터 가져오기
     */
    @PostMapping("/getDocumentVersionData")
    public String getDocumentVersionData(@RequestBody Map<String, Object> request) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        String id = (String) request.get("id");
        DocumentVersion documentVersion = documentVersionRepository.findVersionsById(id);
        return objectMapper.writeValueAsString(documentVersion.getJson());
    }

    /**
     * 문서 버전 데이터 삭제
     */
    @DeleteMapping("/getDocumentVersionData")
    public ResponseEntity<Map<String, Object>> deleteDocumentVersionData(@RequestBody Map<String, Object> request) {
        String id = (String) request.get("id");

        try {
            DocumentVersion documentVersion = documentVersionRepository.findVersionsById(id);

            if (documentVersion != null) {
                documentVersionRepository.delete(documentVersion);
                return ResponseEntity.ok(Map.of("message", "Document deleted successfully."));
            } else {
                return ResponseEntity.status(404).body(Map.of("message", "Document not found."));
            }
        } catch (Exception e) {
            return ResponseEntity.status(500).body(Map.of("message", "Internal server error", "error", e.getMessage()));
        }
    }
}	@Autowired
	DocumentVersionModelDao documentVersionModelDao;
	@Autowired
	SynapUserInfoDao synapUserInfoDao;
	
	public void insertDocumentVersion(String userId, int domainId, long docId, String json) {
		documentVersionModelDao.insert(new DocumentVersionModel(userId, domainId, docId, json));
	}

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

	public List<DocumentVersionModel> getDocumentVersions(long 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(long id) {
		documentVersionModelDao.delete(id);
	}
}


Code Block
languagejava
themeEmacs
titleDocumentVersionModelDao.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(long id) { delete("DocumentVersion.remove", id); }

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

    public List<DocumentVersionModel> getDocumentVersionByDocId(long docId) {
        return list("DocumentVersion.getDocumentVersionByDocId", docId);
    }
}


Code Block
languagejava
themeEmacs
titleAbstractDao.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);
	}

}


Code Block
languagejava
themeEmacs
titleDocumentVersionModel.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 long docId;
	private String json;
	private Date createdAt;

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


Code Block
languagejava
themeEmacs
titleDocumentVersion.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>


import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import synap.editor.server.model2.DocumentVersion; import java.util.List; import java.util.Optional; @Repository public interface DocumentVersionRepository extends JpaRepository<DocumentVersion, String> { /** * List ID에 해당하는 모든 DocumentVersion 객체를 조회 */ List<DocumentVersion> findVersionsByListId(String listId); /** * 특정 문서 버전 ID에 해당하는 DocumentVersion 객체를 조회 */ DocumentVersion findVersionsById(String id); }
Code Block
languagejava
themeEmacs
titleDocumentVersionRepository.java
테이블 구조 (예시)
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` bigint(20) 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;