donetick/migrations/20241212_migrate_chat_id_to_notification_target.go
Mo Tarbin adf5c0c0cd - Assign default circle to user when leaving a circle
- Support Pushover
- Support Disable Signup
- Migrate chatID to TargetID
2024-12-14 02:15:51 -05:00

62 lines
1.7 KiB
Go

package migrations
import (
"context"
"fmt"
nModel "donetick.com/core/internal/notifier/model"
uModel "donetick.com/core/internal/user/model"
"donetick.com/core/logging"
"gorm.io/gorm"
)
type MigrateChatIdToNotificationTarget20241212 struct{}
func (m MigrateChatIdToNotificationTarget20241212) ID() string {
return "20241212_migrate_chat_id_to_notification_target"
}
func (m MigrateChatIdToNotificationTarget20241212) Description() string {
return `Migrate Chat ID to notification target to support multiple notification targets and platform other than telegram`
}
func (m MigrateChatIdToNotificationTarget20241212) Down(ctx context.Context, db *gorm.DB) error {
return nil
}
func (m MigrateChatIdToNotificationTarget20241212) Up(ctx context.Context, db *gorm.DB) error {
log := logging.FromContext(ctx)
// Start a transaction
return db.Transaction(func(tx *gorm.DB) error {
// Get All Users
var users []uModel.User
if err := tx.Table("users").Find(&users).Error; err != nil {
log.Errorf("Failed to fetch users: %v", err)
}
var notificationTargets []uModel.UserNotificationTarget
for _, user := range users {
if user.ChatID == 0 {
continue
}
notificationTargets = append(notificationTargets, uModel.UserNotificationTarget{
UserID: user.ID,
TargetID: fmt.Sprint(user.ChatID),
Type: nModel.NotificationTypeTelegram,
})
}
// Insert all notification targets
if err := tx.Table("user_notification_targets").Create(&notificationTargets).Error; err != nil {
log.Errorf("Failed to insert notification targets: %v", err)
}
return nil
})
}
// Register this migration
func init() {
Register(MigrateChatIdToNotificationTarget20241212{})
}