Compare commits

..

No commits in common. "a063b1740c452755e7df5a3b5a688b921df06443" and "834d1e62a003ff8382a304438a7396977605ae37" have entirely different histories.

6 changed files with 30 additions and 24 deletions

View File

@ -56,7 +56,7 @@ func Init(mux *http.ServeMux) error {
// new session // new session
mux.HandleFunc("POST /savedata/updateall", handleUpdateAll) mux.HandleFunc("POST /savedata/updateall", handleUpdateAll)
mux.HandleFunc("POST /savedata/system/verify", handleSystemVerify) mux.HandleFunc("POST /savedata/verify", handleSessionVerify)
mux.HandleFunc("GET /savedata/system", handleGetSystemData) mux.HandleFunc("GET /savedata/system", handleGetSystemData)
mux.HandleFunc("GET /savedata/session", handleGetSessionData) mux.HandleFunc("GET /savedata/session", handleGetSessionData)

View File

@ -585,18 +585,23 @@ func handleUpdateAll(w http.ResponseWriter, r *http.Request) {
return return
} }
var clientSessionId string
if r.URL.Query().Has("clientSessionId") {
clientSessionId = r.URL.Query().Get("clientSessionId")
}
if clientSessionId == "" {
clientSessionId = legacyClientSessionId
}
var data CombinedSaveData var data CombinedSaveData
err = json.NewDecoder(r.Body).Decode(&data) err = json.NewDecoder(r.Body).Decode(&data)
if err != nil { if err != nil {
httpError(w, r, fmt.Errorf("failed to decode request body: %s", err), http.StatusBadRequest) httpError(w, r, fmt.Errorf("failed to decode request body: %s", err), http.StatusBadRequest)
return return
} }
if data.ClientSessionId == "" {
data.ClientSessionId = legacyClientSessionId
}
var active bool var active bool
active, err = db.IsActiveSession(uuid, data.ClientSessionId) active, err = db.IsActiveSession(uuid, clientSessionId)
if err != nil { if err != nil {
httpError(w, r, fmt.Errorf("failed to check active session: %s", err), http.StatusBadRequest) httpError(w, r, fmt.Errorf("failed to check active session: %s", err), http.StatusBadRequest)
return return
@ -622,7 +627,7 @@ func handleUpdateAll(w http.ResponseWriter, r *http.Request) {
return return
} }
} else { } else {
if err = db.UpdateTrainerIds(trainerId, secretId, uuid); err != nil { if err := db.UpdateTrainerIds(trainerId, secretId, uuid); err != nil {
httpError(w, r, err, http.StatusInternalServerError) httpError(w, r, err, http.StatusInternalServerError)
return return
} }
@ -641,23 +646,24 @@ func handleUpdateAll(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
} }
type SystemVerifyResponse struct { type SessionVerifyResponse struct {
Valid bool `json:"valid"` Valid bool `json:"valid"`
SystemData *defs.SystemSaveData `json:"systemData"` SessionData *defs.SessionSaveData `json:"sessionData"`
} }
type SystemVerifyRequest struct { type SessionVerifyRequest struct {
ClientSessionId string `json:"clientSessionId"` ClientSessionId string `json:"clientSessionId"`
Slot int `json:"slot"`
} }
func handleSystemVerify(w http.ResponseWriter, r *http.Request) { func handleSessionVerify(w http.ResponseWriter, r *http.Request) {
uuid, err := uuidFromRequest(r) uuid, err := uuidFromRequest(r)
if err != nil { if err != nil {
httpError(w, r, err, http.StatusBadRequest) httpError(w, r, err, http.StatusBadRequest)
return return
} }
var input SystemVerifyRequest var input SessionVerifyRequest
err = json.NewDecoder(r.Body).Decode(&input) err = json.NewDecoder(r.Body).Decode(&input)
if err != nil { if err != nil {
httpError(w, r, fmt.Errorf("failed to decode request body: %s", err), http.StatusBadRequest) httpError(w, r, fmt.Errorf("failed to decode request body: %s", err), http.StatusBadRequest)
@ -671,7 +677,7 @@ func handleSystemVerify(w http.ResponseWriter, r *http.Request) {
return return
} }
response := SystemVerifyResponse{ response := SessionVerifyResponse{
Valid: active, Valid: active,
} }
@ -683,14 +689,14 @@ func handleSystemVerify(w http.ResponseWriter, r *http.Request) {
return return
} }
var storedSaveData defs.SystemSaveData var storedSaveData defs.SessionSaveData
storedSaveData, err = db.ReadSystemSaveData(uuid) storedSaveData, err = db.ReadSessionSaveData(uuid, input.Slot)
if err != nil { if err != nil {
httpError(w, r, fmt.Errorf("failed to read session save data: %s", err), http.StatusInternalServerError) httpError(w, r, fmt.Errorf("failed to read session save data: %s", err), http.StatusInternalServerError)
return return
} }
response.SystemData = &storedSaveData response.SessionData = &storedSaveData
} }
jsonResponse(w, r, response) jsonResponse(w, r, response)
@ -727,7 +733,6 @@ func handleGetSystemData(w http.ResponseWriter, r *http.Request) {
return return
} }
//TODO apply vouchers
jsonResponse(w, r, save) jsonResponse(w, r, save)
} }

