release edit page! + a lot of other stuff oml

Signed-off-by: ari melody <ari@arimelody.me>
This commit is contained in:
ari melody 2024-08-05 01:23:17 +01:00
parent f276ef1ff2
commit 10f19d46db
23 changed files with 981 additions and 347 deletions

View file

@ -15,14 +15,14 @@ import (
type releaseBodyJSON struct {
ID string `json:"id"`
Visible bool `json:"visible"`
Title string `json:"title"`
Description string `json:"description"`
ReleaseType model.ReleaseType `json:"type"`
ReleaseDate time.Time `json:"releaseDate"`
Artwork string `json:"artwork"`
Buyname string `json:"buyname"`
Buylink string `json:"buylink"`
Visible *bool `json:"visible"`
Title *string `json:"title"`
Description *string `json:"description"`
ReleaseType *model.ReleaseType `json:"type"`
ReleaseDate *string `json:"releaseDate"`
Artwork *string `json:"artwork"`
Buyname *string `json:"buyname"`
Buylink *string `json:"buylink"`
}
func ServeCatalog() http.Handler {
@ -36,7 +36,7 @@ func ServeCatalog() http.Handler {
Artwork string `json:"artwork"`
Buyname string `json:"buyname"`
Buylink string `json:"buylink"`
Links []*model.Link `json:"links"`
Links []*model.Link `json:"links"`
}
catalog := []CatalogItem{}
@ -85,26 +85,40 @@ func CreateRelease() http.Handler {
http.Error(w, "Release ID cannot be empty\n", http.StatusBadRequest)
return
}
if data.Title == "" {
if *data.Title == "" {
http.Error(w, "Release title cannot be empty\n", http.StatusBadRequest)
return
}
if data.Buyname == nil || *data.Buyname == "" { *data.Buyname = "buy" }
if data.Buylink == nil || *data.Buylink == "" { *data.Buylink = "https://arimelody.me" }
if global.GetRelease(data.ID) != nil {
http.Error(w, fmt.Sprintf("Release %s already exists\n", data.ID), http.StatusBadRequest)
return
}
releaseDate := time.Time{}
if *data.ReleaseDate == "" {
http.Error(w, "Release date cannot be empty\n", http.StatusBadRequest)
return
} else if data.ReleaseDate != nil {
releaseDate, err = time.Parse("2006-01-02T15:04", *data.ReleaseDate)
if err != nil {
http.Error(w, "Invalid release date", http.StatusBadRequest)
return
}
}
var release = model.Release{
ID: data.ID,
Visible: data.Visible,
Title: data.Title,
Description: data.Description,
ReleaseType: data.ReleaseType,
ReleaseDate: data.ReleaseDate,
Artwork: data.Artwork,
Buyname: data.Buyname,
Buylink: data.Buylink,
Visible: *data.Visible,
Title: *data.Title,
Description: *data.Description,
ReleaseType: *data.ReleaseType,
ReleaseDate: releaseDate,
Artwork: *data.Artwork,
Buyname: *data.Buyname,
Buylink: *data.Buylink,
Links: []*model.Link{},
Credits: []*model.Credit{},
Tracks: []*model.Track{},
@ -153,41 +167,46 @@ func UpdateRelease() http.Handler {
return
}
if data.ID == "" { data.ID = release.ID }
if data.Title == "" {
http.Error(w, "Release title cannot be blank\n", http.StatusBadRequest)
return
var update = *release
if data.ID != "" { update.ID = data.ID }
if data.Visible != nil { update.Visible = *data.Visible }
if data.Title != nil { update.Title = *data.Title }
if data.Description != nil { update.Description = *data.Description }
if data.ReleaseType != nil { update.ReleaseType = *data.ReleaseType }
if data.ReleaseDate != nil {
newDate, err := time.Parse("2006-01-02T15:04", *data.ReleaseDate)
if err != nil {
http.Error(w, "Invalid release date", http.StatusBadRequest)
return
}
update.ReleaseDate = newDate
}
var new_release = model.Release{
ID: data.ID,
Visible: data.Visible,
Title: data.Title,
Description: data.Description,
ReleaseType: data.ReleaseType,
ReleaseDate: data.ReleaseDate,
Artwork: data.Artwork,
Buyname: data.Buyname,
Buylink: data.Buylink,
if data.Artwork != nil { update.Artwork = *data.Artwork }
if data.Buyname != nil {
if *data.Buyname == "" {
http.Error(w, "Release buy name cannot be empty", http.StatusBadRequest)
return
}
update.Buyname = *data.Buyname
}
if data.Buylink != nil { update.Buylink = *data.Buylink }
err = controller.UpdateReleaseDB(global.DB, release)
err = controller.UpdateReleaseDB(global.DB, &update)
if err != nil {
fmt.Printf("Failed to update release %s: %s\n", release.ID, err)
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
return
}
release.ID = new_release.ID
release.Visible = new_release.Visible
release.Title = new_release.Title
release.Description = new_release.Description
release.ReleaseType = new_release.ReleaseType
release.ReleaseDate = new_release.ReleaseDate
release.Artwork = new_release.Artwork
release.Buyname = new_release.Buyname
release.Buylink = new_release.Buylink
release.ID = update.ID
release.Visible = update.Visible
release.Title = update.Title
release.Description = update.Description
release.ReleaseType = update.ReleaseType
release.ReleaseDate = update.ReleaseDate
release.Artwork = update.Artwork
release.Buyname = update.Buyname
release.Buylink = update.Buylink
w.Header().Add("Content-Type", "application/json")
err = json.NewEncoder(w).Encode(release)
@ -195,6 +214,7 @@ func UpdateRelease() http.Handler {
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
return
}
return
}
if len(segments) == 2 {