adding additional responses for geocoding

This commit is contained in:
areeqakbr 2025-03-27 10:05:45 +07:00
parent 90d5f4f04a
commit bc6e1f7398
6 changed files with 147 additions and 14 deletions

View File

@ -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 {

View File

@ -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"`
}

View File

@ -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 {

View File

@ -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 {

View File

@ -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
}

View File

@ -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
}