From 41f82e8034962982fb5611a879978ab838d98ed5 Mon Sep 17 00:00:00 2001 From: David Dworken Date: Tue, 20 Sep 2022 21:13:59 -0700 Subject: [PATCH] Add ReadCount field to deletion requests so that we can eventually delete them from the DB --- backend/server/server.go | 22 ++++++++++++++++++---- shared/data.go | 2 +- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/backend/server/server.go b/backend/server/server.go index 641bc0e..5203d6c 100644 --- a/backend/server/server.go +++ b/backend/server/server.go @@ -109,12 +109,15 @@ func apiQueryHandler(w http.ResponseWriter, r *http.Request) { deviceId := getRequiredQueryParam(r, "device_id") updateUsageData(userId, deviceId) // Increment the count - GLOBAL_DB.Exec("UPDATE enc_history_entries SET read_count = read_count + 1 WHERE device_id = ?", deviceId) + result := GLOBAL_DB.Exec("UPDATE enc_history_entries SET read_count = read_count + 1 WHERE device_id = ?", deviceId) + if result.Error != nil { + panic(result.Error) + } // Then retrieve, to avoid a race condition tx := GLOBAL_DB.Where("device_id = ? AND read_count < 5", deviceId) var historyEntries []*shared.EncHistoryEntry - result := tx.Find(&historyEntries) + result = tx.Find(&historyEntries) if result.Error != nil { panic(fmt.Errorf("DB query error: %v", result.Error)) } @@ -205,11 +208,18 @@ func apiBannerHandler(w http.ResponseWriter, r *http.Request) { } func getDeletionRequestsHandler(w http.ResponseWriter, r *http.Request) { - // TODO: Count how many times they've been read and eventually delete them userId := getRequiredQueryParam(r, "user_id") deviceId := getRequiredQueryParam(r, "device_id") + + // Increment the ReadCount + result := GLOBAL_DB.Exec("UPDATE deletion_requesy SET read_count = read_count + 1 WHERE destination_device_id = ? AND user_id = ?", deviceId, userId) + if result.Error != nil { + panic(result.Error) + } + + // Return all the deletion requests var deletionRequests []*shared.DeletionRequest - result := GLOBAL_DB.Where("user_id = ? AND destination_device_id = ?", userId, deviceId).Find(&deletionRequests) + result = GLOBAL_DB.Where("user_id = ? AND destination_device_id = ?", userId, deviceId).Find(&deletionRequests) if result.Error != nil { panic(fmt.Errorf("DB query error: %v", result.Error)) } @@ -519,6 +529,10 @@ func cleanDatabase() error { if result.Error != nil { return result.Error } + result = GLOBAL_DB.Exec("DELETE FROM deletion_requests WHERE read_count > 100") + if result.Error != nil { + return result.Error + } // TODO: Clean the database by deleting entries for users that haven't been used in X amount of time return nil } diff --git a/shared/data.go b/shared/data.go index d5b6aaa..0c65162 100644 --- a/shared/data.go +++ b/shared/data.go @@ -47,11 +47,11 @@ type UpdateInfo struct { } type DeletionRequest struct { - // TODO: Add a ReadCount UserId string `json:"user_id"` DestinationDeviceId string `json:"destination_device_id"` SendTime time.Time `json:"send_time"` Messages MessageIdentifiers `json:"messages"` + ReadCount int `json:"read_count"` } type MessageIdentifiers struct {