package usecase import ( "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 DevicePortUseCase interface { CreateDevicePort(devicePort req.DevicePort) error GetAllDevicePort() ([]entity.DevicePort, error) GetByID(id uuid.UUID) (entity.DevicePort, error) UpdateDevicePort(id uuid.UUID, devicePort req.UpdateDevicePort) error } type devicePortUseCase struct { devicePortRepo repository.DevicePortRepo validate *validator.Validate } func NewDevicePortUseCase(devicePortRepo repository.DevicePortRepo) DevicePortUseCase { return &devicePortUseCase{ devicePortRepo: devicePortRepo, validate: validator.New(), } } func (u *devicePortUseCase) CreateDevicePort(devicePort req.DevicePort) error { err := u.validate.Struct(devicePort) if err != nil { return err } newDevicePort := entity.DevicePort{ ID: uuid.New(), DeviceID: devicePort.DeviceID, CreatedAt: time.Now(), UpdatedAt: time.Now(), } return u.devicePortRepo.Post(newDevicePort) } func (u *devicePortUseCase) GetAllDevicePort() ([]entity.DevicePort, error) { devicePorts, err := u.devicePortRepo.GetAll() if err != nil { return devicePorts, err } return devicePorts, nil } func (u *devicePortUseCase) GetByID(id uuid.UUID) (entity.DevicePort, error) { devicePort, err := u.devicePortRepo.GetByID(id) if err != nil { return devicePort, err } return devicePort, nil } func (u *devicePortUseCase) UpdateDevicePort(id uuid.UUID, devicePort req.UpdateDevicePort) error { err := u.validate.Struct(devicePort) if err != nil { return err } updates := make(map[string]interface{}) if devicePort.DeviceID != nil { updates["DeviceID"] = *devicePort.DeviceID } if devicePort.PortNumber != nil { updates["PortNumber"] = *devicePort.PortNumber } updates["UpdatedAt"] = time.Now() return u.devicePortRepo.Update(id, updates) }