diff --git a/explorer_rs/src/main/docs/puml/erd-explorer-data.puml b/explorer_rs/src/main/docs/puml/erd-explorer-data.puml new file mode 100644 index 0000000..f02e79c --- /dev/null +++ b/explorer_rs/src/main/docs/puml/erd-explorer-data.puml @@ -0,0 +1,33 @@ +@startuml +!define primary_key(x) <&key> x +!define foreign_key(x) <&key> x +!define column(x) <&media-record> x +!define table(x) entity x << (T, white) >> + +title "Entity Relationship Diagram (ERD): explore (учет загруженных на сервер файлов") +entity "Пакеты загрузки" as upload_packages +table(upload_packages) #bcd{ + primary_key(id): LONGSERIAL >>"Идентификатор" + column(title): VARCHAR[80] >>"Наименование файла в файловой системе" + column(origin_title): VARCHAR[80] >>"Наименование загружаемого файла" + column(type): VARCHAR[80] >>"Наименование загружаемой формы" + column(extension): VARCHAR[80] >>"Расширение файла" + column(date): TIMESTAMP >>"Время загрузки пакета на сервер" + column(author): INTEGER >>"Пользователь, загрузивший файл" + + -- + **CONSTRAINS:** + * title - + + -- + **DESCRIPTION:** + * title - наименование файла в фаловой системе, формируется из id&extension + * origin_title - исходное наименвоание файла, назначенное пользователем + * type - наименование загружаемой формы, определяет алгоритм обработки файла + * extension - расширение файла (*.xlsx) + * date - дата и время загрузки пакета на сервер + * author - пльзователь, загрузивший файл + +} + +@enduml \ No newline at end of file diff --git a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/FileController.java b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/FileController.java index 7fb89cc..6687606 100644 --- a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/FileController.java +++ b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/FileController.java @@ -12,6 +12,7 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; @@ -21,6 +22,7 @@ import ru.molokoin.explorer_rs.entity.FileResponse; import ru.molokoin.explorer_rs.repository.StorageService; @Controller +@RequestMapping(path = "/explorer_rs") public class FileController { private StorageService storageService; @@ -28,11 +30,11 @@ public class FileController { this.storageService = storageService; } - @GetMapping("/") + @GetMapping("/list") public String listAllFiles(Model model) { model.addAttribute("files", storageService.loadAll().map( path -> ServletUriComponentsBuilder.fromCurrentContextPath() - .path("/download/") + .path("/explorer_rs/download/") .path(path.getFileName().toString()) .toUriString()) .collect(Collectors.toList())); @@ -53,7 +55,6 @@ public class FileController { @ResponseBody public FileResponse uploadFile(@RequestParam("file") MultipartFile file) { String name = storageService.store(file); - String uri = ServletUriComponentsBuilder.fromCurrentContextPath() .path("/download/") .path(name) diff --git a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/PackageController.java b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/PackageController.java new file mode 100644 index 0000000..76eadd2 --- /dev/null +++ b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/PackageController.java @@ -0,0 +1,64 @@ +package ru.molokoin.explorer_rs.controller; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import ru.molokoin.explorer_rs.repository.PackageFace; +import ru.molokoin.explorer_rs.entity.Package; + +@RestController +@RequestMapping(path = "/", consumes = {"*/*"}) +public class PackageController { + @Autowired + private PackageFace repo; + + @GetMapping("/package/list") + public ResponseEntity getPackages(){ + return new ResponseEntity<>(repo.findAll(), HttpStatus.OK); + } + + @GetMapping("/package/{id}") + public ResponseEntity getPackageByID(@PathVariable Integer id){ + return new ResponseEntity<>(repo.findPackageById(id), HttpStatus.OK); + } + + @PostMapping(path = "/package/create", + consumes = MediaType.APPLICATION_JSON_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity savePackage(@RequestBody Package pack) { + repo.save(pack); + return new ResponseEntity<>(pack, HttpStatus.CREATED); + } + + @PostMapping(path = "/package/update/{id}", + consumes = MediaType.APPLICATION_JSON_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity updatePackage(@PathVariable Integer id, @RequestBody Package pack) { + Package p = repo.findPackageById(id); + p.setTitle(pack.getTitle()); + p.setOrigin_title(pack.getOrigin_title()); + p.setType(pack.getType()); + p.setExtension(pack.getExtension()); + p.setDate(pack.getDate()); + repo.save(p); + return new ResponseEntity<>(repo.findPackageById(id), HttpStatus.CREATED); + } + + @DeleteMapping("/package/delete/{id}") + public ResponseEntity deletePackage(@PathVariable Long id){ + Package p = repo.findPackageById(id); + repo.delete(p); + return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK); + } +} diff --git a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Package.java b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Package.java new file mode 100644 index 0000000..b71485f --- /dev/null +++ b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Package.java @@ -0,0 +1,48 @@ +package ru.molokoin.explorer_rs.entity; + +import java.util.Date; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Обертка для хранения данных о загружаемом пакете + */ +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Data +public class Package { + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + private long id; + private String title;// Наименование файла в файловой системе + private String origin_title;// Наименование загружаемого файла + private String type;// Наименование загружаемой формы + private String extension;// Расширение файла + private Date date;// Время загрузки пакета на сервер + + // Пока не работает блок авторизации, учет автора безсмысленен + // private Person author;// Пользователь, загрузивший файл + + /** + * Конструктор без id + * @param title + * @param origin_title + * @param type + * @param extension + * @param date + */ + public Package(String title, String origin_title, String type, String extension, Date date) { + this.title = title; + this.origin_title = origin_title; + this.type = type; + this.extension = extension; + this.date = date; + } +} diff --git a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/PackageFace.java b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/PackageFace.java new file mode 100644 index 0000000..686a2d6 --- /dev/null +++ b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/PackageFace.java @@ -0,0 +1,14 @@ +package ru.molokoin.explorer_rs.repository; + +import java.util.List; + +import org.springframework.data.repository.ListCrudRepository; +import org.springframework.stereotype.Repository; + +import ru.molokoin.explorer_rs.entity.Package; + +@Repository +public interface PackageFace extends ListCrudRepository{ + List findAll(); + Package findPackageById(long id); +} diff --git a/explorer_rs/src/main/resources/static/content/md/hello.md b/explorer_rs/src/main/resources/static/content/md/hello.md index 71e2d93..605d985 100644 --- a/explorer_rs/src/main/resources/static/content/md/hello.md +++ b/explorer_rs/src/main/resources/static/content/md/hello.md @@ -4,4 +4,12 @@ - скачивание файлов с сервера - просмотр списка файлов - хранение сведений о файлах в базе данных -- представление данных xlsx файлов в json \ No newline at end of file +- представление данных xlsx файлов в json + +# Загрузка файлов на сервер +1. файлы загружаются по одному, одновременно создается запись о пакете (table_pack) в базе + +table_pack: +- id +- наименование пакета +- тип пакета(наименование загружаемой формы, для выбора последующего алгоритма обработки) \ No newline at end of file diff --git a/explorer_rs/src/main/resources/templates/listFiles.html b/explorer_rs/src/main/resources/templates/listFiles.html index a64012d..34cfa25 100644 --- a/explorer_rs/src/main/resources/templates/listFiles.html +++ b/explorer_rs/src/main/resources/templates/listFiles.html @@ -7,7 +7,7 @@

Upload Single File:

-
+

@@ -15,7 +15,7 @@

Upload Multiple Files:

-
+