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 {
|
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 {
|
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/model/entity"
|
||||||
"users_management/m/repository"
|
"users_management/m/repository"
|
||||||
"users_management/m/utils/helper"
|
"users_management/m/utils/helper"
|
||||||
|
"users_management/m/utils/service"
|
||||||
|
|
||||||
"github.com/go-playground/validator/v10"
|
"github.com/go-playground/validator/v10"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
|
@ -15,9 +16,9 @@ import (
|
||||||
|
|
||||||
type DeviceUseCase interface {
|
type DeviceUseCase interface {
|
||||||
CreateDevice(device req.DeviceDTO) error
|
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
|
UpdateDevice(id uuid.UUID, device req.UpdateDeviceDTO) error
|
||||||
GetByType(deviceType string) ([]res.DeviceTypeResponse, error)
|
GetByType(deviceType string) ([]res.DeviceTypeResponse, error)
|
||||||
}
|
}
|
||||||
|
|
@ -25,11 +26,13 @@ type DeviceUseCase interface {
|
||||||
type deviceUseCase struct {
|
type deviceUseCase struct {
|
||||||
deviceRepo repository.DevicesRepo
|
deviceRepo repository.DevicesRepo
|
||||||
validate *validator.Validate
|
validate *validator.Validate
|
||||||
|
geocoder service.GeocodingService
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDeviceUseCase(deviceRepo repository.DevicesRepo) DeviceUseCase {
|
func NewDeviceUseCase(deviceRepo repository.DevicesRepo, geocoder service.GeocodingService) DeviceUseCase {
|
||||||
return &deviceUseCase{
|
return &deviceUseCase{
|
||||||
deviceRepo: deviceRepo,
|
deviceRepo: deviceRepo,
|
||||||
|
geocoder: geocoder,
|
||||||
validate: validator.New(),
|
validate: validator.New(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -55,20 +58,29 @@ func (u *deviceUseCase) CreateDevice(device req.DeviceDTO) error {
|
||||||
return u.deviceRepo.Post(newDevice)
|
return u.deviceRepo.Post(newDevice)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *deviceUseCase) GetAllDevices() ([]entity.Device, error) {
|
func (u *deviceUseCase) GetAllDevices() ([]res.DeviceResponse, error) {
|
||||||
devices, err := u.deviceRepo.GetAll()
|
devices, err := u.deviceRepo.GetAll()
|
||||||
if err != nil {
|
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)
|
device, err := u.deviceRepo.GetByID(id)
|
||||||
if err != nil {
|
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 {
|
func (u *deviceUseCase) UpdateDevice(id uuid.UUID, device req.UpdateDeviceDTO) error {
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ import (
|
||||||
type TowerUseCase interface {
|
type TowerUseCase interface {
|
||||||
Post(tower req.TowerDTO) error
|
Post(tower req.TowerDTO) error
|
||||||
GetAll() ([]res.TowerResponse, 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
|
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)
|
tower, err := u.towerRepo.GetByID(id)
|
||||||
if err != nil {
|
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 {
|
func (u *towerUsecase) UpdateTower(id uuid.UUID, tower req.UpdateTowerDTO) error {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
package helper
|
package helper
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"log"
|
||||||
"users_management/m/model/dto/res"
|
"users_management/m/model/dto/res"
|
||||||
"users_management/m/model/entity"
|
"users_management/m/model/entity"
|
||||||
|
"users_management/m/utils/service"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ConvertToDeviceTypeResponse(devices []entity.Device) []res.DeviceTypeResponse {
|
func ConvertToDeviceTypeResponse(devices []entity.Device) []res.DeviceTypeResponse {
|
||||||
|
|
@ -18,3 +20,70 @@ func ConvertToDeviceTypeResponse(devices []entity.Device) []res.DeviceTypeRespon
|
||||||
|
|
||||||
return responses
|
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
|
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