2022-08-03 19:43:54 +02:00
package store
import (
"github.com/jmoiron/sqlx"
"github.com/pkg/errors"
)
type Environment struct {
Model
2022-11-17 18:44:53 +01:00
AccountId * int
2022-10-19 18:24:43 +02:00
Description string
Host string
Address string
ZId string
2023-03-09 21:08:59 +01:00
Deleted bool
2022-08-03 19:43:54 +02:00
}
2023-03-22 20:17:27 +01:00
func ( str * Store ) CreateEnvironment ( accountId int , i * Environment , tx * sqlx . Tx ) ( int , error ) {
2022-10-21 15:31:12 +02:00
stmt , err := tx . Prepare ( "insert into environments (account_id, description, host, address, z_id) values ($1, $2, $3, $4, $5) returning id" )
2022-08-03 19:43:54 +02:00
if err != nil {
return 0 , errors . Wrap ( err , "error preparing environments insert statement" )
}
2022-10-21 15:31:12 +02:00
var id int
if err := stmt . QueryRow ( accountId , i . Description , i . Host , i . Address , i . ZId ) . Scan ( & id ) ; err != nil {
2022-08-03 19:43:54 +02:00
return 0 , errors . Wrap ( err , "error executing environments insert statement" )
}
2022-10-21 15:31:12 +02:00
return id , nil
2022-08-03 19:43:54 +02:00
}
2023-03-22 20:17:27 +01:00
func ( str * Store ) CreateEphemeralEnvironment ( i * Environment , tx * sqlx . Tx ) ( int , error ) {
2022-11-17 18:44:53 +01:00
stmt , err := tx . Prepare ( "insert into environments (description, host, address, z_id) values ($1, $2, $3, $4) returning id" )
if err != nil {
return 0 , errors . Wrap ( err , "error preparing environments (ephemeral) insert statement" )
}
var id int
if err := stmt . QueryRow ( i . Description , i . Host , i . Address , i . ZId ) . Scan ( & id ) ; err != nil {
return 0 , errors . Wrap ( err , "error executing environments (ephemeral) insert statement" )
}
return id , nil
}
2023-03-22 20:17:27 +01:00
func ( str * Store ) GetEnvironment ( id int , tx * sqlx . Tx ) ( * Environment , error ) {
2022-08-03 19:43:54 +02:00
i := & Environment { }
2022-10-21 15:31:12 +02:00
if err := tx . QueryRowx ( "select * from environments where id = $1" , id ) . StructScan ( i ) ; err != nil {
2022-08-03 19:43:54 +02:00
return nil , errors . Wrap ( err , "error selecting environment by id" )
}
return i , nil
}
2023-03-22 20:17:27 +01:00
func ( str * Store ) FindEnvironmentsForAccount ( accountId int , tx * sqlx . Tx ) ( [ ] * Environment , error ) {
2023-03-10 16:57:59 +01:00
rows , err := tx . Queryx ( "select environments.* from environments where account_id = $1 and not deleted" , accountId )
2022-08-03 19:43:54 +02:00
if err != nil {
return nil , errors . Wrap ( err , "error selecting environments by account id" )
}
var is [ ] * Environment
for rows . Next ( ) {
i := & Environment { }
if err := rows . StructScan ( i ) ; err != nil {
return nil , errors . Wrap ( err , "error scanning environment" )
}
is = append ( is , i )
}
return is , nil
}
2023-03-22 20:17:27 +01:00
func ( str * Store ) FindEnvironmentForAccount ( envZId string , accountId int , tx * sqlx . Tx ) ( * Environment , error ) {
2022-12-22 19:51:29 +01:00
env := & Environment { }
2023-03-10 16:57:59 +01:00
if err := tx . QueryRowx ( "select environments.* from environments where z_id = $1 and account_id = $2 and not deleted" , envZId , accountId ) . StructScan ( env ) ; err != nil {
2022-12-22 19:51:29 +01:00
return nil , errors . Wrap ( err , "error finding environment by z_id and account_id" )
}
return env , nil
}
2023-03-22 20:17:27 +01:00
func ( str * Store ) DeleteEnvironment ( id int , tx * sqlx . Tx ) error {
2023-03-10 16:57:59 +01:00
stmt , err := tx . Prepare ( "update environments set updated_at = current_timestamp, deleted = true where id = $1" )
2022-08-03 19:43:54 +02:00
if err != nil {
return errors . Wrap ( err , "error preparing environments delete statement" )
}
_ , err = stmt . Exec ( id )
if err != nil {
return errors . Wrap ( err , "error executing environments delete statement" )
}
return nil
}