package repositories import ( "app/models" "gorm.io/gorm" ) type Product interface { Create(p *models.Product) error GetByName(name string) ([]models.Product, error) GetByID(id uint) (*models.Product, error) GetByCategory(category string) ([]models.Product, error) GetQuantity(id uint) (uint, error) UpdateName(name string, id uint) error UpdateDescription(content string, id uint) error UpdateWarranty(name string, id uint) error UpdateQuantity(quantity uint, id uint) error UpdateCategory(category string, id uint) error UpdatePrice(price uint64, id uint) error Delete(id uint) error } type Product_repository struct { DB *gorm.DB } func newProductRepository(db *gorm.DB) Product { return &Product_repository{DB: db} } func (r *Product_repository) Create(p *models.Product) error { if err := r.DB.Create(&p).Error; err != nil { return err } return nil } func (r *Product_repository) GetByName(name string) ([]models.Product, error) { var product []models.Product if err := r.DB.Where("is_removed = ?", false).Where("name = ? ", name).Find(&product).Error; err != nil { return nil, err } return product, nil } func (r *Product_repository) GetByID(id uint) (*models.Product, error) { var product models.Product if err := r.DB.Where("is_removed = ?", false).Where("product_id = ? ", id).First(&product).Error; err != nil { return nil, err } return &product, nil } func (r *Product_repository) GetByCategory(category string) ([]models.Product, error) { var product []models.Product if err := r.DB.Where("is_removed = ?", false).Where("category = ?", category).Find(&product).Error; err != nil { return nil, err } return product, nil } func (r *Product_repository) GetQuantity(id uint) (uint, error) { var product models.Product if err := r.DB.Where("is_removed = ?", false).Where("product_id = ?", id).First(&product).Error; err != nil { return 0, err } return product.Quantity, nil } func (r *Product_repository) UpdateName(name string, id uint) error { var product models.Product if err := r.DB.Where("is_removed = ? ", false).Where("product_id = ?", id).Model(&product).Update("name", name).Error; err != nil { return err } return nil } func (r *Product_repository) UpdateDescription(content string, id uint) error { var product models.Product if err := r.DB.Where("is_removed = ? ", false).Where("product_id = ?", id).Model(&product).Update("description", content).Error; err != nil { return err } return nil } func (r *Product_repository) UpdateWarranty(name string, id uint) error { var product models.Product if err := r.DB.Where("is_removed = ? ", false).Where("product_id = ?", id).Model(&product).Update("warranty", name).Error; err != nil { return err } return nil } func (r *Product_repository) UpdateQuantity(quantity uint, id uint) error { var product models.Product if err := r.DB.Where("is_removed = ? ", false).Where("product_id = ?", id).Model(&product).Update("quantity", quantity).Error; err != nil { return err } return nil } func (r *Product_repository) UpdateCategory(category string, id uint) error { var product models.Product if err := r.DB.Where("is_removed = ? ", false).Where("product_id = ?", id).Model(&product).Update("category", category).Error; err != nil { return err } return nil } func (r *Product_repository) UpdatePrice(price uint64, id uint) error { var product models.Product if err := r.DB.Where("is_removed = ? ", false).Where("product_id = ?", id).Model(&product).Update("price", price).Error; err != nil { return err } return nil } func (r *Product_repository) Delete(id uint) error { var product models.Product if err := r.DB.Where("product_id = ?", id).Model(&product).Update("is_removed", true).Error; err != nil { return err } return nil }