View File

@ -57,10 +57,6 @@ func Get(uuid []byte, datatype, slot int) (any, error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to update system save data: %s", err) return nil, fmt.Errorf("failed to update system save data: %s", err)
} }
err = db.DeleteClaimedAccountCompensations(uuid)
if err != nil {
return nil, fmt.Errorf("failed to delete claimed compensations: %s", err)
}
err = db.UpdateAccountStats(uuid, system.GameStats, system.VoucherCounts) err = db.UpdateAccountStats(uuid, system.GameStats, system.VoucherCounts)
if err != nil { if err != nil {

View File

@ -47,6 +47,11 @@ func Update(uuid []byte, slot int, save any) error {
return fmt.Errorf("failed to update account stats: %s", err) return fmt.Errorf("failed to update account stats: %s", err)
} }
err = db.DeleteClaimedAccountCompensations(uuid)
if err != nil {
return fmt.Errorf("failed to delete claimed compensations: %s", err)
}
return db.StoreSystemSaveData(uuid, save) return db.StoreSystemSaveData(uuid, save)
case defs.SessionSaveData: // Session case defs.SessionSaveData: // Session

View File

@ -212,7 +212,7 @@ func UpdateTrainerIds(trainerId, secretId int, uuid []byte) error {
func IsActiveSession(uuid []byte, clientSessionId string) (bool, error) { func IsActiveSession(uuid []byte, clientSessionId string) (bool, error) {
var storedId string var storedId string
err := handle.QueryRow("SELECT clientSessionId FROM activeClientSessions WHERE uuid = ?", uuid).Scan(&storedId) err := handle.QueryRow("SELECT clientSessionId FROM activeClientSessions WHERE sessions.uuid = ?", uuid).Scan(&storedId)
if err != nil { if err != nil {
if errors.Is(err, sql.ErrNoRows) { if errors.Is(err, sql.ErrNoRows) {
return false, nil return false, nil

View File

@ -167,9 +167,9 @@ func setupDb(tx *sql.Tx) error {
`CREATE TABLE IF NOT EXISTS accountDailyRuns (uuid BINARY(16) NOT NULL, date DATE NOT NULL, score INT(11) NOT NULL DEFAULT 0, wave INT(11) NOT NULL DEFAULT 0, timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (uuid, date), CONSTRAINT accountDailyRuns_ibfk_1 FOREIGN KEY (uuid) REFERENCES accounts (uuid) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT accountDailyRuns_ibfk_2 FOREIGN KEY (date) REFERENCES dailyRuns (date) ON DELETE NO ACTION ON UPDATE NO ACTION)`, `CREATE TABLE IF NOT EXISTS accountDailyRuns (uuid BINARY(16) NOT NULL, date DATE NOT NULL, score INT(11) NOT NULL DEFAULT 0, wave INT(11) NOT NULL DEFAULT 0, timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (uuid, date), CONSTRAINT accountDailyRuns_ibfk_1 FOREIGN KEY (uuid) REFERENCES accounts (uuid) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT accountDailyRuns_ibfk_2 FOREIGN KEY (date) REFERENCES dailyRuns (date) ON DELETE NO ACTION ON UPDATE NO ACTION)`,
`CREATE INDEX IF NOT EXISTS accountDailyRunsByDate ON accountDailyRuns (date)`, `CREATE INDEX IF NOT EXISTS accountDailyRunsByDate ON accountDailyRuns (date)`,
`CREATE TABLE IF NOT EXISTS systemSaveData (uuid BINARY(16) PRIMARY KEY, data LONGBLOB, timestamp TIMESTAMP, FOREIGN KEY (uuid) REFERENCES accounts (uuid) ON DELETE CASCADE ON UPDATE CASCADE)`, `CREATE TABLE IF NOT EXISTS systemSaveData (uuid BINARY(16) PRIMARY KEY, data LONGBLOB, timestamp TIMESTAMP)`,
`CREATE TABLE IF NOT EXISTS sessionSaveData (uuid BINARY(16), slot TINYINT, data LONGBLOB, timestamp TIMESTAMP, PRIMARY KEY (uuid, slot), FOREIGN KEY (uuid) REFERENCES accounts (uuid) ON DELETE CASCADE ON UPDATE CASCADE)`, `CREATE TABLE IF NOT EXISTS sessionSaveData (uuid BINARY(16), slot TINYINT, data LONGBLOB, timestamp TIMESTAMP, PRIMARY KEY (uuid, slot))`,
// ---------------------------------- // ----------------------------------
// MIGRATION 001 // MIGRATION 001