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) }