feat(tfstated): store created and updated timestamps for states

This commit is contained in:
Julien Dessaux 2025-01-12 00:15:52 +01:00
parent afc2c2eb9f
commit aef0b00fb9
Signed by: adyxax
GPG key ID: F92E51B86E07177E
2 changed files with 15 additions and 5 deletions

View file

@ -26,7 +26,9 @@ CREATE TABLE sessions (
CREATE TABLE states ( CREATE TABLE states (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
path TEXT NOT NULL, path TEXT NOT NULL,
lock TEXT lock TEXT,
created INTEGER DEFAULT (unixepoch()),
updated INTEGER DEFAULT (unixepoch())
) STRICT; ) STRICT;
CREATE UNIQUE INDEX states_path on states(path); CREATE UNIQUE INDEX states_path on states(path);

View file

@ -5,6 +5,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"slices" "slices"
"time"
) )
// returns true in case of successful deletion // returns true in case of successful deletion
@ -46,7 +47,7 @@ func (db *DB) GetState(path string) ([]byte, error) {
func (db *DB) SetState(path string, accountID int, data []byte, lockID string) (bool, error) { func (db *DB) SetState(path string, accountID int, data []byte, lockID string) (bool, error) {
encryptedData, err := db.dataEncryptionKey.EncryptAES256(data) encryptedData, err := db.dataEncryptionKey.EncryptAES256(data)
if err != nil { if err != nil {
return false, err return false, fmt.Errorf("failed to encrypt state data: %w", err)
} }
ret := false ret := false
return ret, db.WithTransaction(func(tx *sql.Tx) error { return ret, db.WithTransaction(func(tx *sql.Tx) error {
@ -59,11 +60,11 @@ func (db *DB) SetState(path string, accountID int, data []byte, lockID string) (
var result sql.Result var result sql.Result
result, err = tx.ExecContext(db.ctx, `INSERT INTO states(path) VALUES (?)`, path) result, err = tx.ExecContext(db.ctx, `INSERT INTO states(path) VALUES (?)`, path)
if err != nil { if err != nil {
return err return fmt.Errorf("failed to insert new state: %w", err)
} }
stateID, err = result.LastInsertId() stateID, err = result.LastInsertId()
if err != nil { if err != nil {
return err return fmt.Errorf("failed to get last insert id for new state: %w", err)
} }
} else { } else {
return err return err
@ -84,7 +85,14 @@ func (db *DB) SetState(path string, accountID int, data []byte, lockID string) (
sql.Named("stateID", stateID), sql.Named("stateID", stateID),
sql.Named("data", encryptedData)) sql.Named("data", encryptedData))
if err != nil { if err != nil {
return err return fmt.Errorf("failed to insert new state version: %w", err)
}
_, err = tx.ExecContext(db.ctx,
`UPDATE states SET updated = ? WHERE id = ?;`,
time.Now().UTC().Unix(),
stateID)
if err != nil {
return fmt.Errorf("failed to touch updated for state: %w", err)
} }
_, err = tx.ExecContext(db.ctx, _, err = tx.ExecContext(db.ctx,
`DELETE FROM versions `DELETE FROM versions