feat(storage): add ArtifactStore interface
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
package com.cameleer.server.core.storage;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* Storage abstraction for deployable JAR artifacts. Implementations decide where
|
||||
* the bytes live (filesystem today; OCI registry / S3 later — see Zot follow-up
|
||||
* issue #158). Callers never construct filesystem paths themselves.
|
||||
*
|
||||
* <p>The interface is intentionally narrow: enough to upload, fetch, and delete.
|
||||
* {@link #locator} returns a stable identifier written into
|
||||
* {@code app_versions.jar_path} so existing rows still resolve.
|
||||
*/
|
||||
public interface ArtifactStore {
|
||||
|
||||
/** Persist {@code bytes} of {@code size} bytes under {@code coords}. Idempotent
|
||||
* on identical content; overwrites on same coords with different content.
|
||||
* Returns the locator (same as {@link #locator}) for convenience. */
|
||||
String put(ArtifactCoordinates coords, InputStream bytes, long size) throws IOException;
|
||||
|
||||
/** Open the artifact for reading. Caller closes. */
|
||||
InputStream get(ArtifactCoordinates coords) throws IOException;
|
||||
|
||||
boolean exists(ArtifactCoordinates coords);
|
||||
|
||||
/** Remove the artifact and any backend-specific scaffolding (empty parent dirs, etc.).
|
||||
* Silently no-ops if the artifact is already absent. */
|
||||
void delete(ArtifactCoordinates coords) throws IOException;
|
||||
|
||||
/** Stable identifier for this storage location — written into
|
||||
* {@code app_versions.jar_path} so existing rows still resolve. For the
|
||||
* filesystem store this is the absolute path; for OCI it's the ref. */
|
||||
String locator(ArtifactCoordinates coords);
|
||||
}
|
||||
Reference in New Issue
Block a user