From ed6a1ceccc5408ee4de70c53834f00af61d3f23c Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Thu, 21 Apr 2022 17:54:33 +0530 Subject: [PATCH] feat: add env queries --- server/db/providers/cassandradb/env.go | 22 +++++++++++++++++++++ server/db/providers/cassandradb/provider.go | 17 +++++++++------- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/server/db/providers/cassandradb/env.go b/server/db/providers/cassandradb/env.go index 9e19f3e..569729f 100644 --- a/server/db/providers/cassandradb/env.go +++ b/server/db/providers/cassandradb/env.go @@ -1,9 +1,12 @@ package cassandradb import ( + "fmt" + "log" "time" "github.com/authorizerdev/authorizer/server/db/models" + "github.com/gocql/gocql" "github.com/google/uuid" ) @@ -15,12 +18,24 @@ func (p *provider) AddEnv(env models.Env) (models.Env, error) { env.CreatedAt = time.Now().Unix() env.UpdatedAt = time.Now().Unix() + insertEnvQuery := fmt.Sprintf("INSERT INTO %s (id, env, hash, created_at, updated_at) VALUES ('%s', '%s', '%s', %d, %d)", KeySpace+"."+models.Collections.Env, env.ID, env.EnvData, env.Hash, env.CreatedAt, env.UpdatedAt) + err := p.db.Query(insertEnvQuery).Exec() + if err != nil { + return env, err + } + return env, nil } // UpdateEnv to update environment information in database func (p *provider) UpdateEnv(env models.Env) (models.Env, error) { env.UpdatedAt = time.Now().Unix() + + updateEnvQuery := fmt.Sprintf("UPDATE %s SET env = '%s', updated_at = %d WHERE id = '%s'", KeySpace+"."+models.Collections.Env, env.EnvData, env.UpdatedAt, env.ID) + err := p.db.Query(updateEnvQuery).Exec() + if err != nil { + return env, err + } return env, nil } @@ -28,5 +43,12 @@ func (p *provider) UpdateEnv(env models.Env) (models.Env, error) { func (p *provider) GetEnv() (models.Env, error) { var env models.Env + query := fmt.Sprintf("SELECT id, env, hash, created_at, updated_at FROM %s LIMIT 1", KeySpace+"."+models.Collections.Env) + err := p.db.Query(query).Consistency(gocql.One).Scan(&env.ID, &env.EnvData, &env.Hash, &env.CreatedAt, &env.UpdatedAt) + if err != nil { + log.Println("=> error getting env", err) + return env, err + } + return env, nil } diff --git a/server/db/providers/cassandradb/provider.go b/server/db/providers/cassandradb/provider.go index 0c8ea4e..dc77aa3 100644 --- a/server/db/providers/cassandradb/provider.go +++ b/server/db/providers/cassandradb/provider.go @@ -14,12 +14,15 @@ type provider struct { db *cansandraDriver.Session } +// KeySpace for the cassandra database +var KeySpace string + // NewProvider to initialize arangodb connection func NewProvider() (*provider, error) { dbURL := envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL) - keySpace := envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseName) + KeySpace = envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseName) cassandraClient := cansandraDriver.NewCluster(dbURL) - // cassandraClient.Keyspace = keySpace + cassandraClient.RetryPolicy = &cansandraDriver.SimpleRetryPolicy{ NumRetries: 3, } @@ -32,7 +35,7 @@ func NewProvider() (*provider, error) { } keyspaceQuery := fmt.Sprintf("CREATE KEYSPACE IF NOT EXISTS %s WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor':1}", - keySpace) + KeySpace) err = session.Query(keyspaceQuery).Exec() if err != nil { log.Println("Unable to create keyspace:", err) @@ -41,21 +44,21 @@ func NewProvider() (*provider, error) { // make sure collections are present envCollectionQuery := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s.%s (id text, env text, hash text, updated_at bigint, created_at bigint, PRIMARY KEY (id))", - keySpace, models.Collections.Env) + KeySpace, models.Collections.Env) err = session.Query(envCollectionQuery).Exec() if err != nil { log.Println("Unable to create env collection:", err) return nil, err } - sessionCollectionQuery := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s.%s (id text, user_id text, user_agent text, ip text, updated_at bigint, created_at bigint, PRIMARY KEY (id))", keySpace, models.Collections.Session) + sessionCollectionQuery := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s.%s (id text, user_id text, user_agent text, ip text, updated_at bigint, created_at bigint, PRIMARY KEY (id))", KeySpace, models.Collections.Session) err = session.Query(sessionCollectionQuery).Exec() if err != nil { log.Println("Unable to create session collection:", err) return nil, err } - userCollectionQuery := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s.%s (id text, email text, email_verified_at bigint, password text, signup_methods text, given_name text, family_name text, middle_name text, nick_name text, gender text, birthdate text, phone_number text, phone_number_verified_at bigint, picture text, roles text, updated_at bigint, created_at bigint, revoked_timestamp bigint, PRIMARY KEY (id, email))", keySpace, models.Collections.User) + userCollectionQuery := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s.%s (id text, email text, email_verified_at bigint, password text, signup_methods text, given_name text, family_name text, middle_name text, nick_name text, gender text, birthdate text, phone_number text, phone_number_verified_at bigint, picture text, roles text, updated_at bigint, created_at bigint, revoked_timestamp bigint, PRIMARY KEY (id, email))", KeySpace, models.Collections.User) err = session.Query(userCollectionQuery).Exec() if err != nil { log.Println("Unable to create user collection:", err) @@ -63,7 +66,7 @@ func NewProvider() (*provider, error) { } // token is reserved keyword in cassandra, hence we need to use jwt_token - verificationRequestCollectionQuery := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s.%s (id text, jwt_token text, identifier text, expires_at bigint, email text, nonce text, redirect_uri text, created_at bigint, updated_at bigint, PRIMARY KEY (id, identifier, email))", keySpace, models.Collections.VerificationRequest) + verificationRequestCollectionQuery := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s.%s (id text, jwt_token text, identifier text, expires_at bigint, email text, nonce text, redirect_uri text, created_at bigint, updated_at bigint, PRIMARY KEY (id, identifier, email))", KeySpace, models.Collections.VerificationRequest) err = session.Query(verificationRequestCollectionQuery).Exec() if err != nil { log.Println("Unable to create verification request collection:", err)