feat: complete 2.0.7.12 platform overhaul
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user