adding additional responses for geocoding
This commit is contained in:
parent
90d5f4f04a
commit
bc6e1f7398
|
|
@ -39,7 +39,7 @@ func (um *usecaseManager) NewAuthUsecase() usecase.AuthUsecase {
|
|||
}
|
||||
|
||||
func (um *usecaseManager) NewDeviceUsecase() usecase.DeviceUseCase {
|
||||
return usecase.NewDeviceUseCase(um.repo.NewDeviceRepository())
|
||||
return usecase.NewDeviceUseCase(um.repo.NewDeviceRepository(),um.geocoder)
|
||||
}
|
||||
|
||||
func (um *usecaseManager) NewBackboneUsecase() usecase.BackboneUseCase {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
package res
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type DeviceResponse struct {
|
||||
ID uuid.UUID `json:"id"`
|
||||
DeviceCode string `json:"device_code"`
|
||||
DeviceType string `json:"device_type"`
|
||||
Longitude float64 `json:"longitude"`
|
||||
Latitude float64 `json:"latitude"`
|
||||
Address string `json:"address"`
|
||||
PortAmount int `json:"port_amount"`
|
||||
Status string `json:"status"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@ import (
|
|||
"users_management/m/model/entity"
|
||||
"users_management/m/repository"
|
||||
"users_management/m/utils/helper"
|
||||
"users_management/m/utils/service"
|
||||
|
||||
"github.com/go-playground/validator/v10"
|
||||
"github.com/google/uuid"
|
||||
|
|
@ -15,9 +16,9 @@ import (
|
|||
|
||||
type DeviceUseCase interface {
|
||||
CreateDevice(device req.DeviceDTO) error
|
||||
GetAllDevices() ([]entity.Device, error)
|
||||
GetAllDevices() ([]res.DeviceResponse, error)
|
||||
|
||||
GetByID(id uuid.UUID) (entity.Device, error)
|
||||
GetByID(id uuid.UUID) (res.DeviceResponse, error)
|
||||
UpdateDevice(id uuid.UUID, device req.UpdateDeviceDTO) error
|
||||
GetByType(deviceType string) ([]res.DeviceTypeResponse, error)
|
||||
}
|
||||
|
|
@ -25,11 +26,13 @@ type DeviceUseCase interface {
|
|||
type deviceUseCase struct {
|
||||
deviceRepo repository.DevicesRepo
|
||||
validate *validator.Validate
|
||||
geocoder service.GeocodingService
|
||||
}
|
||||
|
||||
func NewDeviceUseCase(deviceRepo repository.DevicesRepo) DeviceUseCase {
|
||||
func NewDeviceUseCase(deviceRepo repository.DevicesRepo, geocoder service.GeocodingService) DeviceUseCase {
|
||||
return &deviceUseCase{
|
||||
deviceRepo: deviceRepo,
|
||||
geocoder: geocoder,
|
||||
validate: validator.New(),
|
||||
}
|
||||
}
|
||||
|
|
@ -55,20 +58,29 @@ func (u *deviceUseCase) CreateDevice(device req.DeviceDTO) error {
|
|||
return u.deviceRepo.Post(newDevice)
|
||||
}
|
||||
|
||||
func (u *deviceUseCase) GetAllDevices() ([]entity.Device, error) {
|
||||
func (u *deviceUseCase) GetAllDevices() ([]res.DeviceResponse, error) {
|
||||
devices, err := u.deviceRepo.GetAll()
|
||||
if err != nil {
|
||||
return devices, err
|
||||
return []res.DeviceResponse{}, err
|
||||
}
|
||||
return devices, nil
|
||||
devicesResponse,err := helper.ConvertToDeviceResponse(devices, u.geocoder)
|
||||
if err != nil {
|
||||
return []res.DeviceResponse{}, err
|
||||
}
|
||||
return devicesResponse, nil
|
||||
}
|
||||
|
||||
func (u *deviceUseCase) GetByID(id uuid.UUID) (entity.Device, error) {
|
||||
func (u *deviceUseCase) GetByID(id uuid.UUID) (res.DeviceResponse, error) {
|
||||
device, err := u.deviceRepo.GetByID(id)
|
||||
if err != nil {
|
||||
return device, err
|
||||
return res.DeviceResponse{}, err
|
||||
}
|
||||
return device, nil
|
||||
|
||||
deviceResp, err := helper.ConvertToDeviceResponseId(device, u.geocoder)
|
||||
if err != nil {
|
||||
return res.DeviceResponse{}, err
|
||||
}
|
||||
return deviceResp, nil
|
||||
}
|
||||
|
||||
func (u *deviceUseCase) UpdateDevice(id uuid.UUID, device req.UpdateDeviceDTO) error {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import (
|
|||
type TowerUseCase interface {
|
||||
Post(tower req.TowerDTO) error
|
||||
GetAll() ([]res.TowerResponse, error)
|
||||
GetByID(id uuid.UUID) (entity.Tower, error)
|
||||
GetByID(id uuid.UUID) (res.TowerResponse, error)
|
||||
UpdateTower(id uuid.UUID, tower req.UpdateTowerDTO) error
|
||||
}
|
||||
|
||||
|
|
@ -67,12 +67,17 @@ func (u *towerUsecase) GetAll() ([]res.TowerResponse, error) {
|
|||
}
|
||||
|
||||
|
||||
func (u *towerUsecase) GetByID(id uuid.UUID) (entity.Tower, error) {
|
||||
func (u *towerUsecase) GetByID(id uuid.UUID) (res.TowerResponse, error) {
|
||||
tower, err := u.towerRepo.GetByID(id)
|
||||
if err != nil {
|
||||
return tower, err
|
||||
return res.TowerResponse{}, err
|
||||
}
|
||||
return tower, nil
|
||||
|
||||
towerResp, err := helper.ConvertToTowerIDResponses(tower,u.geocoder)
|
||||
if err != nil {
|
||||
return res.TowerResponse{}, err
|
||||
}
|
||||
return towerResp, nil
|
||||
}
|
||||
|
||||
func (u *towerUsecase) UpdateTower(id uuid.UUID, tower req.UpdateTowerDTO) error {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
package helper
|
||||
|
||||
import (
|
||||
"log"
|
||||
"users_management/m/model/dto/res"
|
||||
"users_management/m/model/entity"
|
||||
"users_management/m/utils/service"
|
||||
)
|
||||
|
||||
func ConvertToDeviceTypeResponse(devices []entity.Device) []res.DeviceTypeResponse {
|
||||
|
|
@ -18,3 +20,70 @@ func ConvertToDeviceTypeResponse(devices []entity.Device) []res.DeviceTypeRespon
|
|||
|
||||
return responses
|
||||
}
|
||||
|
||||
|
||||
func ConvertToDeviceResponse (devices []entity.Device, geocoder service.GeocodingService) ([]res.DeviceResponse, error) {
|
||||
var responses []res.DeviceResponse
|
||||
for _, devices := range devices {
|
||||
var address string
|
||||
|
||||
if geocoder != nil {
|
||||
generatedAddress, err := geocoder.GetAddressFromCoordinates(devices.Latitude, devices.Longitude)
|
||||
if err != nil {
|
||||
// Log specific geocoding error
|
||||
log.Printf("Geocoding error for device %s: %v", devices.DeviceCode, err)
|
||||
} else {
|
||||
address = generatedAddress
|
||||
}
|
||||
} else{
|
||||
log.Println("WARNING: Geocoder is nil")
|
||||
}
|
||||
|
||||
deviceResp := res.DeviceResponse{
|
||||
ID: devices.ID,
|
||||
DeviceCode: devices.DeviceCode,
|
||||
DeviceType: string(devices.DeviceType),
|
||||
Longitude: devices.Longitude,
|
||||
Latitude: devices.Latitude,
|
||||
Address: address,
|
||||
PortAmount: devices.PortAmount,
|
||||
Status: string(devices.Status),
|
||||
CreatedAt: devices.CreatedAt,
|
||||
UpdatedAt: devices.UpdatedAt,
|
||||
}
|
||||
responses = append(responses, deviceResp)
|
||||
}
|
||||
|
||||
return responses, nil
|
||||
}
|
||||
|
||||
func ConvertToDeviceResponseId (devices entity.Device, geocoder service.GeocodingService) (res.DeviceResponse, error) {
|
||||
var address string
|
||||
|
||||
if geocoder != nil {
|
||||
generatedAddress, err := geocoder.GetAddressFromCoordinates(devices.Latitude, devices.Longitude)
|
||||
if err != nil {
|
||||
// Log specific geocoding error
|
||||
log.Printf("Geocoding error for device %s: %v", devices.DeviceCode, err)
|
||||
} else {
|
||||
address = generatedAddress
|
||||
}
|
||||
} else{
|
||||
log.Println("WARNING: Geocoder is nil")
|
||||
}
|
||||
|
||||
deviceResp := res.DeviceResponse{
|
||||
ID: devices.ID,
|
||||
DeviceCode: devices.DeviceCode,
|
||||
DeviceType: string(devices.DeviceType),
|
||||
Longitude: devices.Longitude,
|
||||
Latitude: devices.Latitude,
|
||||
Address: address,
|
||||
PortAmount: devices.PortAmount,
|
||||
Status: string(devices.Status),
|
||||
CreatedAt: devices.CreatedAt,
|
||||
UpdatedAt: devices.UpdatedAt,
|
||||
}
|
||||
|
||||
return deviceResp, nil
|
||||
}
|
||||
|
|
@ -39,3 +39,30 @@ func ConvertToTowerResponses(towers []entity.Tower, geocoder service.GeocodingSe
|
|||
}
|
||||
return responses, nil
|
||||
}
|
||||
|
||||
func ConvertToTowerIDResponses(tower entity.Tower, geocoder service.GeocodingService) (res.TowerResponse, error) {
|
||||
var address string
|
||||
|
||||
if geocoder != nil {
|
||||
generatedAddress, err := geocoder.GetAddressFromCoordinates(tower.Latitude, tower.Longitude)
|
||||
if err != nil {
|
||||
// Log specific geocoding error
|
||||
log.Printf("Geocoding error for tower %s: %v", tower.TowerCode, err)
|
||||
} else {
|
||||
address = generatedAddress
|
||||
}
|
||||
} else {
|
||||
log.Println("WARNING: Geocoder is nil")
|
||||
}
|
||||
|
||||
towerResp := res.TowerResponse{
|
||||
ID: tower.ID,
|
||||
DeviceCode: tower.Device.DeviceCode,
|
||||
TowerCode: tower.TowerCode,
|
||||
Longitude: tower.Longitude,
|
||||
Latitude: tower.Latitude,
|
||||
Address: address,
|
||||
CreatedAt: tower.CreatedAt,
|
||||
}
|
||||
return towerResp, nil
|
||||
}
|
||||
Loading…
Reference in New Issue