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

@ -10,6 +10,13 @@ import (
controller "arimelody.me/arimelody.me/music/controller"
)
type artistJSON struct {
ID string `json:"id"`
Name *string `json:"name"`
Website *string `json:"website"`
Avatar *string `json:"avatar"`
}
func ServeAllArtists() http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Content-Type", "application/json")
@ -78,7 +85,7 @@ func CreateArtist() http.Handler {
return
}
var data model.Artist
var data artistJSON
err := json.NewDecoder(r.Body).Decode(&data)
if err != nil {
fmt.Printf("Failed to create artist: %s\n", err)
@ -90,7 +97,7 @@ func CreateArtist() http.Handler {
http.Error(w, "Artist ID cannot be blank\n", http.StatusBadRequest)
return
}
if data.Name == "" {
if data.Name == nil || *data.Name == "" {
http.Error(w, "Artist name cannot be blank\n", http.StatusBadRequest)
return
}
@ -102,9 +109,9 @@ func CreateArtist() http.Handler {
var artist = model.Artist{
ID: data.ID,
Name: data.Name,
Website: data.Website,
Avatar: data.Avatar,
Name: *data.Name,
Website: *data.Website,
Avatar: *data.Avatar,
}
err = controller.CreateArtistDB(global.DB, &artist)
@ -138,7 +145,7 @@ func UpdateArtist() http.Handler {
return
}
var data model.Artist
var data artistJSON
err := json.NewDecoder(r.Body).Decode(&data)
if err != nil {
fmt.Printf("Failed to update artist: %s\n", err)
@ -153,24 +160,24 @@ func UpdateArtist() http.Handler {
return
}
if data.ID == "" { data.ID = artist.ID }
var update = *artist
if data.Name == "" {
http.Error(w, "Artist name cannot be blank\n", http.StatusBadRequest)
return
}
if data.ID != "" { update.ID = data.ID }
if data.Name != nil { update.Name = *data.Name }
if data.Website != nil { update.Website = *data.Website }
if data.Avatar != nil { update.Avatar = *data.Avatar }
err = controller.UpdateArtistDB(global.DB, &data)
err = controller.UpdateArtistDB(global.DB, &update)
if err != nil {
fmt.Printf("Failed to update artist %s: %s\n", artist.ID, err)
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
return
}
artist.ID = data.ID
artist.Name = data.Name
artist.Website = data.Website
artist.Avatar = data.Avatar
artist.ID = update.ID
artist.Name = update.Name
artist.Website = update.Website
artist.Avatar = update.Avatar
w.Header().Add("Content-Type", "application/json")
err = json.NewEncoder(w).Encode(artist)

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 {

View file

@ -122,10 +122,7 @@ func UpdateTrack() http.Handler {
data.ID = trackID
if data.Title == "" {
http.Error(w, "Track title cannot be blank\n", http.StatusBadRequest)
return
}
if data.Title == "" { data.Title = track.Title }
err = controller.UpdateTrackDB(global.DB, &data)
if err != nil {