Skip to content

Commit

Permalink
wrap db tx in function
Browse files Browse the repository at this point in the history
  • Loading branch information
jstalex committed Jul 28, 2023
1 parent d73b90a commit 54e8b80
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 61 deletions.
67 changes: 37 additions & 30 deletions examples/interval_bot/cmd/candles_downloader/download_candles.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,44 +216,51 @@ func initDB(path string) (*sqlx.DB, error) {

// storeCandlesInDB - Сохранение исторических свечей инструмента в бд
func storeCandlesInDB(db *sqlx.DB, uid string, first, last time.Time, hc []*pb.HistoricCandle) error {
tx, err := db.Begin()
if err != nil {
return err
}
err := func() error {
tx, err := db.Begin()
if err != nil {
return err
}

insertCandle, err := tx.Prepare(`insert into candles (instrument_uid, open, close, high, low, volume, time, is_complete)
defer func() {
if err = tx.Commit(); err != nil {
log.Printf(err.Error())
}
}()

insertCandle, err := tx.Prepare(`insert into candles (instrument_uid, open, close, high, low, volume, time, is_complete)
values (?, ?, ?, ?, ?, ?, ?, ?) `)
if err != nil {
return err
}
defer func() {
if err := insertCandle.Close(); err != nil {
log.Printf(err.Error())
if err != nil {
return err
}
}()
defer func() {
if err := insertCandle.Close(); err != nil {
log.Printf(err.Error())
}
}()

for _, candle := range hc {
_, err := insertCandle.Exec(uid,
candle.GetOpen().ToFloat(),
candle.GetClose().ToFloat(),
candle.GetHigh().ToFloat(),
candle.GetLow().ToFloat(),
candle.GetVolume(),
candle.GetTime().AsTime().Unix(),
candle.GetIsComplete())
if err != nil {
if errors.As(err, &sqlite3.Error{}) {
continue
} else {
return err
for _, candle := range hc {
_, err := insertCandle.Exec(uid,
candle.GetOpen().ToFloat(),
candle.GetClose().ToFloat(),
candle.GetHigh().ToFloat(),
candle.GetLow().ToFloat(),
candle.GetVolume(),
candle.GetTime().AsTime().Unix(),
candle.GetIsComplete())
if err != nil {
if errors.As(err, &sqlite3.Error{}) {
continue
} else {
return err
}
}
}
}

if err := tx.Commit(); err != nil {
return nil
}()
if err != nil {
return err
}

// записываем в базу время последнего обновления
_, err = db.Exec(`insert or replace into updates(instrument_id, first_time, last_time) values (?, ?, ?)`, uid, first.Unix(), last.Unix())
if err != nil {
Expand Down
67 changes: 36 additions & 31 deletions examples/interval_bot/internal/bot/candles.go
Original file line number Diff line number Diff line change
Expand Up @@ -355,44 +355,49 @@ func (c *CandlesStorage) initDB(path string) (*sqlx.DB, error) {

// storeCandlesInDB - Сохранение исторических свечей инструмента в бд
func (c *CandlesStorage) storeCandlesInDB(uid string, update time.Time, hc []*pb.HistoricCandle) error {
tx, err := c.db.Begin()
if err != nil {
return err
}

insertCandle, err := tx.Prepare(`insert into candles (instrument_uid, open, close, high, low, volume, time, is_complete)
err := func() error {
tx, err := c.db.Begin()
if err != nil {
return err
}
defer func() {
if err := tx.Commit(); err != nil {
c.logger.Errorf(err.Error())
}
}()
insertCandle, err := tx.Prepare(`insert into candles (instrument_uid, open, close, high, low, volume, time, is_complete)
values (?, ?, ?, ?, ?, ?, ?, ?) `)
if err != nil {
return err
}
defer func() {
if err := insertCandle.Close(); err != nil {
c.logger.Errorf(err.Error())
if err != nil {
return err
}
}()
defer func() {
if err := insertCandle.Close(); err != nil {
c.logger.Errorf(err.Error())
}
}()

for _, candle := range hc {
_, err := insertCandle.Exec(uid,
candle.GetOpen().ToFloat(),
candle.GetClose().ToFloat(),
candle.GetHigh().ToFloat(),
candle.GetLow().ToFloat(),
candle.GetVolume(),
candle.GetTime().AsTime().Unix(),
candle.GetIsComplete())
if err != nil {
if errors.As(err, &sqlite3.Error{}) {
continue
} else {
return err
for _, candle := range hc {
_, err := insertCandle.Exec(uid,
candle.GetOpen().ToFloat(),
candle.GetClose().ToFloat(),
candle.GetHigh().ToFloat(),
candle.GetLow().ToFloat(),
candle.GetVolume(),
candle.GetTime().AsTime().Unix(),
candle.GetIsComplete())
if err != nil {
if errors.As(err, &sqlite3.Error{}) {
continue
} else {
return err
}
}
}
}

if err := tx.Commit(); err != nil {
return nil
}()
if err != nil {
return err
}

// записываем в базу время последнего обновления
_, err = c.db.Exec(`insert or replace into updates(instrument_id, first_time, last_time) values (?, ?, ?)`,
uid, c.instruments[uid].FirstUpdate.Unix(), update.Unix())
Expand Down

0 comments on commit 54e8b80

Please sign in to comment.