From a252fc147582dec12aab84d4eac627ae59a3d8de Mon Sep 17 00:00:00 2001 From: andig Date: Fri, 7 Oct 2022 20:09:19 +0200 Subject: [PATCH] chore: rename transactions to sessions (#4753) --- core/db/db.go | 16 ++++++------ core/db/{transaction.go => session.go} | 20 +++++++-------- core/loadpoint.go | 12 ++++----- core/loadpoint_database.go | 34 +++++++++++++------------- core/site.go | 12 +++++++-- server/http_handler.go | 2 +- 6 files changed, 52 insertions(+), 44 deletions(-) rename core/db/{transaction.go => session.go} (77%) diff --git a/core/db/db.go b/core/db/db.go index 09d8ebe46..327c60a59 100644 --- a/core/db/db.go +++ b/core/db/db.go @@ -16,8 +16,8 @@ type DB struct { } type Database interface { - Txn(startEnergy float64) *Transaction - Persist(txn interface{}) + Session(startEnergy float64) *Session + Persist(session interface{}) } // New creates a database storage driver @@ -31,9 +31,9 @@ func New(name string) (*DB, error) { return db, nil } -// Txn creates a charging transaction -func (s *DB) Txn(meter float64) *Transaction { - t := Transaction{ +// Session creates a charging session +func (s *DB) Session(meter float64) *Session { + t := Session{ Loadpoint: s.name, Created: time.Now(), MeterStart: meter, @@ -43,10 +43,10 @@ func (s *DB) Txn(meter float64) *Transaction { } // Persist creates or updates a transaction in the database -func (s *DB) Persist(txn interface{}) { - s.log.TRACE.Printf("store: %+v", txn) +func (s *DB) Persist(session interface{}) { + s.log.TRACE.Printf("store: %+v", session) - if err := s.db.Save(txn).Error; err != nil { + if err := s.db.Save(session).Error; err != nil { s.log.ERROR.Printf("store: %v", err) } } diff --git a/core/db/transaction.go b/core/db/session.go similarity index 77% rename from core/db/transaction.go rename to core/db/session.go index 302f23e13..ec3c4ccf4 100644 --- a/core/db/transaction.go +++ b/core/db/session.go @@ -11,8 +11,8 @@ import ( "github.com/fatih/structs" ) -// Transaction is a single charging transaction -type Transaction struct { +// Session is a single charging session +type Session struct { ID uint `json:"-" csv:"-" gorm:"primarykey"` Created time.Time `json:"created"` Finished time.Time `json:"finished"` @@ -25,20 +25,20 @@ type Transaction struct { } // Stop stops charging session with end meter reading and due total amount -func (t *Transaction) Stop(chargedWh, total float64) { +func (t *Session) Stop(chargedWh, total float64) { t.ChargedEnergy = chargedWh / 1e3 t.MeterStop = total t.Finished = time.Now() } -// Transactions is a list of transactions -type Transactions []Transaction +// Sessions is a list of sessions +type Sessions []Session -var _ api.CsvWriter = (*Transactions)(nil) +var _ api.CsvWriter = (*Sessions)(nil) -func (t *Transactions) writeHeader(ww *csv.Writer) { +func (t *Sessions) writeHeader(ww *csv.Writer) { var row []string - for _, f := range structs.Fields(Transaction{}) { + for _, f := range structs.Fields(Session{}) { caption := f.Tag("csv") switch { case caption == "-": @@ -52,7 +52,7 @@ func (t *Transactions) writeHeader(ww *csv.Writer) { _ = ww.Write(row) } -func (t *Transactions) writeRow(ww *csv.Writer, r Transaction) { +func (t *Sessions) writeRow(ww *csv.Writer, r Session) { var row []string for _, f := range structs.Fields(r) { if f.Tag("csv") == "-" { @@ -79,7 +79,7 @@ func (t *Transactions) writeRow(ww *csv.Writer, r Transaction) { } // WriteCsv implements the api.CsvWriter interface -func (t *Transactions) WriteCsv(w io.Writer) { +func (t *Sessions) WriteCsv(w io.Writer) { ww := csv.NewWriter(w) t.writeHeader(ww) diff --git a/core/loadpoint.go b/core/loadpoint.go index 4c1182654..7a4a51552 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -160,8 +160,8 @@ type LoadPoint struct { progress *Progress // Step-wise progress indicator // session log - db db.Database - txn *db.Transaction + db db.Database + session *db.Session tasks queues.Queue // tasks to be executed } @@ -388,7 +388,7 @@ func (lp *LoadPoint) evChargeStartHandler() { // soc update reset lp.socUpdated = time.Time{} - lp.startTxn() + lp.startSession() } // evChargeStopHandler sends external stop event @@ -405,7 +405,7 @@ func (lp *LoadPoint) evChargeStopHandler() { lp.resetPVTimerIfRunning() } - lp.stopTxn() + lp.stopSession() } // evVehicleConnectHandler sends external start event @@ -472,7 +472,7 @@ func (lp *LoadPoint) evVehicleDisconnectHandler() { // reset timer when vehicle is removed lp.socTimer.Reset() - lp.finalizeTxn() + lp.finalizeSession() } // evVehicleSoCProgressHandler sends external start event @@ -903,7 +903,7 @@ func (lp *LoadPoint) setActiveVehicle(vehicle api.Vehicle) { lp.Lock() lp.unpublishVehicle() - lp.updateTxn() + lp.updateSession() } func (lp *LoadPoint) wakeUpVehicle() { diff --git a/core/loadpoint_database.go b/core/loadpoint_database.go index 38c41e1e4..8d09a5974 100644 --- a/core/loadpoint_database.go +++ b/core/loadpoint_database.go @@ -19,43 +19,43 @@ func (lp *LoadPoint) chargeMeterTotal() float64 { return f } -func (lp *LoadPoint) startTxn() { +func (lp *LoadPoint) startSession() { // test guard if lp.db == nil { return } - if lp.txn == nil { - lp.txn = lp.db.Txn(lp.chargeMeterTotal()) + if lp.session == nil { + lp.session = lp.db.Session(lp.chargeMeterTotal()) if lp.vehicle != nil { - lp.txn.Vehicle = lp.vehicle.Title() + lp.session.Vehicle = lp.vehicle.Title() } if c, ok := lp.charger.(api.Identifier); ok { if id, err := c.Identify(); err == nil { - lp.txn.Identifier = id + lp.session.Identifier = id } } - lp.db.Persist(lp.txn) + lp.db.Persist(lp.session) } } -func (lp *LoadPoint) stopTxn() { +func (lp *LoadPoint) stopSession() { // test guard - if lp.db == nil || lp.txn == nil { + if lp.db == nil || lp.session == nil { return } - lp.txn.Stop(lp.chargedEnergy, lp.chargeMeterTotal()) + lp.session.Stop(lp.chargedEnergy, lp.chargeMeterTotal()) - lp.db.Persist(lp.txn) + lp.db.Persist(lp.session) } -func (lp *LoadPoint) updateTxn() { +func (lp *LoadPoint) updateSession() { // test guard - if lp.db == nil || lp.txn == nil { + if lp.db == nil || lp.session == nil { return } @@ -64,17 +64,17 @@ func (lp *LoadPoint) updateTxn() { title = lp.vehicle.Title() } - if lp.txn.Vehicle != title { - lp.txn.Vehicle = title - lp.db.Persist(lp.txn) + if lp.session.Vehicle != title { + lp.session.Vehicle = title + lp.db.Persist(lp.session) } } -func (lp *LoadPoint) finalizeTxn() { +func (lp *LoadPoint) finalizeSession() { // test guard if lp.db == nil { return } - lp.txn = nil + lp.session = nil } diff --git a/core/site.go b/core/site.go index cf76e5b96..696559954 100644 --- a/core/site.go +++ b/core/site.go @@ -94,7 +94,15 @@ func NewSiteFromConfig( // migrate session log if serverdb.Instance != nil { - if err := serverdb.Instance.AutoMigrate(new(db.Transaction)); err != nil { + var err error + // TODO deprecate + if table := "transactions"; serverdb.Instance.Migrator().HasTable(table) { + err = serverdb.Instance.Migrator().RenameTable(table, new(db.Session)) + } + if err == nil { + err = serverdb.Instance.AutoMigrate(new(db.Session)) + } + if err != nil { return nil, err } } @@ -109,7 +117,7 @@ func NewSiteFromConfig( return nil, err } - shutdown.Register(lp.stopTxn) + shutdown.Register(lp.stopSession) } } diff --git a/server/http_handler.go b/server/http_handler.go index 6aa99e8d9..8dbeee60d 100644 --- a/server/http_handler.go +++ b/server/http_handler.go @@ -155,7 +155,7 @@ func sessionHandler(w http.ResponseWriter, r *http.Request) { return } - var res db.Transactions + var res db.Sessions if txn := dbserver.Instance.Where("charged_kwh>=0.05").Order("created desc").Find(&res); txn.Error != nil { jsonError(w, http.StatusInternalServerError, txn.Error) return