From 8f3dd068c914d1588522f5a37c2021f305398385 Mon Sep 17 00:00:00 2001 From: Mo Tarbin Date: Fri, 17 Jan 2025 00:53:31 -0500 Subject: [PATCH 1/2] Add description field to ChoreDetail model and repository methods --- internal/chore/model/model.go | 1 + internal/chore/repo/repository.go | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/internal/chore/model/model.go b/internal/chore/model/model.go index 9e1abe8..1346c08 100644 --- a/internal/chore/model/model.go +++ b/internal/chore/model/model.go @@ -120,6 +120,7 @@ type Tag struct { type ChoreDetail struct { ID int `json:"id" gorm:"column:id"` Name string `json:"name" gorm:"column:name"` + Description *string `json:"description" gorm:"column:description"` FrequencyType string `json:"frequencyType" gorm:"column:frequency_type"` NextDueDate *time.Time `json:"nextDueDate" gorm:"column:next_due_date"` AssignedTo int `json:"assignedTo" gorm:"column:assigned_to"` diff --git a/internal/chore/repo/repository.go b/internal/chore/repo/repository.go index 3b6d124..014674e 100644 --- a/internal/chore/repo/repository.go +++ b/internal/chore/repo/repository.go @@ -70,8 +70,18 @@ func (r *ChoreRepository) GetArchivedChores(c context.Context, circleID int, use return chores, nil } func (r *ChoreRepository) DeleteChore(c context.Context, id int) error { - r.db.WithContext(c).Where("chore_id = ?", id).Delete(&chModel.ChoreAssignees{}) - return r.db.WithContext(c).Delete(&chModel.Chore{}, id).Error + return r.db.WithContext(c).Transaction(func(tx *gorm.DB) error { + if err := tx.Where("chore_id = ?", id).Delete(&chModel.ChoreAssignees{}).Error; err != nil { + return err + } + if err := tx.Delete(&chModel.ChoreHistory{}, "chore_id = ?", id).Error; err != nil { + return err + } + if err := tx.Delete(&chModel.Chore{}, id).Error; err != nil { + return err + } + return nil + }) } func (r *ChoreRepository) SoftDelete(c context.Context, id int, userID int) error { @@ -154,6 +164,9 @@ func (r *ChoreRepository) UpdateChoreHistory(c context.Context, history *chModel func (r *ChoreRepository) DeleteChoreHistory(c context.Context, historyID int) error { return r.db.WithContext(c).Delete(&chModel.ChoreHistory{}, historyID).Error } +func (r *ChoreRepository) DeleteChoreHistoryByChoreID(c context.Context, tx, choreID int) error { + return r.db.WithContext(c).Delete(&chModel.ChoreHistory{}, "chore_id = ?", choreID).Error +} func (r *ChoreRepository) UpdateChoreAssignees(c context.Context, assignees []*chModel.ChoreAssignees) error { return r.db.WithContext(c).Save(&assignees).Error @@ -264,7 +277,8 @@ func (r *ChoreRepository) GetChoreDetailByID(c context.Context, choreID int, cir Table("chores"). Select(` chores.id, - chores.name, + chores.name, + chores.description, chores.frequency_type, chores.next_due_date, chores.assigned_to, From c473627112e4952b4e52aef6984bfdb37b007fd0 Mon Sep 17 00:00:00 2001 From: Mo Tarbin Date: Sat, 18 Jan 2025 09:51:13 -0500 Subject: [PATCH 2/2] Add PointsHistory model for tracking points history --- internal/circle/repo/repository.go | 4 ++++ internal/database/migration.go | 2 ++ 2 files changed, 6 insertions(+) diff --git a/internal/circle/repo/repository.go b/internal/circle/repo/repository.go index 7b1af47..36aba93 100644 --- a/internal/circle/repo/repository.go +++ b/internal/circle/repo/repository.go @@ -7,6 +7,7 @@ import ( cModel "donetick.com/core/internal/circle/model" pModel "donetick.com/core/internal/points" uModel "donetick.com/core/internal/user/model" + "donetick.com/core/logging" "gorm.io/gorm" ) @@ -142,7 +143,9 @@ func (r *CircleRepository) AssignDefaultCircle(c context.Context, userID int) er } func (r *CircleRepository) RedeemPoints(c context.Context, circleID int, userID int, points int, createdBy int) error { + logger := logging.FromContext(c) err := r.db.Transaction(func(tx *gorm.DB) error { + if err := tx.Model(&cModel.UserCircle{}).Where("user_id = ? AND circle_id = ?", userID, circleID).Update("points_redeemed", gorm.Expr("points_redeemed + ?", points)).Error; err != nil { return err } @@ -159,6 +162,7 @@ func (r *CircleRepository) RedeemPoints(c context.Context, circleID int, userID return nil }) if err != nil { + logger.Error("Error redeeming points", err) return err } return nil diff --git a/internal/database/migration.go b/internal/database/migration.go index ba5946c..be0ea41 100644 --- a/internal/database/migration.go +++ b/internal/database/migration.go @@ -9,6 +9,7 @@ import ( chModel "donetick.com/core/internal/chore/model" cModel "donetick.com/core/internal/circle/model" nModel "donetick.com/core/internal/notifier/model" + pModel "donetick.com/core/internal/points" tModel "donetick.com/core/internal/thing/model" uModel "donetick.com/core/internal/user/model" // Pure go SQLite driver, checkout https://github.com/glebarez/sqlite for details migrations "donetick.com/core/migrations" @@ -35,6 +36,7 @@ func Migration(db *gorm.DB) error { chModel.Label{}, chModel.ChoreLabels{}, migrations.Migration{}, + pModel.PointsHistory{}, ); err != nil { return err }