From 64df3d028c020cd9943ccd46f2484231188e04e8 Mon Sep 17 00:00:00 2001 From: vran Date: Tue, 15 Mar 2022 20:38:38 +0800 Subject: [PATCH] refactor document export logic (#51) * refactor: redesign file export api * feat:update frontend resources * fix: checkstyle --- .../com/databasir/api/DocumentController.java | 37 ++-- .../{999.1437368b.css => 907.1437368b.css} | 0 api/src/main/resources/static/index.html | 2 +- ...acy.f00c6326.js => 117-legacy.72d604e3.js} | 2 +- ...6326.js.map => 117-legacy.72d604e3.js.map} | 2 +- ...acy.a43600d3.js => 139-legacy.e055efed.js} | 2 +- ...00d3.js.map => 139-legacy.e055efed.js.map} | 2 +- .../js/{139.909d89d2.js => 139.299d5af2.js} | 2 +- ...39.909d89d2.js.map => 139.299d5af2.js.map} | 2 +- ...acy.023e4ab2.js => 355-legacy.6051dcfc.js} | 2 +- ...4ab2.js.map => 355-legacy.6051dcfc.js.map} | 2 +- .../js/{355.19f5321e.js => 355.0fcf5559.js} | 2 +- ...55.19f5321e.js.map => 355.0fcf5559.js.map} | 2 +- ...acy.f2817ef6.js => 459-legacy.5a5a02e8.js} | 2 +- ...7ef6.js.map => 459-legacy.5a5a02e8.js.map} | 2 +- .../js/{459.d9a5fc8a.js => 459.22e837b8.js} | 2 +- ...59.d9a5fc8a.js.map => 459.22e837b8.js.map} | 2 +- ...acy.3e02203b.js => 469-legacy.19860010.js} | 2 +- ...203b.js.map => 469-legacy.19860010.js.map} | 2 +- .../js/{469.8c3ea567.js => 469.bd114b11.js} | 2 +- ...69.8c3ea567.js.map => 469.bd114b11.js.map} | 2 +- .../js/{564.abfed23d.js => 564.07fcac27.js} | 2 +- ...64.abfed23d.js.map => 564.07fcac27.js.map} | 2 +- ...acy.d1261d0e.js => 596-legacy.d38041af.js} | 2 +- ...1d0e.js.map => 596-legacy.d38041af.js.map} | 2 +- .../js/{596.eb4080a7.js => 596.e58d33aa.js} | 2 +- ...96.eb4080a7.js.map => 596.e58d33aa.js.map} | 2 +- ...acy.85eb5e28.js => 719-legacy.94f86cce.js} | 2 +- ...5e28.js.map => 719-legacy.94f86cce.js.map} | 2 +- .../js/{719.df03c200.js => 719.ab8ac0bb.js} | 2 +- ...19.df03c200.js.map => 719.ab8ac0bb.js.map} | 2 +- ...acy.2b22ae65.js => 754-legacy.56f0845e.js} | 2 +- ...ae65.js.map => 754-legacy.56f0845e.js.map} | 2 +- .../js/{754.d037cc5e.js => 754.3b3a23fa.js} | 2 +- ...54.d037cc5e.js.map => 754.3b3a23fa.js.map} | 2 +- ...acy.fc2fd7b3.js => 865-legacy.3c829294.js} | 2 +- ...d7b3.js.map => 865-legacy.3c829294.js.map} | 2 +- .../js/{865.ebbb1893.js => 865.ef6dc5a3.js} | 2 +- ...65.ebbb1893.js.map => 865.ef6dc5a3.js.map} | 2 +- .../static/js/907-legacy.cb70ee94.js | 33 ++++ .../static/js/907-legacy.cb70ee94.js.map | 1 + .../js/{999.762519b9.js => 907.2782ffff.js} | 10 +- .../resources/static/js/907.2782ffff.js.map | 1 + ...gacy.6cfcb3aa.js => 99-legacy.618121ce.js} | 2 +- ...cb3aa.js.map => 99-legacy.618121ce.js.map} | 2 +- .../js/{99.79a6a4f8.js => 99.c134b829.js} | 2 +- ...{99.79a6a4f8.js.map => 99.c134b829.js.map} | 2 +- .../static/js/999-legacy.c84112c0.js | 33 ---- .../static/js/999-legacy.c84112c0.js.map | 1 - .../resources/static/js/999.762519b9.js.map | 1 - ...acy.2b5b7bc8.js => app-legacy.e6a59dc2.js} | 4 +- ...7bc8.js.map => app-legacy.e6a59dc2.js.map} | 2 +- .../js/{app.69b03660.js => app.e0747db1.js} | 4 +- ...pp.69b03660.js.map => app.e0747db1.js.map} | 2 +- build.gradle | 3 + core/build.gradle | 1 + .../generator/DocumentFileGenerator.java | 27 +++ .../document/generator/DocumentFileType.java | 13 ++ .../generator/ExcelDocumentFileGenerator.java | 22 +++ .../MarkdownDocumentFileGenerator.java | 164 ++++++++++++++++++ .../document/service/DocumentService.java | 102 +++-------- 61 files changed, 353 insertions(+), 190 deletions(-) rename api/src/main/resources/static/css/{999.1437368b.css => 907.1437368b.css} (100%) rename api/src/main/resources/static/js/{117-legacy.f00c6326.js => 117-legacy.72d604e3.js} (99%) rename api/src/main/resources/static/js/{117-legacy.f00c6326.js.map => 117-legacy.72d604e3.js.map} (99%) rename api/src/main/resources/static/js/{139-legacy.a43600d3.js => 139-legacy.e055efed.js} (99%) rename api/src/main/resources/static/js/{139-legacy.a43600d3.js.map => 139-legacy.e055efed.js.map} (99%) rename api/src/main/resources/static/js/{139.909d89d2.js => 139.299d5af2.js} (99%) rename api/src/main/resources/static/js/{139.909d89d2.js.map => 139.299d5af2.js.map} (99%) rename api/src/main/resources/static/js/{355-legacy.023e4ab2.js => 355-legacy.6051dcfc.js} (99%) rename api/src/main/resources/static/js/{355-legacy.023e4ab2.js.map => 355-legacy.6051dcfc.js.map} (99%) rename api/src/main/resources/static/js/{355.19f5321e.js => 355.0fcf5559.js} (99%) rename api/src/main/resources/static/js/{355.19f5321e.js.map => 355.0fcf5559.js.map} (99%) rename api/src/main/resources/static/js/{459-legacy.f2817ef6.js => 459-legacy.5a5a02e8.js} (99%) rename api/src/main/resources/static/js/{459-legacy.f2817ef6.js.map => 459-legacy.5a5a02e8.js.map} (99%) rename api/src/main/resources/static/js/{459.d9a5fc8a.js => 459.22e837b8.js} (99%) rename api/src/main/resources/static/js/{459.d9a5fc8a.js.map => 459.22e837b8.js.map} (99%) rename api/src/main/resources/static/js/{469-legacy.3e02203b.js => 469-legacy.19860010.js} (99%) rename api/src/main/resources/static/js/{469-legacy.3e02203b.js.map => 469-legacy.19860010.js.map} (99%) rename api/src/main/resources/static/js/{469.8c3ea567.js => 469.bd114b11.js} (99%) rename api/src/main/resources/static/js/{469.8c3ea567.js.map => 469.bd114b11.js.map} (99%) rename api/src/main/resources/static/js/{564.abfed23d.js => 564.07fcac27.js} (99%) rename api/src/main/resources/static/js/{564.abfed23d.js.map => 564.07fcac27.js.map} (99%) rename api/src/main/resources/static/js/{596-legacy.d1261d0e.js => 596-legacy.d38041af.js} (98%) rename api/src/main/resources/static/js/{596-legacy.d1261d0e.js.map => 596-legacy.d38041af.js.map} (98%) rename api/src/main/resources/static/js/{596.eb4080a7.js => 596.e58d33aa.js} (98%) rename api/src/main/resources/static/js/{596.eb4080a7.js.map => 596.e58d33aa.js.map} (98%) rename api/src/main/resources/static/js/{719-legacy.85eb5e28.js => 719-legacy.94f86cce.js} (99%) rename api/src/main/resources/static/js/{719-legacy.85eb5e28.js.map => 719-legacy.94f86cce.js.map} (99%) rename api/src/main/resources/static/js/{719.df03c200.js => 719.ab8ac0bb.js} (99%) rename api/src/main/resources/static/js/{719.df03c200.js.map => 719.ab8ac0bb.js.map} (99%) rename api/src/main/resources/static/js/{754-legacy.2b22ae65.js => 754-legacy.56f0845e.js} (99%) rename api/src/main/resources/static/js/{754-legacy.2b22ae65.js.map => 754-legacy.56f0845e.js.map} (99%) rename api/src/main/resources/static/js/{754.d037cc5e.js => 754.3b3a23fa.js} (99%) rename api/src/main/resources/static/js/{754.d037cc5e.js.map => 754.3b3a23fa.js.map} (99%) rename api/src/main/resources/static/js/{865-legacy.fc2fd7b3.js => 865-legacy.3c829294.js} (97%) rename api/src/main/resources/static/js/{865-legacy.fc2fd7b3.js.map => 865-legacy.3c829294.js.map} (97%) rename api/src/main/resources/static/js/{865.ebbb1893.js => 865.ef6dc5a3.js} (97%) rename api/src/main/resources/static/js/{865.ebbb1893.js.map => 865.ef6dc5a3.js.map} (98%) create mode 100644 api/src/main/resources/static/js/907-legacy.cb70ee94.js create mode 100644 api/src/main/resources/static/js/907-legacy.cb70ee94.js.map rename api/src/main/resources/static/js/{999.762519b9.js => 907.2782ffff.js} (71%) create mode 100644 api/src/main/resources/static/js/907.2782ffff.js.map rename api/src/main/resources/static/js/{99-legacy.6cfcb3aa.js => 99-legacy.618121ce.js} (98%) rename api/src/main/resources/static/js/{99-legacy.6cfcb3aa.js.map => 99-legacy.618121ce.js.map} (99%) rename api/src/main/resources/static/js/{99.79a6a4f8.js => 99.c134b829.js} (99%) rename api/src/main/resources/static/js/{99.79a6a4f8.js.map => 99.c134b829.js.map} (99%) delete mode 100644 api/src/main/resources/static/js/999-legacy.c84112c0.js delete mode 100644 api/src/main/resources/static/js/999-legacy.c84112c0.js.map delete mode 100644 api/src/main/resources/static/js/999.762519b9.js.map rename api/src/main/resources/static/js/{app-legacy.2b5b7bc8.js => app-legacy.e6a59dc2.js} (95%) rename api/src/main/resources/static/js/{app-legacy.2b5b7bc8.js.map => app-legacy.e6a59dc2.js.map} (99%) rename api/src/main/resources/static/js/{app.69b03660.js => app.e0747db1.js} (96%) rename api/src/main/resources/static/js/{app.69b03660.js.map => app.e0747db1.js.map} (99%) create mode 100644 core/src/main/java/com/databasir/core/domain/document/generator/DocumentFileGenerator.java create mode 100644 core/src/main/java/com/databasir/core/domain/document/generator/DocumentFileType.java create mode 100644 core/src/main/java/com/databasir/core/domain/document/generator/ExcelDocumentFileGenerator.java create mode 100644 core/src/main/java/com/databasir/core/domain/document/generator/MarkdownDocumentFileGenerator.java diff --git a/api/src/main/java/com/databasir/api/DocumentController.java b/api/src/main/java/com/databasir/api/DocumentController.java index 7a1b409..52f78e2 100644 --- a/api/src/main/java/com/databasir/api/DocumentController.java +++ b/api/src/main/java/com/databasir/api/DocumentController.java @@ -1,11 +1,11 @@ package com.databasir.api; import com.databasir.common.JsonData; -import com.databasir.common.SystemException; import com.databasir.core.domain.document.data.DatabaseDocumentResponse; import com.databasir.core.domain.document.data.DatabaseDocumentSimpleResponse; import com.databasir.core.domain.document.data.DatabaseDocumentVersionResponse; import com.databasir.core.domain.document.data.TableDocumentResponse; +import com.databasir.core.domain.document.generator.DocumentFileType; import com.databasir.core.domain.document.service.DocumentService; import com.databasir.core.domain.log.annotation.Operation; import lombok.RequiredArgsConstructor; @@ -20,13 +20,8 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; -import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.List; -import java.util.UUID; import static org.springframework.data.domain.Sort.Direction.DESC; @@ -62,24 +57,18 @@ public class DocumentController { @GetMapping(Routes.Document.EXPORT) public ResponseEntity getDocumentFiles(@PathVariable Integer projectId, - @RequestParam(required = false) Long version) { - String data = documentService.toMarkdown(projectId, version).get(); - try { - Path path = Files.writeString(Paths.get(UUID.randomUUID().toString() + ".md"), data, - StandardCharsets.UTF_8); - HttpHeaders headers = new HttpHeaders(); - headers.setContentDisposition(ContentDisposition.attachment() - .filename("demo.md", StandardCharsets.UTF_8) - .build()); - byte[] bytes = Files.readAllBytes(path); - Files.deleteIfExists(path); - headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); - return ResponseEntity.ok() - .headers(headers) - .body(out -> out.write(bytes)); - } catch (IOException e) { - throw new SystemException("System error"); - } + @RequestParam(required = false) + Long version, + @RequestParam DocumentFileType fileType) { + HttpHeaders headers = new HttpHeaders(); + String fileName = "project[" + projectId + "]." + fileType.getFileExtension(); + headers.setContentDisposition(ContentDisposition.attachment() + .filename("demo.md", StandardCharsets.UTF_8) + .build()); + headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); + return ResponseEntity.ok() + .headers(headers) + .body(out -> documentService.export(projectId, version, fileType, out)); } @GetMapping(Routes.Document.GET_SIMPLE_ONE) diff --git a/api/src/main/resources/static/css/999.1437368b.css b/api/src/main/resources/static/css/907.1437368b.css similarity index 100% rename from api/src/main/resources/static/css/999.1437368b.css rename to api/src/main/resources/static/css/907.1437368b.css diff --git a/api/src/main/resources/static/index.html b/api/src/main/resources/static/index.html index 7c0b4f0..5b02826 100644 --- a/api/src/main/resources/static/index.html +++ b/api/src/main/resources/static/index.html @@ -1 +1 @@ -databasir-frontend
\ No newline at end of file +databasir-frontend
\ No newline at end of file diff --git a/api/src/main/resources/static/js/117-legacy.f00c6326.js b/api/src/main/resources/static/js/117-legacy.72d604e3.js similarity index 99% rename from api/src/main/resources/static/js/117-legacy.f00c6326.js rename to api/src/main/resources/static/js/117-legacy.72d604e3.js index e081baf..c9c6c23 100644 --- a/api/src/main/resources/static/js/117-legacy.f00c6326.js +++ b/api/src/main/resources/static/js/117-legacy.72d604e3.js @@ -1,2 +1,2 @@ (self["webpackChunkdatabasir_frontend"]=self["webpackChunkdatabasir_frontend"]||[]).push([[117],{1589:function(e,t,r){var n=r(7854),a=r(1400),o=r(6244),u=r(6135),l=n.Array,i=Math.max;e.exports=function(e,t,r){for(var n=o(e),c=a(t,n),s=a(void 0===r?n:r,n),d=l(i(s-c,0)),f=0;c