aditya.siregar 67f1dbc850 init project
2024-05-28 14:14:55 +07:00

115 lines
2.0 KiB
Go

package entity
import (
"furtuna-be/internal/constants/product"
"time"
)
type Product struct {
ID int64
Name string
Type product.ProductType
Price float64
Status product.ProductStatus
Description string
Image string
BranchID int64
StockQty int64
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
CreatedBy int64
UpdatedBy int64
}
type ProductSearch struct {
Search string
Name string
Type product.ProductType
BranchID int64
Available product.ProductStock
Limit int
Offset int
}
type ProductList []*ProductDB
type ProductDB struct {
Product
}
func (b *Product) ToProductDB() *ProductDB {
return &ProductDB{
Product: *b,
}
}
func (ProductDB) TableName() string {
return "products"
}
func (e *ProductDB) ToProduct() *Product {
return &Product{
ID: e.ID,
Name: e.Name,
Type: e.Type,
Price: e.Price,
Status: e.Status,
Description: e.Description,
Image: e.Image,
BranchID: e.BranchID,
StockQty: e.StockQty,
CreatedAt: e.CreatedAt,
UpdatedAt: e.UpdatedAt,
DeletedAt: e.DeletedAt,
CreatedBy: e.CreatedBy,
UpdatedBy: e.UpdatedBy,
}
}
func (b *ProductList) ToProductList() []*Product {
var Products []*Product
for _, product := range *b {
Products = append(Products, product.ToProduct())
}
return Products
}
func (o *ProductDB) ToUpdatedProduct(updatedby int64, req Product) {
o.UpdatedBy = updatedby
if req.Name != "" {
o.Name = req.Name
}
if req.Type != "" {
o.Type = req.Type
}
if req.Price > 0 {
o.Price = req.Price
}
if req.Status != "" {
o.Status = req.Status
}
if req.Description != "" {
o.Description = req.Description
}
if req.Image != "" {
o.Image = req.Image
}
if req.StockQty > 0 {
o.StockQty = req.StockQty
}
}
func (o *ProductDB) SetDeleted(updatedby int64) {
currentTime := time.Now()
o.DeletedAt = &currentTime
o.UpdatedBy = updatedby
}