NAM-APJATEL-BACKEND/usecase/backbone_usecase.go

92 lines
2.1 KiB
Go

package usecase
import (
"fmt"
"time"
"users_management/m/model/dto/req"
"users_management/m/model/entity"
"users_management/m/repository"
"github.com/go-playground/validator/v10"
"github.com/google/uuid"
)
type BackboneUseCase interface {
CreateBackbone(backbone req.BackboneDTO) error
GetAllBackbone() ([]entity.Backbone, error)
GetByID(id uuid.UUID) (entity.Backbone, error)
UpdateBackbone(id uuid.UUID, backbone req.UpdateBackboneDTO) error
}
type backboneUseCase struct {
backboneRepo repository.BackboneRepo
validate *validator.Validate
}
func NewBackboneUseCase(backboneRepo repository.BackboneRepo) BackboneUseCase {
return &backboneUseCase{
backboneRepo: backboneRepo,
validate: validator.New(),
}
}
func (u *backboneUseCase) CreateBackbone(backbone req.BackboneDTO) error {
err := u.validate.Struct(backbone)
if err != nil {
return fmt.Errorf("validation error: %w", err)
}
newBackbone := entity.Backbone{
ID: uuid.New(),
DeviceStartID: backbone.DeviceStartID,
DeviceEndID: backbone.DeviceEndID,
CoreAmount: backbone.CoreAmount,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
}
return u.backboneRepo.Post(newBackbone)
}
func (u *backboneUseCase) GetAllBackbone() ([]entity.Backbone, error) {
backbones, err := u.backboneRepo.GetAll()
if err != nil {
return backbones, err
}
return backbones, nil
}
func (u *backboneUseCase) GetByID(id uuid.UUID) (entity.Backbone, error) {
backbone, err := u.backboneRepo.GetByID(id)
if err != nil {
return backbone, err
}
return backbone, nil
}
func (u *backboneUseCase) UpdateBackbone(id uuid.UUID, backbone req.UpdateBackboneDTO) error {
err := u.validate.Struct(backbone)
if err != nil {
return fmt.Errorf("validation error: %w", err)
}
updates := make(map[string]interface{})
if backbone.DeviceStartID != nil {
updates["DeviceStartID"] = backbone.DeviceStartID
}
if backbone.DeviceEndID != nil {
updates["DeviceEndID"] = backbone.DeviceEndID
}
if backbone.CoreAmount != nil {
updates["CoreAmount"] = backbone.CoreAmount
}
updates["UpdatedAt"] = time.Now()
return u.backboneRepo.Update(id, updates)
}