init project
This commit is contained in:
123
internal/services/product_service.go
Normal file
123
internal/services/product_service.go
Normal file
@@ -0,0 +1,123 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/dungnt11/senflow_app/internal/models"
|
||||
"github.com/dungnt11/senflow_app/internal/repositories"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// ProductService triển khai IProductService
|
||||
type ProductService struct {
|
||||
productRepo repositories.IProductRepository
|
||||
}
|
||||
|
||||
// NewProductService tạo một instance mới của ProductService
|
||||
func NewProductService(productRepo repositories.IProductRepository) *ProductService {
|
||||
return &ProductService{
|
||||
productRepo: productRepo,
|
||||
}
|
||||
}
|
||||
|
||||
// CreateProduct tạo một sản phẩm mới
|
||||
func (s *ProductService) CreateProduct(c *gin.Context) (map[string]interface{}, error) {
|
||||
var product models.Product
|
||||
if err := c.ShouldBindJSON(&product); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if product.Name == "" {
|
||||
return nil, errors.New("tên sản phẩm không được để trống")
|
||||
}
|
||||
|
||||
if product.Price <= 0 {
|
||||
return nil, errors.New("giá sản phẩm phải lớn hơn 0")
|
||||
}
|
||||
|
||||
if err := s.productRepo.Create(&product); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return map[string]interface{}{
|
||||
"message": "tạo sản phẩm thành công",
|
||||
"product": product,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// GetProduct lấy thông tin sản phẩm theo ID
|
||||
func (s *ProductService) GetProduct(id uint) (map[string]interface{}, error) {
|
||||
product, err := s.productRepo.FindByID(id)
|
||||
if err != nil {
|
||||
return nil, errors.New("không tìm thấy sản phẩm")
|
||||
}
|
||||
|
||||
return map[string]interface{}{
|
||||
"product": product,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// GetAllProducts lấy tất cả sản phẩm
|
||||
func (s *ProductService) GetAllProducts() (map[string]interface{}, error) {
|
||||
products, err := s.productRepo.FindAll()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return map[string]interface{}{
|
||||
"products": products,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// UpdateProduct cập nhật thông tin sản phẩm
|
||||
func (s *ProductService) UpdateProduct(id uint, c *gin.Context) (map[string]interface{}, error) {
|
||||
product, err := s.productRepo.FindByID(id)
|
||||
if err != nil {
|
||||
return nil, errors.New("không tìm thấy sản phẩm")
|
||||
}
|
||||
|
||||
var updatedProduct models.Product
|
||||
if err := c.ShouldBindJSON(&updatedProduct); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Cập nhật thông tin
|
||||
if updatedProduct.Name != "" {
|
||||
product.Name = updatedProduct.Name
|
||||
}
|
||||
if updatedProduct.Description != "" {
|
||||
product.Description = updatedProduct.Description
|
||||
}
|
||||
if updatedProduct.Price > 0 {
|
||||
product.Price = updatedProduct.Price
|
||||
}
|
||||
if updatedProduct.Quantity >= 0 {
|
||||
product.Quantity = updatedProduct.Quantity
|
||||
}
|
||||
|
||||
if err := s.productRepo.Update(product); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return map[string]interface{}{
|
||||
"message": "cập nhật sản phẩm thành công",
|
||||
"product": product,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// DeleteProduct xóa sản phẩm theo ID
|
||||
func (s *ProductService) DeleteProduct(id uint) (map[string]interface{}, error) {
|
||||
// Kiểm tra sản phẩm tồn tại
|
||||
_, err := s.productRepo.FindByID(id)
|
||||
if err != nil {
|
||||
return nil, errors.New("không tìm thấy sản phẩm")
|
||||
}
|
||||
|
||||
if err := s.productRepo.Delete(id); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return map[string]interface{}{
|
||||
"message": "xóa sản phẩm thành công",
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user