2.2.0 - Final Builds
All checks were successful
Ascently - Sync Deploy / build-and-push (push) Successful in 2m32s
All checks were successful
Ascently - Sync Deploy / build-and-push (push) Successful in 2m32s
This commit is contained in:
40
sync/main.go
40
sync/main.go
@@ -13,7 +13,7 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
const VERSION = "2.1.0"
|
||||
const VERSION = "2.2.0"
|
||||
|
||||
func min(a, b int) int {
|
||||
if a < b {
|
||||
@@ -283,8 +283,16 @@ func (s *SyncServer) mergeDeletedItems(existing []DeletedItem, updates []Deleted
|
||||
}
|
||||
}
|
||||
|
||||
// Clean up tombstones older than 30 days to prevent unbounded growth
|
||||
cutoffTime := time.Now().UTC().Add(-30 * 24 * time.Hour)
|
||||
result := make([]DeletedItem, 0, len(deletedMap))
|
||||
for _, item := range deletedMap {
|
||||
deletedTime, err := time.Parse(time.RFC3339, item.DeletedAt)
|
||||
if err == nil && deletedTime.Before(cutoffTime) {
|
||||
log.Printf("Cleaning up old deletion record: type=%s, id=%s, deletedAt=%s",
|
||||
item.Type, item.ID, item.DeletedAt)
|
||||
continue
|
||||
}
|
||||
result = append(result, item)
|
||||
}
|
||||
return result
|
||||
@@ -533,15 +541,16 @@ func (s *SyncServer) handleDeltaSync(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
// Merge and apply deletions first to prevent resurrection
|
||||
serverBackup.DeletedItems = s.mergeDeletedItems(serverBackup.DeletedItems, deltaRequest.DeletedItems)
|
||||
s.applyDeletions(serverBackup, serverBackup.DeletedItems)
|
||||
log.Printf("Applied deletions: total=%d deletion records", len(serverBackup.DeletedItems))
|
||||
|
||||
// Merge client changes into server data
|
||||
serverBackup.Gyms = s.mergeGyms(serverBackup.Gyms, deltaRequest.Gyms)
|
||||
serverBackup.Problems = s.mergeProblems(serverBackup.Problems, deltaRequest.Problems)
|
||||
serverBackup.Sessions = s.mergeSessions(serverBackup.Sessions, deltaRequest.Sessions)
|
||||
serverBackup.Attempts = s.mergeAttempts(serverBackup.Attempts, deltaRequest.Attempts)
|
||||
serverBackup.DeletedItems = s.mergeDeletedItems(serverBackup.DeletedItems, deltaRequest.DeletedItems)
|
||||
|
||||
// Apply deletions to remove deleted items
|
||||
s.applyDeletions(serverBackup, serverBackup.DeletedItems)
|
||||
|
||||
// Save merged data
|
||||
if err := s.saveData(serverBackup); err != nil {
|
||||
@@ -553,8 +562,15 @@ func (s *SyncServer) handleDeltaSync(w http.ResponseWriter, r *http.Request) {
|
||||
// Parse client's last sync time
|
||||
clientLastSync, err := time.Parse(time.RFC3339, deltaRequest.LastSyncTime)
|
||||
if err != nil {
|
||||
// If parsing fails, send everything
|
||||
clientLastSync = time.Time{}
|
||||
log.Printf("Warning: Could not parse lastSyncTime '%s', sending all data", deltaRequest.LastSyncTime)
|
||||
}
|
||||
|
||||
// Build deleted item lookup map
|
||||
deletedItemMap := make(map[string]bool)
|
||||
for _, item := range serverBackup.DeletedItems {
|
||||
key := item.Type + ":" + item.ID
|
||||
deletedItemMap[key] = true
|
||||
}
|
||||
|
||||
// Prepare response with items modified since client's last sync
|
||||
@@ -569,6 +585,9 @@ func (s *SyncServer) handleDeltaSync(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// Filter gyms modified after client's last sync
|
||||
for _, gym := range serverBackup.Gyms {
|
||||
if deletedItemMap["gym:"+gym.ID] {
|
||||
continue
|
||||
}
|
||||
gymTime, err := time.Parse(time.RFC3339, gym.UpdatedAt)
|
||||
if err == nil && gymTime.After(clientLastSync) {
|
||||
response.Gyms = append(response.Gyms, gym)
|
||||
@@ -577,6 +596,9 @@ func (s *SyncServer) handleDeltaSync(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// Filter problems modified after client's last sync
|
||||
for _, problem := range serverBackup.Problems {
|
||||
if deletedItemMap["problem:"+problem.ID] {
|
||||
continue
|
||||
}
|
||||
problemTime, err := time.Parse(time.RFC3339, problem.UpdatedAt)
|
||||
if err == nil && problemTime.After(clientLastSync) {
|
||||
response.Problems = append(response.Problems, problem)
|
||||
@@ -585,6 +607,9 @@ func (s *SyncServer) handleDeltaSync(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// Filter sessions modified after client's last sync
|
||||
for _, session := range serverBackup.Sessions {
|
||||
if deletedItemMap["session:"+session.ID] {
|
||||
continue
|
||||
}
|
||||
sessionTime, err := time.Parse(time.RFC3339, session.UpdatedAt)
|
||||
if err == nil && sessionTime.After(clientLastSync) {
|
||||
response.Sessions = append(response.Sessions, session)
|
||||
@@ -593,6 +618,9 @@ func (s *SyncServer) handleDeltaSync(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// Filter attempts created after client's last sync
|
||||
for _, attempt := range serverBackup.Attempts {
|
||||
if deletedItemMap["attempt:"+attempt.ID] {
|
||||
continue
|
||||
}
|
||||
attemptTime, err := time.Parse(time.RFC3339, attempt.CreatedAt)
|
||||
if err == nil && attemptTime.After(clientLastSync) {
|
||||
response.Attempts = append(response.Attempts, attempt)
|
||||
|
||||
Reference in New Issue
Block a user