Browse Source

package api in work

master
esoe 6 months ago
parent
commit
773c931b23
  1. 33
      explorer_rs/src/main/docs/puml/erd-explorer-data.puml
  2. 7
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/FileController.java
  3. 64
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/PackageController.java
  4. 48
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Package.java
  5. 14
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/PackageFace.java
  6. 10
      explorer_rs/src/main/resources/static/content/md/hello.md
  7. 4
      explorer_rs/src/main/resources/templates/listFiles.html

33
explorer_rs/src/main/docs/puml/erd-explorer-data.puml

@ -0,0 +1,33 @@
@startuml
!define primary_key(x) <b><color:#b8861b><&key></color> x</b>
!define foreign_key(x) <b><color:#aaaaaa><&key></color> x</b>
!define column(x) <b><color:#efefef><&media-record></color> x</b>
!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

7
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.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; 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.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -21,6 +22,7 @@ import ru.molokoin.explorer_rs.entity.FileResponse;
import ru.molokoin.explorer_rs.repository.StorageService; import ru.molokoin.explorer_rs.repository.StorageService;
@Controller @Controller
@RequestMapping(path = "/explorer_rs")
public class FileController { public class FileController {
private StorageService storageService; private StorageService storageService;
@ -28,11 +30,11 @@ public class FileController {
this.storageService = storageService; this.storageService = storageService;
} }
@GetMapping("/") @GetMapping("/list")
public String listAllFiles(Model model) { public String listAllFiles(Model model) {
model.addAttribute("files", storageService.loadAll().map( model.addAttribute("files", storageService.loadAll().map(
path -> ServletUriComponentsBuilder.fromCurrentContextPath() path -> ServletUriComponentsBuilder.fromCurrentContextPath()
.path("/download/") .path("/explorer_rs/download/")
.path(path.getFileName().toString()) .path(path.getFileName().toString())
.toUriString()) .toUriString())
.collect(Collectors.toList())); .collect(Collectors.toList()));
@ -53,7 +55,6 @@ public class FileController {
@ResponseBody @ResponseBody
public FileResponse uploadFile(@RequestParam("file") MultipartFile file) { public FileResponse uploadFile(@RequestParam("file") MultipartFile file) {
String name = storageService.store(file); String name = storageService.store(file);
String uri = ServletUriComponentsBuilder.fromCurrentContextPath() String uri = ServletUriComponentsBuilder.fromCurrentContextPath()
.path("/download/") .path("/download/")
.path(name) .path(name)

64
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<String> deletePackage(@PathVariable Long id){
Package p = repo.findPackageById(id);
repo.delete(p);
return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK);
}
}

48
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;
}
}

14
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<Package, Long>{
List<Package> findAll();
Package findPackageById(long id);
}

10
explorer_rs/src/main/resources/static/content/md/hello.md

@ -4,4 +4,12 @@
- скачивание файлов с сервера - скачивание файлов с сервера
- просмотр списка файлов - просмотр списка файлов
- хранение сведений о файлах в базе данных - хранение сведений о файлах в базе данных
- представление данных xlsx файлов в json - представление данных xlsx файлов в json
# Загрузка файлов на сервер
1. файлы загружаются по одному, одновременно создается запись о пакете (table_pack) в базе
table_pack:
- id
- наименование пакета
- тип пакета(наименование загружаемой формы, для выбора последующего алгоритма обработки)

4
explorer_rs/src/main/resources/templates/listFiles.html

@ -7,7 +7,7 @@
<hr/> <hr/>
<h4>Upload Single File:</h4> <h4>Upload Single File:</h4>
<form method="POST" enctype="multipart/form-data" th:action="@{/upload-file}"> <form method="POST" enctype="multipart/form-data" th:action="@{/explorer_rs/upload-file}">
<input type="file" name="file"> <br/><br/> <input type="file" name="file"> <br/><br/>
<button type="submit">Submit</button> <button type="submit">Submit</button>
</form> </form>
@ -15,7 +15,7 @@
<hr/> <hr/>
<h4>Upload Multiple Files:</h4> <h4>Upload Multiple Files:</h4>
<form method="POST" enctype="multipart/form-data" th:action="@{/upload-multiple-files}"> <form method="POST" enctype="multipart/form-data" th:action="@{/explorer_rs/upload-multiple-files}">
<input type="file" name="files" multiple> <br/><br/> <input type="file" name="files" multiple> <br/><br/>
<button type="submit">Submit</button> <button type="submit">Submit</button>
</form> </form>

Loading…
Cancel
Save