Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature(imports) support jwt config for get all resource in meta #93

Merged
merged 2 commits into from
Feb 11, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions config.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ type Config struct {
Environment string `mapstructure:"ENVIRONMENT"`
GoogleProjectId string `mapstructure:"GOOGLE_PROJECT_ID"`
GoogleSaPath string `mapstructure:"GOOGLE_SA_PATH"`
JwtToken string `mapstructure:"JWT_TOKEN"`
MaxServerRequestBodySize int `mapstructure:"MAX_SERVER_REQUEST_BODY_SIZE"`
Mode Mode `mapstructure:"MODE"`
PgMetaUrl string `mapstructure:"PG_META_URL"`
Expand Down
2 changes: 1 addition & 1 deletion pkg/client/net/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,8 @@ func SendRequest(method string, url string, body []byte, timeout time.Duration,
}
}

Logger.Trace("net.request", "url", url)
Logger.Trace("net.request", "timeout", reqTimeout)
Logger.Trace("net.request", "headers", req.Header)
Logger.Trace("net.request", "body", string(body))

resp, err := GetClient().Do(req)
Expand Down
38 changes: 38 additions & 0 deletions pkg/connector/pgmeta/common.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package pgmeta

import (
"encoding/json"
"fmt"
"net/http"

"github.com/sev-2/raiden/pkg/client/net"
"github.com/sev-2/raiden/pkg/logger"
)

var MetaLogger = logger.HcLog().Named("connector.meta")

func DefaultAuthInterceptor(accessToken string) func(req *http.Request) error {
return func(req *http.Request) error {
if accessToken != "" {
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", accessToken))
}
return nil
}
}

// ----- Execute Query -----
type ExecuteQueryParam struct {
Query string `json:"query"`
Variables any `json:"variables"`
}

