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 TowerUseCase interface { Post(tower req.TowerDTO) error GetAll() ([]entity.Tower, error) GetByID(id string) (entity.Tower, error) } type towerUsecase struct { towerRepo repository.TowerRepo validate *validator.Validate } func NewTowerUseCase(towerRepo repository.TowerRepo) TowerUseCase { return &towerUsecase{ towerRepo: towerRepo, validate: validator.New(), } } func (u *towerUsecase) Post(tower req.TowerDTO) error { err := u.validate.Struct(tower) if err != nil { return err } newTower := entity.Tower{ ID: uuid.New(), DeviceID: tower.DeviceID, TowerCode: tower.TowerCode, Longitude: tower.Longitude, Latitude: tower.Latitude, CreatedAt: time.Now(), UpdatedAt: time.Now(), } return u.towerRepo.Post(newTower) } func (u *towerUsecase) GetAll() ([]entity.Tower, error) { towers, err := u.towerRepo.GetAll() if err != nil { return towers, err } return towers, nil } func (u *towerUsecase) GetByID(id string) (entity.Tower, error) { tower, err := u.towerRepo.GetByID(id) if err != nil { return tower, err } return tower, nil }