...
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
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 @RestController@Controller public class DocumentVersionController { private final DocumentVersionService @Autowired private DocumentVersionRepository documentVersionRepository; documentVersionService; /** * 문서 버전 데이터 저장하기 */ @PostMapping("/saveDocumentVersionData") public String getDocumentVersionData( UserInfo userInfo, @RequestParam("docId") final String docId, @RequestParam("jsonData") final String jsonData ) { documentVersionService.insertDocumentVersion(userInfo.getUserId(), domainService.getDomainInfo(userInfo).getId(), Long.parseLong(docId), jsonData); return ResponseEntity.ok(Map.of("message", "Document saved successfully.")); } /** * 문서 버전 목록 가져오기 */ @PostMapping("/getDocumentVersionList") public ResponseEntity<String> getDocumentVersionList(@RequestBody Map<String, Object> request) throws JsonProcessingException { long String id docId = Long.parseLong((String) request.get("iddocId")); List<DocumentVersion>List<DocumentVersionModel> documentVersionListdocumentVersionModelList = documentVersionService.getDocumentVersions(iddocId); List<Map<String, Object>> formattedData = documentVersionListdocumentVersionModelList.stream().map(version -> { Map<String, Object> versionData = new HashMap<>(); versionData.put("id", version.getId()); versionData.put("date", version.getCreatedAt()); versionData.put("author", version.getNamegetUsername()); 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) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); Stringlong id = Long.parseLong((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) { Stringlong id = Long.parseLong((String) request.get("id")); snoteServicedocumentVersionService.deleteDocumentVersion(id); return ResponseEntity.ok(Map.of("message", "Document deleted successfully.")); } } |
...
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
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, Stringlong docId, String json) {
documentVersionModelDao.insert(new DocumentVersionModel(userId, domainId, docId, json));
}
public String getDocumentVersionJson(Stringlong id) {
return documentVersionModelDao.getDocumentVersionById(id).getJson();
}
public List<DocumentVersionModel> getDocumentVersions(Stringlong 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(Stringlong id) {
documentVersionModelDao.delete(id);
}
}
|
...
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
| Code Block | ||||||
| ||||||
import javaxlombok.extern.persistenceslf4j.ColumnSlf4j; import javaxorg.springframework.persistencestereotype.EntityRepository; import javaxjava.persistenceutil.IdHashMap; import javaxjava.persistenceutil.TableList; import java.util.DateMap; @Entity @Table(name = " ") // 테이블 이름 @Slf4j @Repository public class DocumentVersionDocumentVersionModelDao extends AbstractDao { public void insert(DocumentVersionModel @IddocumentVersionModel) { private String id insert("DocumentVersion.insert", documentVersionModel); } private String name; public void delete(long privateid) String json; @Column(name = "create_at") private Date createdAt; @Column(name = "doc_id") private String docId; public String getId() { return id; } public void setId(String _id) { this.id = _id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getJson() { return json; { 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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
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 voidObject setJsoninsert(final String json)queryId, {final Object parameterObject) { this.json = json; return getSqlMapClientTemplate().insert(queryId, parameterObject); } public final Dateint getCreatedAtupdate()final {String queryId, final Object parameterObject) { return return createdAt; getSqlMapClientTemplate().update(queryId, parameterObject); } public final voidint setCreatedAtdelete(Datefinal createdAt)String {queryId, final Object parameterObject) { this.createdAt = createdAt; return getSqlMapClientTemplate().delete(queryId, parameterObject); } public final StringObject getDocIdselect()final {String queryId, final Object parameterObject) { return getSqlMapClientTemplate().queryForObject(queryId, parameterObject); return } docId; } public void setDocId(String id@SuppressWarnings("rawtypes") public final List list(final String queryId, final Object parameterObject) { this.docId = id; } } return getSqlMapClientTemplate().queryForList(queryId, parameterObject); } } |
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
import org.springframework.data.jpa.repository.JpaRepositorylombok.Data; import org.springframework.stereotype.Repositorylombok.NoArgsConstructor; import synap.editor.server.model2.DocumentVersion; import java.utilio.ListSerializable; import java.utilsql.OptionalDate; @Data @Repository@NoArgsConstructor public interfaceclass DocumentVersionRepositoryDocumentVersionModel extendsimplements JpaRepository<DocumentVersion,Serializable String> { /**private long id; private String userId; * private Documentint ID에domainId; 해당하는 private 모든String DocumentVersionusername; 객체를 private 조회long docId; private String json; private */Date createdAt; List<DocumentVersion> findVersionsByDocId DocumentVersionModel(String docId);userId, int domainId, long docId, String /**json) { this.userId = userId; this.domainId *= 특정 문서 버전 ID에 해당하는 DocumentVersion 객체를 조회 */ DocumentVersion findVersionsById(String id); }domainId; this.docId = docId; this.json = json; } } |
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
<?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(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="34"/> <result property="json" column="json" columnIndex="45"/> <result property="createdAt" column="created_at" columnIndex="56"/> </resultMap> <resultMap id="documentVersionList" class="synap.editor.server.model2.DocumentVersion(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="34"/> <result property="createdAt" column="created_at" columnIndex="45"/> </resultMap> <insert id="insert"> INSERT INTO revision_notedocument_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 <delete id="remove"> UPDATE revision_note_version rv JOIN ( SELECT id FROM revision_note_DELETE FROM document_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;#id# </update>delete> <select id="getNoteVersionByIdgetDocumentVersionById" resultMap="revisionNoteVersiondocumentVersion"> SELECT id, user_id, domain_id, doc_id, json, created_at, removed FROM revision_notedocument_version WHERE id = #id# </select> <select id="getNoteVersionByDocIdgetDocumentVersionByDocId" resultClass="java.util.List" resultMap="revisionNoteVersionListdocumentVersionList"> SELECT id, user_id, domain_id, doc_id, created_at, removed FROM revision_notedocument_version WHERE doc_id = #docId# AND removed = false ORDER BY id DESC LIMIT 500 </select> </sqlMap> |
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
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; |