2023-03-17 17:02:18 +01:00
package store
import (
2023-05-16 19:45:43 +02:00
"fmt"
2023-03-17 17:02:18 +01:00
"github.com/jmoiron/sqlx"
"github.com/pkg/errors"
)
type EnvironmentLimitJournal struct {
Model
EnvironmentId int
2023-03-17 17:57:26 +01:00
RxBytes int64
TxBytes int64
2023-03-22 19:10:07 +01:00
Action LimitJournalAction
2023-03-17 17:02:18 +01:00
}
2023-03-22 20:17:27 +01:00
func ( str * Store ) CreateEnvironmentLimitJournal ( j * EnvironmentLimitJournal , trx * sqlx . Tx ) ( int , error ) {
2023-03-22 19:10:07 +01:00
stmt , err := trx . Prepare ( "insert into environment_limit_journal (environment_id, rx_bytes, tx_bytes, action) values ($1, $2, $3, $4) returning id" )
2023-03-17 17:02:18 +01:00
if err != nil {
return 0 , errors . Wrap ( err , "error preparing environment_limit_journal insert statement" )
}
var id int
2023-03-17 17:57:26 +01:00
if err := stmt . QueryRow ( j . EnvironmentId , j . RxBytes , j . TxBytes , j . Action ) . Scan ( & id ) ; err != nil {
2023-03-17 17:02:18 +01:00
return 0 , errors . Wrap ( err , "error executing environment_limit_journal insert statement" )
}
return id , nil
}
2023-03-22 20:17:27 +01:00
func ( str * Store ) IsEnvironmentLimitJournalEmpty ( envId int , trx * sqlx . Tx ) ( bool , error ) {
2023-03-22 19:10:07 +01:00
count := 0
if err := trx . QueryRowx ( "select count(0) from environment_limit_journal where environment_id = $1" , envId ) . Scan ( & count ) ; err != nil {
return false , err
}
return count == 0 , nil
}
2023-03-22 20:17:27 +01:00
func ( str * Store ) FindLatestEnvironmentLimitJournal ( envId int , trx * sqlx . Tx ) ( * EnvironmentLimitJournal , error ) {
2023-03-17 17:02:18 +01:00
j := & EnvironmentLimitJournal { }
2023-03-22 19:10:07 +01:00
if err := trx . QueryRowx ( "select * from environment_limit_journal where environment_id = $1 order by created_at desc limit 1" , envId ) . StructScan ( j ) ; err != nil {
2023-03-17 17:02:18 +01:00
return nil , errors . Wrap ( err , "error finding environment_limit_journal by environment_id" )
}
return j , nil
}
2023-03-23 20:13:59 +01:00
2023-05-16 19:45:43 +02:00
func ( str * Store ) FindSelectedLatestEnvironmentLimitJournal ( envIds [ ] int , trx * sqlx . Tx ) ( [ ] * EnvironmentLimitJournal , error ) {
if len ( envIds ) < 1 {
return nil , nil
}
in := "("
for i := range envIds {
if i > 0 {
in += ", "
}
in += fmt . Sprintf ( "%d" , envIds [ i ] )
}
in += ")"
rows , err := trx . Queryx ( "select id, environment_id, rx_bytes, tx_bytes, action, created_at, updated_at from environment_limit_journal where id in (select max(id) as id from environment_limit_journal group by environment_id) and environment_id in " + in )
if err != nil {
return nil , errors . Wrap ( err , "error selecting all latest environment_limit_journal" )
}
var eljs [ ] * EnvironmentLimitJournal
for rows . Next ( ) {
elj := & EnvironmentLimitJournal { }
if err := rows . StructScan ( elj ) ; err != nil {
return nil , errors . Wrap ( err , "error scanning environment_limit_journal" )
}
eljs = append ( eljs , elj )
}
return eljs , nil
}
2023-03-23 20:13:59 +01:00
func ( str * Store ) FindAllLatestEnvironmentLimitJournal ( trx * sqlx . Tx ) ( [ ] * EnvironmentLimitJournal , error ) {
rows , err := trx . Queryx ( "select id, environment_id, rx_bytes, tx_bytes, action, created_at, updated_at from environment_limit_journal where id in (select max(id) as id from environment_limit_journal group by environment_id)" )
if err != nil {
return nil , errors . Wrap ( err , "error selecting all latest environment_limit_journal" )
}
var eljs [ ] * EnvironmentLimitJournal
for rows . Next ( ) {
elj := & EnvironmentLimitJournal { }
if err := rows . StructScan ( elj ) ; err != nil {
return nil , errors . Wrap ( err , "error scanning environment_limit_journal" )
}
eljs = append ( eljs , elj )
}
return eljs , nil
}
func ( str * Store ) DeleteEnvironmentLimitJournalForEnvironment ( envId int , trx * sqlx . Tx ) error {
if _ , err := trx . Exec ( "delete from environment_limit_journal where environment_id = $1" , envId ) ; err != nil {
return errors . Wrapf ( err , "error deleteing environment_limit_journal for '#%d'" , envId )
}
return nil
}