mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-28 05:46:36 +08:00
66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
// Copyright 2026 Arctel.net
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package pages
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"Wavelet/openflare/plugins/server/kernel/repository"
|
|
|
|
"Wavelet/openflare/plugins/server/kernel/ofupload"
|
|
)
|
|
|
|
// ProjectLatestPackageMetadata describes the active package limits published to Agents.
|
|
type ProjectLatestPackageMetadata struct {
|
|
DeploymentID uint
|
|
Hash string
|
|
PackageSize int64
|
|
FileCount int
|
|
TotalSize int64
|
|
}
|
|
|
|
// GetProjectLatestPackageMetadata returns one coherent metadata snapshot for a
|
|
// project's currently active deployment.
|
|
func GetProjectLatestPackageMetadata(ctx context.Context, projectID uint) (*ProjectLatestPackageMetadata, error) {
|
|
deployment, err := resolveProjectActiveDeploymentForAgent(ctx, projectID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if deployment.UploadID == 0 {
|
|
if err := ensureDeploymentUploadRecord(ctx, deployment); err != nil {
|
|
return nil, err
|
|
}
|
|
deployment, err = repository.GetPagesDeploymentByID(ctx, deployment.ID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
if deployment.UploadID == 0 {
|
|
return nil, errors.New(errPagesDeploymentNotFound)
|
|
}
|
|
|
|
uploadRecord, err := ofupload.GetActiveUpload(ctx, deployment.UploadID)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("pages 部署包不存在: %w", err)
|
|
}
|
|
hash := strings.TrimSpace(uploadRecord.Hash)
|
|
if hash == "" {
|
|
hash = strings.TrimSpace(deployment.Checksum)
|
|
}
|
|
if hash == "" {
|
|
return nil, errors.New(errPagesDeploymentHashMissing)
|
|
}
|
|
|
|
return &ProjectLatestPackageMetadata{
|
|
DeploymentID: deployment.ID,
|
|
Hash: hash,
|
|
PackageSize: uploadRecord.Size,
|
|
FileCount: deployment.FileCount,
|
|
TotalSize: deployment.TotalSize,
|
|
}, nil
|
|
}
|