init
This commit is contained in:
103
internal/repository/user_settings_repository.go
Normal file
103
internal/repository/user_settings_repository.go
Normal file
@@ -0,0 +1,103 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"accounting-app/internal/models"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// Common user settings repository errors
|
||||
var (
|
||||
ErrUserSettingsNotFound = errors.New("user settings not found")
|
||||
)
|
||||
|
||||
// UserSettingsRepository handles database operations for user settings
|
||||
type UserSettingsRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// NewUserSettingsRepository creates a new UserSettingsRepository instance
|
||||
func NewUserSettingsRepository(db *gorm.DB) *UserSettingsRepository {
|
||||
return &UserSettingsRepository{db: db}
|
||||
}
|
||||
|
||||
// GetOrCreate retrieves user settings or creates default settings if not found
|
||||
func (r *UserSettingsRepository) GetOrCreate(userID uint) (*models.UserSettings, error) {
|
||||
var settings models.UserSettings
|
||||
|
||||
// Try to get existing settings
|
||||
err := r.db.Where("user_id = ?", userID).First(&settings).Error
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
// Create default settings
|
||||
settings = models.UserSettings{
|
||||
UserID: &userID,
|
||||
PreciseTimeEnabled: true,
|
||||
IconLayout: string(models.IconLayoutFive),
|
||||
ImageCompression: string(models.ImageCompressionMedium),
|
||||
ShowReimbursementBtn: true,
|
||||
ShowRefundBtn: true,
|
||||
CurrentLedgerID: nil,
|
||||
}
|
||||
|
||||
if err := r.db.Create(&settings).Error; err != nil {
|
||||
return nil, fmt.Errorf("failed to create default settings: %w", err)
|
||||
}
|
||||
|
||||
return &settings, nil
|
||||
}
|
||||
return nil, fmt.Errorf("failed to get settings: %w", err)
|
||||
}
|
||||
|
||||
return &settings, nil
|
||||
}
|
||||
|
||||
// Update updates existing user settings
|
||||
func (r *UserSettingsRepository) Update(settings *models.UserSettings) error {
|
||||
if err := r.db.Save(settings).Error; err != nil {
|
||||
return fmt.Errorf("failed to update settings: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetWithDefaultAccounts retrieves user settings with preloaded default account relationships
|
||||
// Feature: financial-core-upgrade
|
||||
// Validates: Requirements 5.1, 5.2
|
||||
// GetWithDefaultAccounts retrieves user settings with preloaded default account relationships
|
||||
// Feature: financial-core-upgrade
|
||||
// Validates: Requirements 5.1, 5.2
|
||||
func (r *UserSettingsRepository) GetWithDefaultAccounts(userID uint) (*models.UserSettings, error) {
|
||||
var settings models.UserSettings
|
||||
|
||||
err := r.db.Where("user_id = ?", userID).
|
||||
Preload("DefaultExpenseAccount").
|
||||
Preload("DefaultIncomeAccount").
|
||||
First(&settings).Error
|
||||
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
// Create default settings
|
||||
settings = models.UserSettings{
|
||||
UserID: &userID,
|
||||
PreciseTimeEnabled: true,
|
||||
IconLayout: string(models.IconLayoutFive),
|
||||
ImageCompression: string(models.ImageCompressionMedium),
|
||||
ShowReimbursementBtn: true,
|
||||
ShowRefundBtn: true,
|
||||
CurrentLedgerID: nil,
|
||||
}
|
||||
|
||||
if err := r.db.Create(&settings).Error; err != nil {
|
||||
return nil, fmt.Errorf("failed to create default settings: %w", err)
|
||||
}
|
||||
|
||||
return &settings, nil
|
||||
}
|
||||
return nil, fmt.Errorf("failed to get settings with default accounts: %w", err)
|
||||
}
|
||||
|
||||
return &settings, nil
|
||||
}
|
||||
Reference in New Issue
Block a user