# Storage 操作実装ガイド Storage(MinIO)操作のための IF を提供する。 実際の操作のための実装方法を説明する。 ## Bucket の種類と役割 ### アップロード専用 Bucket | ファイルの自動削除 | Bucket 数 | | ---------------------- | ---------------- | | 有(数分~数時間程度) | 全領域共通で単一 | フロントからアップロードするファイルを一時的に格納する Bucket フロントからこの Bucket にアップロードされたファイルは、Backend を介して永続化 Bucket へと格納される ### 永続化 Bucket | ファイルの自動削除 | Bucket 数 | | ------------------ | ---------------------- | | 無 | 領域ごとに、複数作成可 | 主に Backend で使用されるファイルを無期限で格納する Bucket 自動削除されないため、明示的なファイルの削除が必要 ### 一時保存 Bucket | ファイルの自動削除 | Bucket 数 | | ---------------------- | ---------------- | | 有(数時間~数日程度) | 全領域共通で単一 | 帳票など、一定時間内にダウンロードされ得るファイルを格納する Bucket ### 各 Bucket に対して、実装者が任意で操作可能な処理 | | アップロード専用 Bucket | 永続化 Bucket | 一時保存 Bucket | | ------------- | ----------------------- | ------------- | --------------- | | UL リンク作成 | 〇 | | | | ファイル取得 | 〇 | 〇 | 〇 | | ファイル格納 | | 〇 | 〇 | | ファイル削除 | | 〇 | | | DL リンク作成 | | 〇 | 〇 | ## Storage 操作実装手順 ### scaffold 取り込み 下記クラスが sweded に配置される(予定) ogis_ri.dx2sweded.service.storage.port.MomentaryStorage.java ogis_ri.dx2sweded.service.storage.port.PermanentStorage.java ogis_ri.dx2sweded.service.storage.port.TemporaryStorage.java ogis_ri.dx2sweded.service.storage.port.UploadDestination.java ogis_ri.dx2sweded.service.storage.adapter.MinIOStorage.java ogis_ri.dx2sweded.service.storage.adapter.MomentaryStorageImpl.java ogis_ri.dx2sweded.service.storage.adapter.PermanentStorageImpl.java ogis_ri.dx2sweded.service.storage.adapter.TemporaryStorageimpl.java ogis_ri.dx2sweded.service.storage.adapter.config.CommonConfig.java ogis_ri.dx2sweded.service.storage.adapter.config.TemporaryStorageConfig.java ### 環境変数設定 applications.properties に設定を追記 以下は記載例 ``` # MinIOへの接続設定 storage-endpoint=XXXXXXXXXXXXXXXXXXXXX storage-accesskey=XXXXXXXXXX storage-secretkey=XXXXXXXXXX # アップロード専用Bucket名 temporary-bucket-name=tmp-bucket # 永続化・一時保存Bukcet名 permanent-bucket1=persist-bucket permanent-bucket2=persist-bucket2 permanent-bucket3= ...(略) momentary-bucket=momentary-bucket ``` MinIO への接続設定、アップロード専用 Bucket 名までは環境変数名を上記と合わせること 永続化・一時保存 Bucket 名の環境変数名は、後述の設定クラスと合わせる。 ### 自分の領域に設定用クラスを作成 以下のようなクラスを実装する。 ``` package ogis_ri.dx2notifications.adapter.api; // 自領域に配置 import org.eclipse.microprofile.config.inject.ConfigProperty; import jakarta.enterprise.context.Dependent; import jakarta.enterprise.inject.Produces; import ...その他は略 @Dependent public class Config { // 接続用の設定をInject @Inject CommonConfig commonConfig; // 環境変数からBucket名取得 @ConfigProperty(name = "permanent-bucket1") // それぞれ環境変数名と合わせる String permanentBucketName1; @ConfigProperty(name = "permanent-bucket2") String permanentBucketName2; @ConfigProperty(name = "momentary-bucket") String momentaryBucketName; // 以下の記述により、Bucket名指定でのInjectが可能となる @Produces @Named public PermanentStorage permanent1() { // 1つ目の永続化Bucket return new PermanentStorageImpl(permanentBucketName1, commonConfig); } @Produces @Named public PermanentStorage permanent2() { // 2つ目の永続化Bucket return new PermanentStorageImpl(permanentBucketName2, commonConfig); } @Produces @Named public MomentaryStorage momentary() { // 一時保存Bucket return new MomentaryStorageImpl(momentaryBucketName, commonConfig); } } ``` ### 各 Bucket 用の IF をインジェクト