Return generic error on non-existent save

This commit is contained in:
Pancakes 2025-04-25 19:20:22 -04:00
parent 4141d13a69
commit 21209ef4a7
No known key found for this signature in database
GPG Key ID: 5792877BFA27DC8F
3 changed files with 25 additions and 6 deletions

View File

@ -200,7 +200,7 @@ func handleSession(w http.ResponseWriter, r *http.Request) {
switch r.PathValue("action") {
case "get":
save, err := savedata.GetSession(uuid, slot)
if errors.Is(err, sql.ErrNoRows) {
if errors.Is(err, savedata.ErrSaveNotExist) {
http.Error(w, err.Error(), http.StatusNotFound)
return
}
@ -220,7 +220,7 @@ func handleSession(w http.ResponseWriter, r *http.Request) {
}
existingSave, err := savedata.GetSession(uuid, slot)
if err != nil && !errors.Is(err, sql.ErrNoRows) {
if err != nil && !errors.Is(err, savedata.ErrSaveNotExist) {
httpError(w, r, fmt.Errorf("failed to retrieve session save data: %s", err), http.StatusInternalServerError)
return
} else {
@ -339,7 +339,7 @@ func handleUpdateAll(w http.ResponseWriter, r *http.Request) {
}
existingPlaytime, err := savedata.GetPlaytime(uuid)
if err != nil && !errors.Is(err, sql.ErrNoRows) {
if err != nil && !errors.Is(err, savedata.ErrSaveNotExist) {
httpError(w, r, fmt.Errorf("failed to retrieve playtime: %s", err), http.StatusInternalServerError)
return
} else {
@ -356,7 +356,7 @@ func handleUpdateAll(w http.ResponseWriter, r *http.Request) {
}
existingSave, err := savedata.GetSession(uuid, data.SessionSlotId)
if err != nil && !errors.Is(err, sql.ErrNoRows) {
if err != nil && !errors.Is(err, savedata.ErrSaveNotExist) {
httpError(w, r, fmt.Errorf("failed to retrieve session save data: %s", err), http.StatusInternalServerError)
return
} else {
@ -417,7 +417,7 @@ func handleSystem(w http.ResponseWriter, r *http.Request) {
save, err := savedata.GetSystem(uuid)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
if errors.Is(err, savedata.ErrSaveNotExist) {
http.Error(w, err.Error(), http.StatusNotFound)
} else {
httpError(w, r, fmt.Errorf("failed to get system save data: %s", err), http.StatusInternalServerError)
@ -441,7 +441,7 @@ func handleSystem(w http.ResponseWriter, r *http.Request) {
}
existingPlaytime, err := savedata.GetPlaytime(uuid)
if err != nil && !errors.Is(err, sql.ErrNoRows) {
if err != nil && !errors.Is(err, savedata.ErrSaveNotExist) {
httpError(w, r, fmt.Errorf("failed to retrieve playtime: %s", err), http.StatusInternalServerError)
return
} else {

View File

@ -18,6 +18,9 @@
package savedata
import (
"database/sql"
"errors"
"github.com/pagefaultgames/rogueserver/db"
"github.com/pagefaultgames/rogueserver/defs"
)
@ -25,6 +28,10 @@ import (
func GetSession(uuid []byte, slot int) (defs.SessionSaveData, error) {
session, err := db.ReadSessionSaveData(uuid, slot)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
err = ErrSaveNotExist
}
return session, err
}

View File

@ -18,21 +18,33 @@
package savedata
import (
"database/sql"
"errors"
"fmt"
"os"
"github.com/aws/aws-sdk-go-v2/service/s3/types"
"github.com/pagefaultgames/rogueserver/db"
"github.com/pagefaultgames/rogueserver/defs"
)
var ErrSaveNotExist = errors.New("save does not exist")
func GetSystem(uuid []byte) (defs.SystemSaveData, error) {
var system defs.SystemSaveData
var err error
if os.Getenv("S3_SYSTEM_BUCKET_NAME") != "" { // use S3
system, err = db.GetSystemSaveFromS3(uuid)
var nokey *types.NoSuchKey
if errors.As(err, &nokey) {
err = ErrSaveNotExist
}
} else { // use database
system, err = db.ReadSystemSaveData(uuid)
if errors.Is(err, sql.ErrNoRows) {
err = ErrSaveNotExist
}
}
if err != nil {
return system, err