func ExecuteQuery[T any](baseUrl, query string, variables any, reqInterceptor net.RequestInterceptor, resInterceptor net.ResponseInterceptor) (result T, err error) {
url := fmt.Sprintf("%s/query", baseUrl)
p := ExecuteQueryParam{Query: query, Variables: variables}
pByte, err := json.Marshal(p)
if err != nil {
MetaLogger.Error("error execute query", "query", query)
return result, err
}

Check warning on line 36 in pkg/connector/pgmeta/common.go

View check run for this annotation

Codecov / codecov/patch

pkg/connector/pgmeta/common.go#L34-L36

Added lines #L34 - L36 were not covered by tests
return net.Post[T](url, pByte, net.DefaultTimeout, reqInterceptor, resInterceptor)
}
2 changes: 1 addition & 1 deletion pkg/connector/pgmeta/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (

func GetIndexes(cfg *raiden.Config, schema string) ([]objects.Index, error) {
MetaLogger.Trace("start fetching indexes from meta")
rs, err := ExecuteQuery[[]objects.Index](cfg.PgMetaUrl, sql.GenerateGetIndexQuery(schema), nil, nil, nil)
rs, err := ExecuteQuery[[]objects.Index](cfg.PgMetaUrl, sql.GenerateGetIndexQuery(schema), nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
err = fmt.Errorf("get indexes error : %s", err)
return []objects.Index{}, err
Expand Down
53 changes: 18 additions & 35 deletions pkg/connector/pgmeta/table.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package pgmeta

import (
"encoding/json"
"errors"
"fmt"
"net/http"
Expand All @@ -11,31 +10,11 @@ import (

"github.com/sev-2/raiden"
"github.com/sev-2/raiden/pkg/client/net"
"github.com/sev-2/raiden/pkg/logger"
"github.com/sev-2/raiden/pkg/supabase/objects"
"github.com/sev-2/raiden/pkg/supabase/query"
"github.com/sev-2/raiden/pkg/supabase/query/sql"
)

var MetaLogger = logger.HcLog().Named("connector.meta")

// ----- Execute Query -----
type ExecuteQueryParam struct {
Query string `json:"query"`
Variables any `json:"variables"`
}

func ExecuteQuery[T any](baseUrl, query string, variables any, reqInterceptor net.RequestInterceptor, resInterceptor net.ResponseInterceptor) (result T, err error) {
url := fmt.Sprintf("%s/query", baseUrl)
p := ExecuteQueryParam{Query: query, Variables: variables}
pByte, err := json.Marshal(p)
if err != nil {
MetaLogger.Error("error execute query", "query", query)
return result, err
}
return net.Post[T](url, pByte, net.DefaultTimeout, reqInterceptor, resInterceptor)
}

func GetTables(cfg *raiden.Config, includedSchemas []string, includeColumns bool) ([]objects.Table, error) {
MetaLogger.Trace("start fetching tables from meta")
url := fmt.Sprintf("%s/tables", cfg.PgMetaUrl)
Expand All @@ -49,6 +28,10 @@ func GetTables(cfg *raiden.Config, includedSchemas []string, includeColumns bool
req.URL.Query().Set("include_columns", strconv.FormatBool(includeColumns))
}

if len(cfg.JwtToken) > 0 {
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", cfg.JwtToken))
}

return nil
}

Expand All @@ -68,7 +51,7 @@ func GetTableByName(cfg *raiden.Config, name, schema string, includeColumn bool)
return result, err
}

rs, err := ExecuteQuery[[]objects.Table](cfg.PgMetaUrl, q, nil, nil, nil)
rs, err := ExecuteQuery[[]objects.Table](cfg.PgMetaUrl, q, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
err = fmt.Errorf("get tables error : %s", err)
return
Expand All @@ -95,7 +78,7 @@ func CreateTable(cfg *raiden.Config, newTable objects.Table) (result objects.Tab
}

// execute update
_, err = ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, nil, nil)
_, err = ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return result, fmt.Errorf("create new table %s error : %s", newTable.Name, err)
}
Expand All @@ -107,7 +90,7 @@ func UpdateTable(cfg *raiden.Config, newTable objects.Table, updateItem objects.
MetaLogger.Trace("start update table", "name", newTable.Name)
sql := query.BuildUpdateTableQuery(newTable, updateItem)
// execute update
_, err := ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, nil, nil)
_, err := ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return fmt.Errorf("update tables error : %s", err)
}
Expand Down Expand Up @@ -142,7 +125,7 @@ func DeleteTable(cfg *raiden.Config, table objects.Table, cascade bool) error {
MetaLogger.Trace("start delete table", "name", table.Name)
sql := query.BuildDeleteTableQuery(table, true)
// execute delete
_, err := ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, nil, nil)
_, err := ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return fmt.Errorf("delete table %s error : %s", table.Name, err)
}
Expand All @@ -155,7 +138,7 @@ func GetTableRelationshipActions(cfg *raiden.Config, schema string) ([]objects.T
MetaLogger.Trace("start fetching table relationships from pg-meta")
q := sql.GenerateGetTableRelationshipActionsQuery(schema)

rs, err := ExecuteQuery[[]objects.TablesRelationshipAction](cfg.PgMetaUrl, q, nil, nil, nil)
rs, err := ExecuteQuery[[]objects.TablesRelationshipAction](cfg.PgMetaUrl, q, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return rs, fmt.Errorf("get tables relation from pg-meta error : %s", err)
}
Expand Down Expand Up @@ -265,7 +248,7 @@ func CreateColumn(cfg *raiden.Config, column objects.Column, isPrimary bool) err
}

