3bb4ab494e
- Added `internal/db/store.go` to define the Store interface for database operations, including user, organization, app, channel, release, patch, and artifact management. - Introduced `internal/models/models.go` changes to reflect updated organization and artifact response structures. - Created `internal/storage/factory.go`, `local.go`, and `s3.go` to implement storage backends for local filesystem and S3-compatible services. - Removed deprecated `internal/storage/storage.go` and refactored storage interface into `internal/storage/store.go`. - Updated frontend JavaScript in `web/js/app.js` to display server health information, including storage and database backend details.
28 lines
1.1 KiB
Go
28 lines
1.1 KiB
Go
package storage
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"time"
|
|
)
|
|
|
|
// Store is the storage backend interface.
|
|
type Store interface {
|
|
GeneratePresignedUploadURL(ctx context.Context, objectKey string, isPublic bool, expiry time.Duration) (string, error)
|
|
GeneratePublicDownloadURL(ctx context.Context, objectKey string) (string, error)
|
|
UploadObject(ctx context.Context, objectKey string, reader io.Reader, size int64, contentType string, isPublic bool) error
|
|
GetObject(ctx context.Context, objectKey string, isPublic bool) (io.ReadCloser, error)
|
|
BackendName() string
|
|
}
|
|
|
|
// GenerateReleaseStorageKey creates a standardized storage key for releases.
|
|
func GenerateReleaseStorageKey(appID, version, platform, arch, filename string) string {
|
|
return fmt.Sprintf("apps/%s/releases/%s/%s/%s/%s", appID, version, platform, arch, filename)
|
|
}
|
|
|
|
// GeneratePatchStorageKey creates a standardized storage key for patches.
|
|
func GeneratePatchStorageKey(appID string, releaseID int, patchNumber int, platform, arch, filename string) string {
|
|
return fmt.Sprintf("apps/%s/releases/%d/patches/%d/%s/%s/%s", appID, releaseID, patchNumber, platform, arch, filename)
|
|
}
|