MIF_E31222379_BE/internal/repositories/trashcart_repo.go

101 lines
2.2 KiB
Go

package repositories
import (
"errors"
"log"
"rijig/config"
"rijig/model"
"gorm.io/gorm"
)
type CartRepository interface {
Create(cart *model.Cart) error
GetByUserID(userID string) (*model.Cart, error)
Update(cart *model.Cart) error
InsertCartItem(item *model.CartItem) error
UpdateCartItem(item *model.CartItem) error
DeleteCartItemByID(id string) error
Delete(cartID string) error
DeleteByUserID(userID string) error
}
type cartRepository struct {
db *gorm.DB
}
func NewCartRepository() CartRepository {
return &cartRepository{
db: config.DB,
}
}
func (r *cartRepository) Create(cart *model.Cart) error {
tx := r.db.Begin()
if err := tx.Create(cart).Error; err != nil {
tx.Rollback()
return err
}
return tx.Commit().Error
}
func (r *cartRepository) GetByUserID(userID string) (*model.Cart, error) {
var cart model.Cart
err := r.db.
Preload("CartItems.TrashCategory").
Where("user_id = ?", userID).
First(&cart).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
log.Printf("Error retrieving cart for user %s: %v", userID, err)
return nil, errors.New("failed to retrieve cart")
}
return &cart, nil
}
func (r *cartRepository) Update(cart *model.Cart) error {
err := r.db.Save(cart).Error
if err != nil {
log.Printf("Error updating cart %s: %v", cart.ID, err)
return errors.New("failed to update cart")
}
return nil
}
func (r *cartRepository) InsertCartItem(item *model.CartItem) error {
return r.db.Create(item).Error
}
func (r *cartRepository) UpdateCartItem(item *model.CartItem) error {
return r.db.Save(item).Error
}
func (r *cartRepository) DeleteCartItemByID(id string) error {
return r.db.Delete(&model.CartItem{}, "id = ?", id).Error
}
func (r *cartRepository) Delete(cartID string) error {
result := r.db.Where("id = ?", cartID).Delete(&model.Cart{})
if result.Error != nil {
log.Printf("Error deleting cart %s: %v", cartID, result.Error)
return errors.New("failed to delete cart")
}
if result.RowsAffected == 0 {
log.Printf("Cart with ID %s not found for deletion", cartID)
return errors.New("cart not found")
}
return nil
}
func (r *cartRepository) DeleteByUserID(userID string) error {
return r.db.Where("user_id = ?", userID).Delete(&model.Cart{}).Error
}