refactor(devices): one Devices->DeviceInfo mapper for the five hand-built copies
The same pgtype unwrap-and-fill block (sync_enabled/auto_sync validity, frequency fallback, pointer timestamps) existed at five DeviceInfo construction sites, two of which also carried AuthToken. deviceToInfo(device, includeAuthToken) replaces all five; token-bearing lists pass the flag explicitly so the surface that exposes the token stays a deliberate choice.
This commit is contained in:
1 parent
082a3e0c3c
commit
58fbe372e2
1 file changed
+34
-98
@@ -217,6 +217,34 @@ func (h *DeviceHandler) CheckRegistrationStatus(c *echo.Context) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deviceToInfo is the single Devices->DeviceInfo mapper for every
|
||||||
|
// device surface. AuthToken rides only on surfaces that deliberately
|
||||||
|
// expose it (the owner's device lists).
|
||||||
|
func deviceToInfo(device database.Devices, includeAuthToken bool) DeviceInfo {
|
||||||
|
syncEnabled := device.SyncEnabled.Bool && device.SyncEnabled.Valid
|
||||||
|
autoSync := device.AutoSync.Bool && device.AutoSync.Valid
|
||||||
|
syncFreq := int32(0)
|
||||||
|
if device.SyncFrequencyMinutes.Valid {
|
||||||
|
syncFreq = device.SyncFrequencyMinutes.Int32
|
||||||
|
}
|
||||||
|
info := DeviceInfo{
|
||||||
|
ID: device.ID.Bytes,
|
||||||
|
DeviceName: device.DeviceName,
|
||||||
|
DeviceType: device.DeviceType,
|
||||||
|
LastSync: &device.LastSync.Time,
|
||||||
|
LastSeen: &device.LastSeen.Time,
|
||||||
|
SyncEnabled: syncEnabled,
|
||||||
|
AutoSync: autoSync,
|
||||||
|
SyncFrequency: syncFreq,
|
||||||
|
CreatedAt: device.CreatedAt.Time,
|
||||||
|
DeviceMetadata: device.DeviceMetadata,
|
||||||
|
}
|
||||||
|
if includeAuthToken {
|
||||||
|
info.AuthToken = device.AuthToken
|
||||||
|
}
|
||||||
|
return info
|
||||||
|
}
|
||||||
|
|
||||||
func (h *DeviceHandler) ListDevices(c *echo.Context) error {
|
func (h *DeviceHandler) ListDevices(c *echo.Context) error {
|
||||||
userID := c.Get("user_id").(string)
|
userID := c.Get("user_id").(string)
|
||||||
userUUID, err := uuid.Parse(userID)
|
userUUID, err := uuid.Parse(userID)
|
||||||
@@ -233,26 +261,7 @@ func (h *DeviceHandler) ListDevices(c *echo.Context) error {
|
|||||||
|
|
||||||
deviceList := make([]DeviceInfo, 0, len(devices))
|
deviceList := make([]DeviceInfo, 0, len(devices))
|
||||||
for _, device := range devices {
|
for _, device := range devices {
|
||||||
syncEnabled := device.SyncEnabled.Bool && device.SyncEnabled.Valid
|
deviceList = append(deviceList, deviceToInfo(device, true))
|
||||||
autoSync := device.AutoSync.Bool && device.AutoSync.Valid
|
|
||||||
syncFreq := int32(0)
|
|
||||||
if device.SyncFrequencyMinutes.Valid {
|
|
||||||
syncFreq = device.SyncFrequencyMinutes.Int32
|
|
||||||
}
|
|
||||||
|
|
||||||
deviceList = append(deviceList, DeviceInfo{
|
|
||||||
ID: device.ID.Bytes,
|
|
||||||
DeviceName: device.DeviceName,
|
|
||||||
DeviceType: device.DeviceType,
|
|
||||||
LastSync: &device.LastSync.Time,
|
|
||||||
LastSeen: &device.LastSeen.Time,
|
|
||||||
SyncEnabled: syncEnabled,
|
|
||||||
AutoSync: autoSync,
|
|
||||||
SyncFrequency: syncFreq,
|
|
||||||
CreatedAt: device.CreatedAt.Time,
|
|
||||||
DeviceMetadata: device.DeviceMetadata,
|
|
||||||
AuthToken: device.AuthToken,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.JSON(http.StatusOK, DeviceListResponse{
|
return c.JSON(http.StatusOK, DeviceListResponse{
|
||||||
@@ -277,26 +286,7 @@ func (h *DeviceHandler) GetDevicesData(c *echo.Context) ([]DeviceInfo, error) {
|
|||||||
|
|
||||||
deviceList := make([]DeviceInfo, 0, len(devices))
|
deviceList := make([]DeviceInfo, 0, len(devices))
|
||||||
for _, device := range devices {
|
for _, device := range devices {
|
||||||
syncEnabled := device.SyncEnabled.Bool && device.SyncEnabled.Valid
|
deviceList = append(deviceList, deviceToInfo(device, true))
|
||||||
autoSync := device.AutoSync.Bool && device.AutoSync.Valid
|
|
||||||
syncFreq := int32(0)
|
|
||||||
if device.SyncFrequencyMinutes.Valid {
|
|
||||||
syncFreq = device.SyncFrequencyMinutes.Int32
|
|
||||||
}
|
|
||||||
|
|
||||||
deviceList = append(deviceList, DeviceInfo{
|
|
||||||
ID: device.ID.Bytes,
|
|
||||||
DeviceName: device.DeviceName,
|
|
||||||
DeviceType: device.DeviceType,
|
|
||||||
LastSync: &device.LastSync.Time,
|
|
||||||
LastSeen: &device.LastSeen.Time,
|
|
||||||
SyncEnabled: syncEnabled,
|
|
||||||
AutoSync: autoSync,
|
|
||||||
SyncFrequency: syncFreq,
|
|
||||||
CreatedAt: device.CreatedAt.Time,
|
|
||||||
DeviceMetadata: device.DeviceMetadata,
|
|
||||||
AuthToken: device.AuthToken,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return deviceList, nil
|
return deviceList, nil
|
||||||
@@ -329,25 +319,7 @@ func (h *DeviceHandler) GetDevice(c *echo.Context) error {
|
|||||||
return c.JSON(http.StatusForbidden, map[string]string{"error": "access denied"})
|
return c.JSON(http.StatusForbidden, map[string]string{"error": "access denied"})
|
||||||
}
|
}
|
||||||
|
|
||||||
syncEnabled := device.SyncEnabled.Bool && device.SyncEnabled.Valid
|
return c.JSON(http.StatusOK, deviceToInfo(device, false))
|
||||||
autoSync := device.AutoSync.Bool && device.AutoSync.Valid
|
|
||||||
syncFreq := int32(0)
|
|
||||||
if device.SyncFrequencyMinutes.Valid {
|
|
||||||
syncFreq = device.SyncFrequencyMinutes.Int32
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.JSON(http.StatusOK, DeviceInfo{
|
|
||||||
ID: device.ID.Bytes,
|
|
||||||
DeviceName: device.DeviceName,
|
|
||||||
DeviceType: device.DeviceType,
|
|
||||||
LastSync: &device.LastSync.Time,
|
|
||||||
LastSeen: &device.LastSeen.Time,
|
|
||||||
SyncEnabled: syncEnabled,
|
|
||||||
AutoSync: autoSync,
|
|
||||||
SyncFrequency: syncFreq,
|
|
||||||
CreatedAt: device.CreatedAt.Time,
|
|
||||||
DeviceMetadata: device.DeviceMetadata,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *DeviceHandler) UpdateDevice(c *echo.Context) error {
|
func (h *DeviceHandler) UpdateDevice(c *echo.Context) error {
|
||||||
@@ -421,27 +393,9 @@ func (h *DeviceHandler) UpdateDevice(c *echo.Context) error {
|
|||||||
return c.JSON(http.StatusInternalServerError, map[string]string{"error": "failed to update device"})
|
return c.JSON(http.StatusInternalServerError, map[string]string{"error": "failed to update device"})
|
||||||
}
|
}
|
||||||
|
|
||||||
syncEnabled := updatedDevice.SyncEnabled.Bool && updatedDevice.SyncEnabled.Valid
|
|
||||||
autoSync := updatedDevice.AutoSync.Bool && updatedDevice.AutoSync.Valid
|
|
||||||
syncFreq := int32(0)
|
|
||||||
if updatedDevice.SyncFrequencyMinutes.Valid {
|
|
||||||
syncFreq = updatedDevice.SyncFrequencyMinutes.Int32 // Fixed: Use actual updated value
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.JSON(http.StatusOK, map[string]interface{}{
|
return c.JSON(http.StatusOK, map[string]interface{}{
|
||||||
"device_updated": true,
|
"device_updated": true,
|
||||||
"device": DeviceInfo{
|
"device": deviceToInfo(updatedDevice, false),
|
||||||
ID: updatedDevice.ID.Bytes,
|
|
||||||
DeviceName: updatedDevice.DeviceName,
|
|
||||||
DeviceType: updatedDevice.DeviceType,
|
|
||||||
LastSync: &updatedDevice.LastSync.Time,
|
|
||||||
LastSeen: &updatedDevice.LastSeen.Time,
|
|
||||||
SyncEnabled: syncEnabled,
|
|
||||||
AutoSync: autoSync,
|
|
||||||
SyncFrequency: syncFreq, // Now correctly returns the updated value
|
|
||||||
CreatedAt: updatedDevice.CreatedAt.Time,
|
|
||||||
DeviceMetadata: updatedDevice.DeviceMetadata,
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -518,13 +472,6 @@ func (h *DeviceHandler) RegenerateDeviceToken(c *echo.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Return new token with device info
|
// Return new token with device info
|
||||||
syncEnabled := updatedDevice.SyncEnabled.Bool && updatedDevice.SyncEnabled.Valid
|
|
||||||
autoSync := updatedDevice.AutoSync.Bool && updatedDevice.AutoSync.Valid
|
|
||||||
syncFreq := int32(0)
|
|
||||||
if updatedDevice.SyncFrequencyMinutes.Valid {
|
|
||||||
syncFreq = updatedDevice.SyncFrequencyMinutes.Int32
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build sync URLs with new token
|
// Build sync URLs with new token
|
||||||
syncURLs := map[string]string{}
|
syncURLs := map[string]string{}
|
||||||
baseURL := h.cfg.BaseURL
|
baseURL := h.cfg.BaseURL
|
||||||
@@ -549,19 +496,8 @@ func (h *DeviceHandler) RegenerateDeviceToken(c *echo.Context) error {
|
|||||||
return c.JSON(http.StatusOK, map[string]interface{}{
|
return c.JSON(http.StatusOK, map[string]interface{}{
|
||||||
"message": "Token regenerated successfully",
|
"message": "Token regenerated successfully",
|
||||||
"auth_token": newToken,
|
"auth_token": newToken,
|
||||||
"device": DeviceInfo{
|
"device": deviceToInfo(updatedDevice, false),
|
||||||
ID: updatedDevice.ID.Bytes,
|
"sync_urls": syncURLs,
|
||||||
DeviceName: updatedDevice.DeviceName,
|
|
||||||
DeviceType: updatedDevice.DeviceType,
|
|
||||||
LastSync: &updatedDevice.LastSync.Time,
|
|
||||||
LastSeen: &updatedDevice.LastSeen.Time,
|
|
||||||
SyncEnabled: syncEnabled,
|
|
||||||
AutoSync: autoSync,
|
|
||||||
SyncFrequency: syncFreq,
|
|
||||||
CreatedAt: updatedDevice.CreatedAt.Time,
|
|
||||||
DeviceMetadata: updatedDevice.DeviceMetadata,
|
|
||||||
},
|
|
||||||
"sync_urls": syncURLs,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user