feat: complete 2.0.7.12 platform overhaul

This commit is contained in:
2026-08-16 19:33:03 +08:00
parent 73555cd04c
commit c9fa6f7a88
159 changed files with 13243 additions and 2539 deletions
@@ -6,6 +6,87 @@ import (
"strings"
)
func (s *Store) UpsertReleasePackage(item ReleasePackage) (ReleasePackage, error) {
item.FileName = strings.TrimSpace(item.FileName)
if item.FileName == "" {
return ReleasePackage{}, errors.New("file name is required")
}
if item.CreatedAt == "" {
if existing, ok, err := s.GetReleasePackage(item.FileName); err == nil && ok {
item.CreatedAt = existing.CreatedAt
} else if err != nil {
return ReleasePackage{}, err
} else {
item.CreatedAt = Now()
}
}
if item.UpdatedAt == "" {
item.UpdatedAt = Now()
}
columns := []string{"product", "version", "platform", "arch", "file_name", "url", "sha256", "size_bytes", "enabled", "created_at", "updated_at"}
conn, d := s.active()
_, err := conn.Exec(d.rebind(d.upsert("release_packages", columns, []string{"file_name"})),
sanitize(item.Product), sanitize(item.Version), sanitize(item.Platform), sanitize(item.Arch), sanitize(item.FileName),
sanitizeLong(item.URL, 1200), sanitize(item.SHA256), item.SizeBytes, d.boolExpr(item.Enabled), item.CreatedAt, item.UpdatedAt)
if err != nil {
s.markFailover(err)
return ReleasePackage{}, err
}
stored, ok, err := s.GetReleasePackage(item.FileName)
if err != nil {
return ReleasePackage{}, err
}
if !ok {
return ReleasePackage{}, errors.New("release package was not persisted")
}
return stored, nil
}
func (s *Store) GetReleasePackage(fileName string) (ReleasePackage, bool, error) {
var item ReleasePackage
var enabled int
err := s.queryRow(releasePackageSelectSQL()+` WHERE file_name = ?`, strings.TrimSpace(fileName)).Scan(
&item.ID, &item.Product, &item.Version, &item.Platform, &item.Arch, &item.FileName, &item.URL,
&item.SHA256, &item.SizeBytes, &enabled, &item.CreatedAt, &item.UpdatedAt)
if errors.Is(err, sql.ErrNoRows) {
return ReleasePackage{}, false, nil
}
if err != nil {
return ReleasePackage{}, false, err
}
item.Enabled = enabled != 0
return item, true, nil
}
func (s *Store) ListReleasePackages() ([]ReleasePackage, error) {
rows, err := s.query(releasePackageSelectSQL() + ` ORDER BY file_name ASC`)
if err != nil {
return nil, err
}
defer rows.Close()
items := []ReleasePackage{}
for rows.Next() {
var item ReleasePackage
var enabled int
if err := rows.Scan(&item.ID, &item.Product, &item.Version, &item.Platform, &item.Arch, &item.FileName, &item.URL,
&item.SHA256, &item.SizeBytes, &enabled, &item.CreatedAt, &item.UpdatedAt); err != nil {
return nil, err
}
item.Enabled = enabled != 0
items = append(items, item)
}
return items, rows.Err()
}
func (s *Store) DeleteReleasePackage(fileName string) error {
_, err := s.exec(`DELETE FROM release_packages WHERE file_name = ?`, strings.TrimSpace(fileName))
return err
}
func releasePackageSelectSQL() string {
return `SELECT id, product, version, platform, arch, file_name, url, sha256, size_bytes, enabled, created_at, updated_at FROM release_packages`
}
func (s *Store) UpsertReleaseNotice(item ReleaseNotice) (ReleaseNotice, error) {
now := Now()
item.Version = strings.TrimSpace(item.Version)