// Execute SQL Query
_, err = ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, nil, nil)
_, err = ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return fmt.Errorf("create column %s.%s error : %s", column.Table, column.Name, err)
}
Expand All @@ -279,7 +262,7 @@ func UpdateColumn(cfg *raiden.Config, oldColumn, newColumn objects.Column, updat
sql := query.BuildUpdateColumnQuery(oldColumn, newColumn, updateItem)

// Execute SQL Query
_, err := ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, nil, nil)
_, err := ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return fmt.Errorf("update column %s.%s error : %s", newColumn.Table, newColumn.Name, err)
}
Expand All @@ -290,7 +273,7 @@ func UpdateColumn(cfg *raiden.Config, oldColumn, newColumn objects.Column, updat
func DeleteColumn(cfg *raiden.Config, column objects.Column) error {
MetaLogger.Trace("start delete column", "table", column.Table, "name", column.Name)
sql := query.BuildDeleteColumnQuery(column)
_, err := ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, nil, nil)
_, err := ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return fmt.Errorf("delete column %s.%s error : %s", column.Table, column.Name, err)
}
Expand Down Expand Up @@ -397,7 +380,7 @@ func createForeignKey(cfg *raiden.Config, relation *objects.TablesRelationship)
return err
}

_, err = ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, nil, nil)
_, err = ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return fmt.Errorf("create foreign key %s.%s error : %s", relation.SourceTableName, relation.SourceColumnName, err)
}
Expand All @@ -406,7 +389,7 @@ func createForeignKey(cfg *raiden.Config, relation *objects.TablesRelationship)
if indexSql, err := query.BuildFKIndexQuery(objects.UpdateRelationCreate, relation); err != nil {
return err
} else if len(indexSql) > 0 {
_, err = ExecuteQuery[any](cfg.PgMetaUrl, indexSql, nil, nil, nil)
_, err = ExecuteQuery[any](cfg.PgMetaUrl, indexSql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return fmt.Errorf("create foreign index %s.%s error : %s", relation.SourceTableName, relation.SourceColumnName, err)
}
Expand All @@ -429,7 +412,7 @@ func updateForeignKey(cfg *raiden.Config, relation *objects.TablesRelationship)
}

sql := deleteSql + createSql
_, err = ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, nil, nil)
_, err = ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return fmt.Errorf("update foreign key %s.%s error : %s", relation.SourceTableName, relation.SourceColumnName, err)
}
Expand All @@ -439,7 +422,7 @@ func updateForeignKey(cfg *raiden.Config, relation *objects.TablesRelationship)
if indexSql, err := query.BuildFKIndexQuery(objects.UpdateRelationCreate, relation); err != nil {
return err
} else if len(indexSql) > 0 {
_, err = ExecuteQuery[any](cfg.PgMetaUrl, indexSql, nil, nil, nil)
_, err = ExecuteQuery[any](cfg.PgMetaUrl, indexSql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return fmt.Errorf("create foreign index %s.%s error : %s", relation.SourceTableName, relation.SourceColumnName, err)
}
Expand All @@ -458,7 +441,7 @@ func deleteForeignKey(cfg *raiden.Config, relation *objects.TablesRelationship)
return err
}

