Skip to content

Commit

Permalink
support query device data from old db (#64)
Browse files Browse the repository at this point in the history
  • Loading branch information
huangzhiran authored Jan 14, 2025
1 parent 5857895 commit f02a349
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 7 deletions.
1 change: 1 addition & 0 deletions cmd/server/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ type Config struct {
ServiceEndpoint string `env:"HTTP_SERVICE_ENDPOINT"`
PrvKey string `env:"PRIVATE_KEY,optional"`
DatabaseDSN string `env:"DATABASE_DSN"`
OldDatabaseDSN string `env:"OLD_DATABASE_DSN"`
ChainEndpoint string `env:"CHAIN_ENDPOINT,optional"`
BeginningBlockNumber uint64 `env:"BEGINNING_BLOCK_NUMBER,optional"`
IoIDProjectID uint64 `env:"IOID_PROJECT_ID,optional"`
Expand Down
2 changes: 1 addition & 1 deletion cmd/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ func main() {
log.Fatal(errors.Wrap(err, "failed to parse private key"))
}

db, err := db.New(cfg.DatabaseDSN)
db, err := db.New(cfg.DatabaseDSN, cfg.OldDatabaseDSN)
if err != nil {
log.Fatal(errors.Wrap(err, "failed to new db"))
}
Expand Down
20 changes: 17 additions & 3 deletions db/device_record.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,29 @@ func (d *DB) QueryDeviceRecord(latitude, longitude string) (*DeviceRecord, error
if err := d.db.Raw(fmt.Sprintf(sql, longitude, latitude)).Scan(&ids).Error; err != nil {
return nil, errors.Wrap(err, "failed to query device record geo data")
}
if len(ids) == 0 {
if len(ids) != 0 {
t := &DeviceRecord{}
if err := d.db.Where("id IN ?", ids).Order("timestamp DESC").First(&t).Error; err != nil {
if err == gorm.ErrRecordNotFound {
return nil, nil
}
return nil, errors.Wrap(err, "failed to query device record")
}
return t, nil
}
oldIDs := []string{}
if err := d.oldDB.Raw(fmt.Sprintf(sql, longitude, latitude)).Scan(&ids).Error; err != nil {
return nil, errors.Wrap(err, "failed to query device record geo data from old db")
}
if len(oldIDs) == 0 {
return nil, nil
}
t := &DeviceRecord{}
if err := d.db.Where("id IN ?", ids).Order("timestamp DESC").First(&t).Error; err != nil {
if err := d.oldDB.Where("id IN ?", oldIDs).Order("timestamp DESC").First(&t).Error; err != nil {
if err == gorm.ErrRecordNotFound {
return nil, nil
}
return nil, errors.Wrap(err, "failed to query device record")
return nil, errors.Wrap(err, "failed to query device record from old db")
}
return t, nil
}
Expand Down
16 changes: 13 additions & 3 deletions db/postgres.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ import (
)

type DB struct {
db *gorm.DB
db *gorm.DB
oldDB *gorm.DB
}

func New(dsn string) (*DB, error) {
func New(dsn, oldDSN string) (*DB, error) {
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent),
})
Expand All @@ -32,5 +33,14 @@ func New(dsn string) (*DB, error) {
); err != nil {
return nil, errors.Wrap(err, "failed to migrate model")
}
return &DB{db}, nil
oldDB, err := gorm.Open(postgres.Open(oldDSN), &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent),
})
if err != nil {
return nil, errors.Wrap(err, "failed to connect old postgres")
}
return &DB{
db: db,
oldDB: oldDB,
}, nil
}

0 comments on commit f02a349

Please sign in to comment.