63 lines
1.7 KiB
Go
Executable file
63 lines
1.7 KiB
Go
Executable file
package workers
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
db "git.zervo.org/scheduletogether/scheduletogetherbackend/internal/database"
|
|
)
|
|
|
|
func workerSchedules_PurgeAbandonedData() {
|
|
reporter := NewReporter("Schedules", "PurgeAbandonedData")
|
|
|
|
// Start a transaction
|
|
tx := db.Db.Begin()
|
|
|
|
// Get all schedule entries
|
|
reporter.Status("1/2: Get all schedule entries")
|
|
var schedules []db.Schedule
|
|
err := tx.Model(&db.Schedule{}).Find(&schedules).Error
|
|
if err != nil {
|
|
tx.Rollback()
|
|
reporter.Fail("Failed to retrieve schedule entries from the database: " + err.Error())
|
|
return
|
|
}
|
|
reporter.Status(fmt.Sprintf("Found %d schedule entries", len(schedules)))
|
|
|
|
// Loop over schedule entries
|
|
reporter.Status("2/2: Purge abandoned schedule entries")
|
|
var purged int
|
|
for _, schedule := range schedules {
|
|
// Get source user
|
|
var sourceUser db.User
|
|
err = tx.Where("uuid = ?", schedule.Uuid).First(&sourceUser).Error
|
|
|
|
// If error, check if error is user not found
|
|
if err != nil {
|
|
if err == gorm.ErrRecordNotFound { // If error is "not found", delete schedule data entry
|
|
reporter.Status("Deleting abandoned schedule data for source user " + sourceUser.Username + " (" + schedule.Uuid + ")")
|
|
purged += 1
|
|
err := tx.Model(&db.Schedule{}).Delete(&schedule).Error
|
|
if err != nil {
|
|
tx.Rollback()
|
|
reporter.Fail("Failed to delete schedule data from the database: " + err.Error())
|
|
return
|
|
}
|
|
continue
|
|
}
|
|
}
|
|
reporter.Status(fmt.Sprintf("Purged %d abandoned schedule entries", purged))
|
|
}
|
|
|
|
// Commit the transaction if everything is successful
|
|
err = tx.Commit().Error
|
|
if err != nil {
|
|
tx.Rollback()
|
|
reporter.Fail("Failed to commit transaction: " + err.Error())
|
|
return
|
|
}
|
|
|
|
// Finish job
|
|
reporter.Finish()
|
|
}
|