_, err = ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, nil, nil)
_, err = ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return fmt.Errorf("delete foreign key %s.%s error : %s", relation.SourceTableName, relation.SourceColumnName, err)
}
Expand All @@ -468,7 +451,7 @@ func deleteForeignKey(cfg *raiden.Config, relation *objects.TablesRelationship)
if indexSql, err := query.BuildFKIndexQuery(objects.UpdateRelationDelete, relation); err != nil {
return err
} else if len(indexSql) > 0 {
_, err = ExecuteQuery[any](cfg.PgMetaUrl, indexSql, nil, nil, nil)
_, err = ExecuteQuery[any](cfg.PgMetaUrl, indexSql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return fmt.Errorf("delete foreign index %s.%s error : %s", relation.SourceTableName, relation.SourceColumnName, err)
}
Expand Down
6 changes: 6 additions & 0 deletions pkg/connector/pgmeta/table_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ func TestCreateTable(t *testing.T) {
cfg := &raiden.Config{
PgMetaUrl: "http://example.com",
ProjectId: "test_project",
JwtToken: "meta token",
}

// Define the new table to be created
Expand Down Expand Up @@ -93,6 +94,7 @@ func TestGetTables(t *testing.T) {
cfg := &raiden.Config{
PgMetaUrl: "http://example.com",
ProjectId: "test_project",
JwtToken: "meta token",
}

// Mock the response for the GetTableByName call
Expand Down Expand Up @@ -131,6 +133,7 @@ func TestUpdateTable(t *testing.T) {
cfg := &raiden.Config{
PgMetaUrl: "http://example.com",
ProjectId: "test_project",
JwtToken: "meta token",
}

// Mock the response for the GetTableByName call
Expand Down Expand Up @@ -236,6 +239,7 @@ func TestUpdateTable_Err(t *testing.T) {
cfg := &raiden.Config{
PgMetaUrl: "http://example.com",
ProjectId: "test_project",
JwtToken: "meta token",
}

// Mock the response for the GetTableByName call
Expand Down Expand Up @@ -307,6 +311,7 @@ func TestUpdateTable_RelationUpdate(t *testing.T) {
cfg := &raiden.Config{
PgMetaUrl: "http://example.com",
ProjectId: "test_project",
JwtToken: "meta token",
}

// Mock the response for the GetTableByName call
Expand Down Expand Up @@ -474,6 +479,7 @@ func TestDeleteTable(t *testing.T) {
cfg := &raiden.Config{
PgMetaUrl: "http://example.com",
ProjectId: "test_project",
JwtToken: "meta token",
}

// Mock the response for the GetTableByName call
Expand Down
10 changes: 7 additions & 3 deletions pkg/connector/pgmeta/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@
req.URL.Query().Set("included_schemas", strings.Join(includedSchemas, ","))
}

if len(cfg.JwtToken) > 0 {
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", cfg.JwtToken))
}

Check warning on line 26 in pkg/connector/pgmeta/type.go

View check run for this annotation

Codecov / codecov/patch

pkg/connector/pgmeta/type.go#L25-L26

Added lines #L25 - L26 were not covered by tests

return nil
}

Expand All @@ -35,7 +39,7 @@
func GetTypeByName(cfg *raiden.Config, includedSchema []string, name string) (result objects.Type, err error) {
MetaLogger.Trace("start fetching type by name from meta")
sql := sql.GenerateTypeQuery(includedSchema, name) + " limit 1"
rs, err := ExecuteQuery[[]objects.Type](cfg.PgMetaUrl, sql, nil, nil, nil)
rs, err := ExecuteQuery[[]objects.Type](cfg.PgMetaUrl, sql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
err = fmt.Errorf("get type error : %s", err)
return
Expand All @@ -53,7 +57,7 @@
MetaLogger.Trace("start create type", "name", t.Name)
// Execute SQL Query
sql, _ := query.BuildTypeQuery(query.TypeActionCreate, &t)
_, err := ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, nil, nil)
_, err := ExecuteQuery[any](cfg.PgMetaUrl, sql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return objects.Type{}, fmt.Errorf("create new type %s error : %s", t.Name, err)
}
Expand All @@ -78,7 +82,7 @@
func UpdateType(cfg *raiden.Config, t objects.Type) error {
MetaLogger.Trace("start update type", "name", t.Name)
updateSql, _ := query.BuildTypeQuery(query.TypeActionUpdate, &t)
_, err := ExecuteQuery[any](cfg.PgMetaUrl, updateSql, nil, nil, nil)
_, err := ExecuteQuery[any](cfg.PgMetaUrl, updateSql, nil, DefaultAuthInterceptor(cfg.JwtToken), nil)
if err != nil {
return fmt.Errorf("update type %s error : %s", t.Name, err)
}
Expand Down
1 change: 1 addition & 0 deletions pkg/generator/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ SUPABASE_PUBLIC_URL: {{ .SupabasePublicUrl }}
{{- if eq .Mode "svc"}}
POSTGREST_URL: {{ .PostgRestUrl }}
PG_META_URL: {{ .PgMetaUrl }}
JWT_TOKEN: {{ .JwtToken }}
{{- end}}
SERVER_HOST: {{ .ServerHost }}
SERVER_PORT: {{ .ServerPort }}
Expand Down