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

View File

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

View File

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