Skip to content

Commit abf1a6d

Browse files
committed
Update UI
1 parent f87bc59 commit abf1a6d

File tree

7 files changed

+2001
-670
lines changed

7 files changed

+2001
-670
lines changed

db/db.go

Lines changed: 47 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package db
33
import (
44
"fleet-telemetry-consumer/models"
55
"fmt"
6+
"log"
7+
68
// "log"
79

810
"gorm.io/driver/postgres"
@@ -28,48 +30,29 @@ func InitDB(host, user, password, dbname string, port int) error {
2830
// log.Printf("Warning: Failed to drop tables: %v", err)
2931
// }
3032

31-
// Create tables with new schema
32-
err = DB.AutoMigrate(&models.TeslaAccount{}, &models.TeslaVehicle{})
33+
// Auto migrate the schemas
34+
err = DB.AutoMigrate(
35+
&models.TeslaAccount{},
36+
&models.TeslaVehicle{},
37+
&models.TelemetryData{},
38+
)
3339
if err != nil {
3440
return fmt.Errorf("failed to migrate database: %v", err)
3541
}
3642

43+
log.Println("Database initialized successfully")
3744
return nil
3845
}
3946

4047
// CreateOrUpdateTeslaAccount creates or updates a Tesla account in the database
4148
func CreateOrUpdateTeslaAccount(account *models.TeslaAccount) error {
42-
// Try to find an existing account with the same UserID
43-
var existingAccount models.TeslaAccount
44-
result := DB.Where("user_id = ?", account.UserID).First(&existingAccount)
45-
46-
if result.Error == nil {
47-
// Update existing account
48-
account.ID = existingAccount.ID
49-
return DB.Save(account).Error
50-
} else if result.Error == gorm.ErrRecordNotFound {
51-
// Create new account
52-
return DB.Create(account).Error
53-
}
54-
49+
result := DB.Save(account)
5550
return result.Error
5651
}
5752

5853
// CreateOrUpdateTeslaVehicle creates or updates a Tesla vehicle in the database
5954
func CreateOrUpdateTeslaVehicle(vehicle *models.TeslaVehicle) error {
60-
// Try to find an existing vehicle with the same VIN
61-
var existingVehicle models.TeslaVehicle
62-
result := DB.Where("vin = ?", vehicle.VIN).First(&existingVehicle)
63-
64-
if result.Error == nil {
65-
// Update existing vehicle
66-
vehicle.ID = existingVehicle.ID
67-
return DB.Save(vehicle).Error
68-
} else if result.Error == gorm.ErrRecordNotFound {
69-
// Create new vehicle
70-
return DB.Create(vehicle).Error
71-
}
72-
55+
result := DB.Save(vehicle)
7356
return result.Error
7457
}
7558

@@ -103,3 +86,39 @@ func GetAccountByAccessToken(accessToken string) (*models.TeslaAccount, error) {
10386
}
10487
return &account, nil
10588
}
89+
90+
// StoreTelemetryData stores a telemetry data point in the database
91+
func StoreTelemetryData(data *models.TelemetryData) error {
92+
result := DB.Create(data)
93+
return result.Error
94+
}
95+
96+
// GetTelemetryDataForVehicle retrieves telemetry data for a specific vehicle and key
97+
func GetTelemetryDataForVehicle(vin string, key string, limit int) ([]models.TelemetryData, error) {
98+
var data []models.TelemetryData
99+
result := DB.Where("vin = ? AND key = ?", vin, key).
100+
Order("created_at DESC").
101+
Limit(limit).
102+
Find(&data)
103+
return data, result.Error
104+
}
105+
106+
// GetLatestTelemetryDataForVehicle retrieves the latest telemetry data points for a vehicle
107+
func GetLatestTelemetryDataForVehicle(vin string) (map[string]models.TelemetryData, error) {
108+
var data []models.TelemetryData
109+
subQuery := DB.Model(&models.TelemetryData{}).
110+
Select("DISTINCT ON (key) *").
111+
Where("vin = ?", vin).
112+
Order("key, created_at DESC")
113+
114+
result := DB.Table("(?) as sub", subQuery).
115+
Find(&data)
116+
117+
// Convert to map for easier access
118+
dataMap := make(map[string]models.TelemetryData)
119+
for _, d := range data {
120+
dataMap[d.Key] = d
121+
}
122+
123+
return dataMap, result.Error
124+
}

docker-compose.yml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ services:
1717
- ./secrets/tesla-ssl/tls.crt:/secrets/tesla-ssl/tls.crt:ro
1818
- ./secrets/tesla-ssl/tls.key:/secrets/tesla-ssl/tls.key:ro
1919
- ./secrets/fleet-api/private-key.pem:/secret/private-key.pem:ro
20-
fleet-telemetry-consumer:
21-
build:
22-
context: .
23-
dockerfile: Dockerfile
24-
ports:
25-
- "3000:3000"
26-
depends_on:
27-
- tesla-http-proxy
28-
volumes:
29-
- ./secrets/fleet-telemetry-ssl/:/app/secrets/fleet-telemetry-ssl:ro
30-
- ./secrets/pg/:/app/secrets/pg:ro
31-
- ./secrets/fleet-api/:/app/secrets/fleet-api:ro
32-
- ./secrets/tesla-ssl/:/app/secrets/tesla-ssl:ro
20+
# fleet-telemetry-consumer:
21+
# build:
22+
# context: .
23+
# dockerfile: Dockerfile
24+
# ports:
25+
# - "3000:3000"
26+
# depends_on:
27+
# - tesla-http-proxy
28+
# volumes:
29+
# - ./secrets/fleet-telemetry-ssl/:/app/secrets/fleet-telemetry-ssl:ro
30+
# - ./secrets/pg/:/app/secrets/pg:ro
31+
# - ./secrets/fleet-api/:/app/secrets/fleet-api:ro
32+
# - ./secrets/tesla-ssl/:/app/secrets/tesla-ssl:ro

0 commit comments

Comments
 (0)