84 lines
2.4 KiB
Go
84 lines
2.4 KiB
Go
package app
|
|
|
|
import (
|
|
"time"
|
|
|
|
"gitea.maximumdirect.net/eric/distributor/internal/bundle"
|
|
"gitea.maximumdirect.net/eric/distributor/internal/storage"
|
|
)
|
|
|
|
type bundleSummaryResult struct {
|
|
Path string `json:"path"`
|
|
ID string `json:"id"`
|
|
}
|
|
|
|
type bundleDetailResult struct {
|
|
Path string `json:"path"`
|
|
ID string `json:"id"`
|
|
Created string `json:"created"`
|
|
Digest string `json:"digest"`
|
|
FileCount int `json:"file_count"`
|
|
TotalSize int64 `json:"total_size"`
|
|
Files []manifestFileResult `json:"files"`
|
|
}
|
|
|
|
type manifestFileResult struct {
|
|
Path string `json:"path"`
|
|
SHA256 string `json:"sha256"`
|
|
Size int64 `json:"size"`
|
|
}
|
|
|
|
func bundleSummaryFromBundle(sourceBundle bundle.Bundle) bundleSummaryResult {
|
|
return bundleSummaryResult{
|
|
Path: storage.DisplayPath(sourceBundle.RootRelativePath),
|
|
ID: sourceBundle.Manifest.ID,
|
|
}
|
|
}
|
|
|
|
func bundleSummariesFromBundles(sourceBundles []bundle.Bundle) []bundleSummaryResult {
|
|
results := make([]bundleSummaryResult, 0, len(sourceBundles))
|
|
for _, sourceBundle := range sourceBundles {
|
|
results = append(results, bundleSummaryFromBundle(sourceBundle))
|
|
}
|
|
return results
|
|
}
|
|
|
|
func bundleDetailFromBundle(sourceBundle bundle.Bundle) bundleDetailResult {
|
|
result := bundleDetailResult{
|
|
Path: storage.DisplayPath(sourceBundle.RootRelativePath),
|
|
ID: sourceBundle.Manifest.ID,
|
|
Created: formatManifestCreated(sourceBundle.Manifest.Created),
|
|
Digest: sourceBundle.Manifest.Digest,
|
|
FileCount: len(sourceBundle.Manifest.Files),
|
|
Files: manifestFileResults(sourceBundle.Manifest.Files),
|
|
}
|
|
for _, file := range sourceBundle.Manifest.Files {
|
|
result.TotalSize += file.Size
|
|
}
|
|
return result
|
|
}
|
|
|
|
func bundleDetailsFromBundles(sourceBundles []bundle.Bundle) []bundleDetailResult {
|
|
results := make([]bundleDetailResult, 0, len(sourceBundles))
|
|
for _, sourceBundle := range sourceBundles {
|
|
results = append(results, bundleDetailFromBundle(sourceBundle))
|
|
}
|
|
return results
|
|
}
|
|
|
|
func manifestFileResults(files []bundle.ManifestFile) []manifestFileResult {
|
|
results := make([]manifestFileResult, 0, len(files))
|
|
for _, file := range files {
|
|
results = append(results, manifestFileResult{
|
|
Path: file.Path,
|
|
SHA256: file.SHA256,
|
|
Size: file.Size,
|
|
})
|
|
}
|
|
return results
|
|
}
|
|
|
|
func formatManifestCreated(created time.Time) string {
|
|
return created.Format(time.RFC3339)
|
|
}
|