BE-MiniERP/modules/inventory/repository/product__repo.go

62 lines
1.5 KiB
Go

package repository
import (
"BE-MiniERP/modules/inventory/models"
"fmt"
"gorm.io/gorm"
)
type ProductRepository struct {
DB *gorm.DB
}
func NewProductRepository(db *gorm.DB) *ProductRepository {
return &ProductRepository{DB: db}
}
func (r *ProductRepository) FindAll() ([]models.Product, error) {
var products []models.Product
err := r.DB.
Preload("Category").
Preload("Collection").
Preload("Colour").
Preload("Size").
Find(&products).Error
return products, err
}
func (r *ProductRepository) Create(product *models.Product) error {
return r.DB.Create(product).Error
}
func (r *ProductRepository) Update(id uint, product *models.Product) error {
return r.DB.Model(&models.Product{}).Where("id = ?", id).Updates(product).Error
}
func (r *ProductRepository) Delete(id uint) error {
return r.DB.Delete(&models.Product{}, id).Error
}
func (r *ProductRepository) PreloadRelations(product *models.Product) error {
// Collection
if err := r.DB.First(&product.Collection, product.CollectionID).Error; err != nil {
return fmt.Errorf("collection not found: %w", err)
}
// Category
if err := r.DB.First(&product.Category, product.CategoryID).Error; err != nil {
return fmt.Errorf("category not found: %w", err)
}
// Colour
if err := r.DB.First(&product.Colour, product.ColourID).Error; err != nil {
return fmt.Errorf("colour not found: %w", err)
}
// Size
if err := r.DB.First(&product.Size, product.SizeID).Error; err != nil {
return fmt.Errorf("size not found: %w", err)
}
return nil
}