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 javaxjava.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Tableutil.*;
import java.util.stream.DateCollectors;

@Entity
@Table(name = " ") // 테이블 이름
@RestController
public class DocumentVersionDocumentVersionController {

    @Id@Autowired
    private StringDocumentVersionRepository id;documentVersionRepository;

	/**
    private String* name;문서 버전 목록 가져오기
 private String json;  */
  @Column(name = "create_at@PostMapping("/getDocumentVersionList")
    privatepublic Date createdAt;
    @Column(name = "doc_id")ResponseEntity<String> getDocumentVersionList(@RequestBody Map<String, Object> request) throws JsonProcessingException {
     private String docId; String id =  public (String) getId() {request.get("id");
        
		List<DocumentVersion> documentVersionList return= documentVersionService.getDocumentVersions(id);
    }    List<Map<String, Object>> publicformattedData void setId(String _id)= documentVersionList.stream().map(version -> {
        this.id = _id;  Map<String, Object> versionData }= new HashMap<>();
   public String getName() {      versionData.put("id", version.getId());
 return name;     }      public void setName(String name) {versionData.put("date", version.getCreatedAt());
            this.name = nameversionData.put("author", version.getName());
    }      public String getJson() {return versionData;
        return json;}).collect(Collectors.toList());

    }    ObjectMapper objectMapper public= voidnew setJsonObjectMapper(String json);
{        String this.jsonjsonResponse = jsonobjectMapper.writeValueAsString(formattedData);

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

    public/**
void setCreatedAt(Date createdAt) {  * 문서 버전 데이터 가져오기
  this.createdAt = createdAt; */
   } @PostMapping("/getDocumentVersionData")
    public String getDocIdgetDocumentVersionData()@RequestBody {Map<String, Object> request) throws JsonProcessingException    {
return docId;     }  ObjectMapper objectMapper = new public void setDocId(String id) {ObjectMapper();
        String this.docIdid = (String) request.get("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;

	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) {
        String id = (String) request.get("id");
        snoteService.deleteDocumentVersion(id);
    try {   return ResponseEntity.ok(Map.of("message", "Document deleted successfully."));  
   List<DocumentVersion> results = documentVersionRepository.findVersionsByDocId(id);

            // 결과를 새로운 형식으로 변환 (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);
 }
}


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 {
	@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);
	}
}


Code Block
languagejava
themeEmacs
titleDocumentVersionModelDao.java


Code Block
languagejava
themeEmacs
titleDocumentVersion.java
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;

@Entity
@Table(name = " ") // 테이블 이름
public class DocumentVersion {

    @Id
    private String id;
    private String name;
    private String json;
    @Column(name = "create_at")
    private Date createdAt;
    @Column(name = "doc_id")
    private String docId;
    public String getId() {
            return ResponseEntity.ok(jsonResponse)id;
    }

   } public catchvoid setId(ExceptionString e_id) {
        this.id = _id;
    return ResponseEntity.status(500).body("{\"message\": \"Internal server error\", \"error\": \"" + e.getMessage() + "\"}");}

    public String getName() {
        return }name;
    }

    /**public void setName(String name) {
 * 문서 버전 데이터 가져오기   this.name = name;
*/    }
@PostMapping("/getDocumentVersionData")
    public String getDocumentVersionData(@RequestBody Map<String, Object> request) throws JsonProcessingException {
getJson() {
        return json;
    }

 ObjectMapper  objectMapper =public newvoid ObjectMappersetJson(String json); {
       String idthis.json = (String) request.get("id");json;
    }

   DocumentVersion documentVersionpublic =Date documentVersionRepository.findVersionsByIdgetCreatedAt(id); {
        return objectMapper.writeValueAsString(documentVersion.getJson())createdAt;
    }

    public void setCreatedAt(Date createdAt) {
  /**      *this.createdAt 문서= 버전createdAt;
데이터 삭제   }

 */   public String @DeleteMappinggetDocId("/getDocumentVersionData") {
   public ResponseEntity<Map<String, Object>> deleteDocumentVersionData(@RequestBody Map<String, Object>return request)docId;
{    }

   String idpublic =void setDocId(String) request.get("id"); {
        trythis.docId {= id;
    }
}


Code Block
languagejava
themeEmacs
titleDocumentVersionRepository.java
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import synap.editor.server.model2.DocumentVersion documentVersion = documentVersionRepository.findVersionsById(id);

   ;

import java.util.List;
import java.util.Optional;

@Repository
public interface DocumentVersionRepository extends JpaRepository<DocumentVersion, String> {
    /**
   if (documentVersion !=* null)Document {ID에 해당하는 모든 DocumentVersion 객체를 조회
     */
    List<DocumentVersion> documentVersionRepository.delete(documentVersionfindVersionsByDocId(String docId);

    /**
     * 특정 문서 버전 ID에 return ResponseEntity.ok(Map.of("message", "Document deleted successfully."));해당하는 DocumentVersion 객체를 조회
     */
    DocumentVersion findVersionsById(String id);
} 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()));
        }
    }
}
Code Block
languagejava
themeEmacs
titleDocumentVersionRepository.java
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> {
    /**
     * Document ID에 해당하는 모든 DocumentVersion 객체를 조회
     */
    List<DocumentVersion> findVersionsByDocId(String docId);

    /**
     * 특정 문서 버전 ID에 해당하는 DocumentVersion 객체를 조회
     */
    DocumentVersion findVersionsById(String id);
}



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="synap.editor.server.model2.DocumentVersion">
		<result property="id" column="id" columnIndex="1"/>
		<result property="userId" column="user_id" columnIndex="2"/>
		<result property="docId" column="doc_id" columnIndex="3"/>
		<result property="json" column="json" columnIndex="4"/>
		<result property="createdAt" column="created_at" columnIndex="5"/>
	</resultMap>
	<resultMap id="documentVersionList" class="synap.editor.server.model2.DocumentVersion">
		<result property="id" column="id" columnIndex="1"/>
		<result property="userId" column="user_id" columnIndex="2"/>
		<result property="docId" column="doc_id" columnIndex="3"/>
		<result property="createdAt" column="created_at" columnIndex="4"/>
	</resultMap>

	<insert id="insert">
		INSERT INTO
			revision_note_version(user_id, domain_id, doc_id, json, created_at)
		VALUES
			(#userId#, #domainId#, #docId# , #json#, SYSDATE())
	</insert>
	<update id="remove">
		UPDATE revision_note_version
		SET removed = true
		WHERE id = #id#
	</update>
	<update id="updateRemovedForOverflow" parameterClass="java.lang.Long">
		UPDATE revision_note_version rv
		JOIN (
			SELECT id
			FROM revision_note_version
			WHERE doc_id = #docId#
			AND removed = false
			ORDER BY id DESC
			LIMIT 1 OFFSET 500
		) AS subquery
		ON rv.id = subquery.id
		SET rv.removed = true;
	</update>

	<select id="getNoteVersionById" resultMap="revisionNoteVersion">
		SELECT id, user_id, domain_id, doc_id, json, created_at, removed
		FROM revision_note_version
		WHERE
			id = #id#
	</select>

	<select id="getNoteVersionByDocId" resultClass="java.util.List" resultMap="revisionNoteVersionList">
		SELECT id, user_id, domain_id, doc_id, created_at, removed
		FROM revision_note_version
		WHERE
			doc_id = #docId#
		  AND
			removed = false
		ORDER BY id DESC
		LIMIT 500
	</select>
</sqlMap>