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 6687606..48b6aeb 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 @@ -19,7 +19,7 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; import ru.molokoin.explorer_rs.entity.FileResponse; -import ru.molokoin.explorer_rs.repository.StorageService; +import ru.molokoin.explorer_rs.service.StorageService; @Controller @RequestMapping(path = "/explorer_rs") 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 index 76eadd2..45c657f 100644 --- 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 @@ -1,7 +1,5 @@ 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; @@ -56,7 +54,7 @@ public class PackageController { } @DeleteMapping("/package/delete/{id}") - public ResponseEntity deletePackage(@PathVariable Long 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/controller/StorageController.java b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/StorageController.java new file mode 100644 index 0000000..cb0a416 --- /dev/null +++ b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/StorageController.java @@ -0,0 +1,10 @@ +package ru.molokoin.explorer_rs.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping(path = "/stroage") +public class StorageController { + +} diff --git a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Document.java b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Document.java new file mode 100644 index 0000000..18360ba --- /dev/null +++ b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Document.java @@ -0,0 +1,39 @@ +package ru.molokoin.explorer_rs.entity; + +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 Document { + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + private long id; + private String name;//наименование файла в файловой системе ({id}.{extension}) + private String name_origin;//оригинальное название загруженного файл + private String path;//путь в файловой системе (root/{id}.{extension}) + private String extension;//расширение файла + private long size;//размер файла + + /** + * @param name + * @param name_origin + * @param path + * @param extension + * @param size + */ + public Document(String name, String name_origin, String path, String extension, long size) { + this.name = name; + this.name_origin = name_origin; + this.path = path; + this.extension = extension; + this.size = size; + } +} diff --git a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Record.java b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Record.java new file mode 100644 index 0000000..d284ac7 --- /dev/null +++ b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Record.java @@ -0,0 +1,57 @@ +package ru.molokoin.explorer_rs.entity; + + +import java.util.Date; + +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToOne; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Data +public class Record { + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + private long id; + private String type;//тип загруженного документа (реестр, заявка, протокол ...) + private String author; + private Date berth;//дата и время создания записи + private String description;//Пояснения автора записи + + /** + * Связь один к одному с таблицей данных файловой системы + */ + @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) + @OnDelete(action = OnDeleteAction.SET_NULL) + @JoinColumn(name = "document_id", nullable = true) + private Document document; + + /** + * Конструктор без id + * @param type + * @param author + * @param berth + * @param description + * @param document + */ + public Record(String type, String author, Date berth, String description, Document document) { + this.type = type; + this.author = author; + this.berth = berth; + this.description = description; + this.document = document; + } +} diff --git a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/DocumentFace.java b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/DocumentFace.java new file mode 100644 index 0000000..1505e2c --- /dev/null +++ b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/DocumentFace.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.Document; + +@Repository +public interface DocumentFace extends ListCrudRepository{ + List findAll(); + Document findDocumentById(long id); +} diff --git a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/RecordFace.java b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/RecordFace.java new file mode 100644 index 0000000..3714280 --- /dev/null +++ b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/RecordFace.java @@ -0,0 +1,5 @@ +package ru.molokoin.explorer_rs.repository; + +public interface RecordFace { + +} diff --git a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/FileSystemStorage.java b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/FileSystemStorage.java new file mode 100644 index 0000000..ac3b6a4 --- /dev/null +++ b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/FileSystemStorage.java @@ -0,0 +1,83 @@ +package ru.molokoin.explorer_rs.service; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Service; + +import jakarta.annotation.PostConstruct; +import ru.molokoin.explorer_rs.config.StorageProperties; +import ru.molokoin.explorer_rs.exception.StorageException; + +/** + * Класс доступа к данным файловой системы + */ +@Service +public class FileSystemStorage implements StorageFace{ + private final Path root; //путь к корню хранилища данных + + /** + * Конструктор, инициирующий путь к корню хранилиа данных, + * установленный файлом настроек приложения + * @param properties + */ + @Autowired + public FileSystemStorage(StorageProperties properties) { + this.root = Paths.get(properties.getLocation()); + } + + /** + * При запуске сервера создаем корневую директорию, + * для хранения данных приложения + */ + @PostConstruct + @Override + public void init() { + try { + Files.createDirectories(root); + } catch (IOException e) { + throw new StorageException("Could not initialize storage location", e); + } + } + + @Override + public List list() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'list'"); + } + + @Override + public void clear() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'clear'"); + } + + @Override + public Resource load(long id) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'load'"); + } + + @Override + public boolean delete(long id) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'delete'"); + } + + @Override + public boolean store(Resource resource) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'store'"); + } + + @Override + public boolean store(List resources) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'store'"); + } +} diff --git a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/FileSystemStorageService.java b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/FileSystemStorageService.java similarity index 95% rename from explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/FileSystemStorageService.java rename to explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/FileSystemStorageService.java index 4c3a727..0001fb4 100644 --- a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/FileSystemStorageService.java +++ b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/FileSystemStorageService.java @@ -1,4 +1,4 @@ -package ru.molokoin.explorer_rs.repository; +package ru.molokoin.explorer_rs.service; import java.io.IOException; import java.io.InputStream; diff --git a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/StorageFace.java b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/StorageFace.java new file mode 100644 index 0000000..4d117f7 --- /dev/null +++ b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/StorageFace.java @@ -0,0 +1,65 @@ +package ru.molokoin.explorer_rs.service; + +import java.util.List; + +import org.springframework.core.io.Resource; + + +/** + * Интерфейс для работы файловым хранилищем + * - инициализация пути к файловому хранилищу на хосте + * - получение списка файлов с хоста + * - получение файла по id + * - получениефайла по name + * - удаление файла + * + */ +public interface StorageFace { + /** + * создание на хосте корневой директории, для файлового хранилища: + * путь к корневой директории устанавливается конфигурацией сервера + * properties - файлом + */ + public void init(); + + /** + * Получение фактического списка файлов с хоста + * файлы на хост могут попадать разными путями и нужно иметь возможность + * сравнить фактический список с данными базы данных + * получить список размещенных на хосте и не зарегистрированных в базе файлов + * @return + */ + public List list(); + + /** + * Удаление всех файлов, очистка хранилища + */ + public void clear(); + + /** + * Получение ресурса из хранилища + * @param id + * @return + */ + public Resource load(long id); + + /** + * Удаление файла из хранилища + * @param id + * @return + */ + public boolean delete(long id); + + /** + * Сохранение файла в хранилище + * @param resource + */ + public boolean store(Resource resource); + + /** + * Сохранение группы ресурсов в хранилище + * @param resources + * @return + */ + public boolean store(List resources); +} diff --git a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/StorageService.java b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/StorageService.java similarity index 86% rename from explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/StorageService.java rename to explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/StorageService.java index 5979353..38db69b 100644 --- a/explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/StorageService.java +++ b/explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/StorageService.java @@ -1,4 +1,4 @@ -package ru.molokoin.explorer_rs.repository; +package ru.molokoin.explorer_rs.service; import org.springframework.core.io.Resource; import org.springframework.web.multipart.MultipartFile;