init
This commit is contained in:
119
internal/repository/user_preference_repository.go
Normal file
119
internal/repository/user_preference_repository.go
Normal file
@@ -0,0 +1,119 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"accounting-app/internal/models"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// User preference repository errors
|
||||
var (
|
||||
ErrUserPreferenceNotFound = errors.New("user preference not found")
|
||||
)
|
||||
|
||||
// UserPreferenceRepository handles database operations for user preferences
|
||||
type UserPreferenceRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// NewUserPreferenceRepository creates a new UserPreferenceRepository instance
|
||||
func NewUserPreferenceRepository(db *gorm.DB) *UserPreferenceRepository {
|
||||
return &UserPreferenceRepository{db: db}
|
||||
}
|
||||
|
||||
// Create creates a new user preference record
|
||||
func (r *UserPreferenceRepository) Create(pref *models.UserPreference) error {
|
||||
return r.db.Create(pref).Error
|
||||
}
|
||||
|
||||
// GetByUserID retrieves user preference by user ID
|
||||
func (r *UserPreferenceRepository) GetByUserID(userID uint) (*models.UserPreference, error) {
|
||||
var pref models.UserPreference
|
||||
err := r.db.Where("user_id = ?", userID).First(&pref).Error
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, ErrUserPreferenceNotFound
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return &pref, nil
|
||||
}
|
||||
|
||||
// GetOrCreate retrieves user preference or creates a new one if not exists
|
||||
func (r *UserPreferenceRepository) GetOrCreate(userID uint) (*models.UserPreference, error) {
|
||||
pref, err := r.GetByUserID(userID)
|
||||
if err == nil {
|
||||
return pref, nil
|
||||
}
|
||||
if !errors.Is(err, ErrUserPreferenceNotFound) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Create new preference
|
||||
newPref := &models.UserPreference{
|
||||
UserID: &userID,
|
||||
}
|
||||
if err := r.Create(newPref); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return newPref, nil
|
||||
}
|
||||
|
||||
// Update updates an existing user preference
|
||||
func (r *UserPreferenceRepository) Update(pref *models.UserPreference) error {
|
||||
return r.db.Save(pref).Error
|
||||
}
|
||||
|
||||
// UpdateLastAccount updates the last used account ID
|
||||
func (r *UserPreferenceRepository) UpdateLastAccount(userID uint, accountID uint) error {
|
||||
pref, err := r.GetOrCreate(userID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
pref.LastAccountID = &accountID
|
||||
return r.Update(pref)
|
||||
}
|
||||
|
||||
// UpdateLastCategory updates the last used category ID
|
||||
func (r *UserPreferenceRepository) UpdateLastCategory(userID uint, categoryID uint) error {
|
||||
pref, err := r.GetOrCreate(userID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
pref.LastCategoryID = &categoryID
|
||||
return r.Update(pref)
|
||||
}
|
||||
|
||||
// UpdateFrequentAccounts updates the frequent accounts list
|
||||
func (r *UserPreferenceRepository) UpdateFrequentAccounts(userID uint, accountsJSON string) error {
|
||||
pref, err := r.GetOrCreate(userID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
pref.FrequentAccounts = accountsJSON
|
||||
return r.Update(pref)
|
||||
}
|
||||
|
||||
// UpdateFrequentCategories updates the frequent categories list
|
||||
func (r *UserPreferenceRepository) UpdateFrequentCategories(userID uint, categoriesJSON string) error {
|
||||
pref, err := r.GetOrCreate(userID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
pref.FrequentCategories = categoriesJSON
|
||||
return r.Update(pref)
|
||||
}
|
||||
|
||||
// Delete deletes a user preference record
|
||||
func (r *UserPreferenceRepository) Delete(userID uint) error {
|
||||
result := r.db.Where("user_id = ?", userID).Delete(&models.UserPreference{})
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return ErrUserPreferenceNotFound
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user