diff --git a/go/apps/api/routes/v2_identities_create_identity/200_test.go b/go/apps/api/routes/v2_identities_create_identity/200_test.go index 81ad8c6a22..a7c50f8877 100644 --- a/go/apps/api/routes/v2_identities_create_identity/200_test.go +++ b/go/apps/api/routes/v2_identities_create_identity/200_test.go @@ -44,7 +44,7 @@ func TestCreateIdentitySuccessfully(t *testing.T) { ID: identityID, ExternalID: externalTestID, WorkspaceID: h.Resources().UserWorkspace.ID, - Meta: nil, + Meta: []byte("{}"), CreatedAt: time.Now().UnixMilli(), Environment: "default", }) @@ -66,7 +66,7 @@ func TestCreateIdentitySuccessfully(t *testing.T) { ID: identityID, ExternalID: externalTestID, WorkspaceID: h.Resources().UserWorkspace.ID, - Meta: nil, + Meta: []byte("{}"), CreatedAt: time.Now().UnixMilli(), Environment: "default", }) diff --git a/go/apps/api/routes/v2_identities_create_identity/handler.go b/go/apps/api/routes/v2_identities_create_identity/handler.go index d2b9a14e4d..7f94569455 100644 --- a/go/apps/api/routes/v2_identities_create_identity/handler.go +++ b/go/apps/api/routes/v2_identities_create_identity/handler.go @@ -82,7 +82,7 @@ func (h *Handler) Handle(ctx context.Context, s *zen.Session) error { return err } - var meta []byte + meta := []byte("{}") if req.Meta != nil { rawMeta, metaErr := json.Marshal(req.Meta) if metaErr != nil { diff --git a/go/apps/api/routes/v2_identities_delete_identity/200_test.go b/go/apps/api/routes/v2_identities_delete_identity/200_test.go index 2a36cba254..45f36faece 100644 --- a/go/apps/api/routes/v2_identities_delete_identity/200_test.go +++ b/go/apps/api/routes/v2_identities_delete_identity/200_test.go @@ -31,7 +31,7 @@ func createTestIdentity(t *testing.T, h *testutil.Harness, numberOfRatelimits in ID: identityID, ExternalID: externalID, WorkspaceID: h.Resources().UserWorkspace.ID, - Meta: nil, + Meta: []byte("{}"), CreatedAt: time.Now().UnixMilli(), Environment: "default", }) @@ -270,7 +270,7 @@ func TestDeleteIdentitySuccess(t *testing.T) { ID: newIdentityID, ExternalID: testIdentity.ExternalID, WorkspaceID: h.Resources().UserWorkspace.ID, - Meta: nil, + Meta: []byte("{}"), CreatedAt: time.Now().UnixMilli(), Environment: "default", }) diff --git a/go/apps/api/routes/v2_identities_delete_identity/403_test.go b/go/apps/api/routes/v2_identities_delete_identity/403_test.go index 2ce2b2c8be..9a2dfdd5f3 100644 --- a/go/apps/api/routes/v2_identities_delete_identity/403_test.go +++ b/go/apps/api/routes/v2_identities_delete_identity/403_test.go @@ -94,7 +94,7 @@ func TestDeleteIdentityForbidden(t *testing.T) { WorkspaceID: h.Resources().UserWorkspace.ID, Environment: "default", CreatedAt: time.Now().UnixMilli(), - Meta: nil, + Meta: []byte("{}"), }) require.NoError(t, err) diff --git a/go/apps/api/routes/v2_identities_delete_identity/404_test.go b/go/apps/api/routes/v2_identities_delete_identity/404_test.go index aa9cf04c02..7a01caadb5 100644 --- a/go/apps/api/routes/v2_identities_delete_identity/404_test.go +++ b/go/apps/api/routes/v2_identities_delete_identity/404_test.go @@ -71,7 +71,7 @@ func TestDeleteIdentityNotFound(t *testing.T) { WorkspaceID: h.Resources().UserWorkspace.ID, Environment: "default", CreatedAt: time.Now().UnixMilli(), - Meta: nil, + Meta: []byte("{}"), }) require.NoError(t, err) @@ -115,7 +115,7 @@ func TestDeleteIdentityNotFound(t *testing.T) { WorkspaceID: h.Resources().UserWorkspace.ID, Environment: "default", CreatedAt: time.Now().UnixMilli(), - Meta: nil, + Meta: []byte("{}"), }) require.NoError(t, err) @@ -150,7 +150,7 @@ func TestDeleteIdentityNotFound(t *testing.T) { WorkspaceID: h.Resources().UserWorkspace.ID, Environment: "default", CreatedAt: time.Now().UnixMilli(), - Meta: nil, + Meta: []byte("{}"), }) require.NoError(t, err) @@ -198,7 +198,7 @@ func TestDeleteIdentityNotFound(t *testing.T) { WorkspaceID: differentWorkspace.ID, Environment: "default", CreatedAt: time.Now().UnixMilli(), - Meta: nil, + Meta: []byte("{}"), }) require.NoError(t, err) diff --git a/go/apps/api/routes/v2_identities_get_identity/200_test.go b/go/apps/api/routes/v2_identities_get_identity/200_test.go index 033c955ead..dec6255959 100644 --- a/go/apps/api/routes/v2_identities_get_identity/200_test.go +++ b/go/apps/api/routes/v2_identities_get_identity/200_test.go @@ -171,7 +171,7 @@ func TestSuccess(t *testing.T) { Environment: "default", CreatedAt: time.Now().UnixMilli(), - Meta: nil, + Meta: []byte("{}"), }) require.NoError(t, err) @@ -206,7 +206,7 @@ func TestSuccess(t *testing.T) { Environment: "default", CreatedAt: time.Now().UnixMilli(), - Meta: nil, + Meta: []byte("{}"), }) require.NoError(t, err) @@ -240,7 +240,7 @@ func TestSuccess(t *testing.T) { Environment: customEnvironment, CreatedAt: time.Now().UnixMilli(), - Meta: nil, + Meta: []byte("{}"), }) require.NoError(t, err) @@ -374,7 +374,7 @@ func TestSuccess(t *testing.T) { Environment: "default", CreatedAt: time.Now().UnixMilli(), - Meta: nil, + Meta: []byte("{}"), }) require.NoError(t, err) @@ -454,7 +454,7 @@ func TestSuccess(t *testing.T) { WorkspaceID: h.Resources().UserWorkspace.ID, Environment: "default", CreatedAt: creationTime, - Meta: nil, + Meta: []byte("{}"), }) require.NoError(t, err) @@ -491,7 +491,7 @@ func TestSuccess(t *testing.T) { Environment: "default", CreatedAt: time.Now().UnixMilli(), - Meta: nil, + Meta: []byte("{}"), }) require.NoError(t, err) diff --git a/go/apps/api/routes/v2_identities_get_identity/403_test.go b/go/apps/api/routes/v2_identities_get_identity/403_test.go index a5cc678c1d..039f527f70 100644 --- a/go/apps/api/routes/v2_identities_get_identity/403_test.go +++ b/go/apps/api/routes/v2_identities_get_identity/403_test.go @@ -52,6 +52,7 @@ func TestForbidden(t *testing.T) { WorkspaceID: workspaceID, Environment: "default", CreatedAt: time.Now().UnixMilli(), + Meta: []byte("{}"), }) require.NoError(t, err) @@ -62,6 +63,7 @@ func TestForbidden(t *testing.T) { WorkspaceID: workspaceID, Environment: "default", CreatedAt: time.Now().UnixMilli(), + Meta: []byte("{}"), }) require.NoError(t, err) diff --git a/go/apps/api/routes/v2_identities_get_identity/404_test.go b/go/apps/api/routes/v2_identities_get_identity/404_test.go index 61abcfa4d3..a1b0c3e829 100644 --- a/go/apps/api/routes/v2_identities_get_identity/404_test.go +++ b/go/apps/api/routes/v2_identities_get_identity/404_test.go @@ -77,6 +77,7 @@ func TestNotFound(t *testing.T) { WorkspaceID: h.Resources().UserWorkspace.ID, Environment: "default", CreatedAt: time.Now().UnixMilli(), + Meta: []byte("{}"), }) require.NoError(t, err) diff --git a/go/apps/api/routes/v2_identities_list_identities/403_test.go b/go/apps/api/routes/v2_identities_list_identities/403_test.go index 2b21f75cae..c9bd4d3402 100644 --- a/go/apps/api/routes/v2_identities_list_identities/403_test.go +++ b/go/apps/api/routes/v2_identities_list_identities/403_test.go @@ -47,6 +47,7 @@ func TestForbidden(t *testing.T) { WorkspaceID: workspaceID, Environment: "default", CreatedAt: time.Now().UnixMilli(), + Meta: []byte("{}"), }) require.NoError(t, err) @@ -58,6 +59,7 @@ func TestForbidden(t *testing.T) { WorkspaceID: workspaceID, Environment: "production", CreatedAt: time.Now().UnixMilli(), + Meta: []byte("{}"), }) require.NoError(t, err) @@ -69,6 +71,7 @@ func TestForbidden(t *testing.T) { WorkspaceID: workspaceID, Environment: "staging", CreatedAt: time.Now().UnixMilli(), + Meta: []byte("{}"), }) require.NoError(t, err) diff --git a/go/apps/api/routes/v2_identities_list_identities/cross_workspace_test.go b/go/apps/api/routes/v2_identities_list_identities/cross_workspace_test.go index acd1764e4b..2d0b5d816f 100644 --- a/go/apps/api/routes/v2_identities_list_identities/cross_workspace_test.go +++ b/go/apps/api/routes/v2_identities_list_identities/cross_workspace_test.go @@ -60,6 +60,7 @@ func TestCrossWorkspaceForbidden(t *testing.T) { WorkspaceID: workspaceB, Environment: "default", CreatedAt: time.Now().UnixMilli(), + Meta: []byte("{}"), }) require.NoError(t, err) diff --git a/go/apps/api/routes/v2_identities_update_identity/200_test.go b/go/apps/api/routes/v2_identities_update_identity/200_test.go index bfdaebdad7..477861494e 100644 --- a/go/apps/api/routes/v2_identities_update_identity/200_test.go +++ b/go/apps/api/routes/v2_identities_update_identity/200_test.go @@ -75,7 +75,7 @@ func TestSuccess(t *testing.T) { WorkspaceID: workspaceID, Environment: "default", CreatedAt: time.Now().UnixMilli(), - Meta: nil, + Meta: []byte("{}"), }) require.NoError(t, err) diff --git a/go/apps/api/routes/v2_identities_update_identity/403_test.go b/go/apps/api/routes/v2_identities_update_identity/403_test.go index fc84e7bf4e..0010567d98 100644 --- a/go/apps/api/routes/v2_identities_update_identity/403_test.go +++ b/go/apps/api/routes/v2_identities_update_identity/403_test.go @@ -89,6 +89,7 @@ func TestForbidden(t *testing.T) { WorkspaceID: workspaceID, Environment: "default", CreatedAt: time.Now().UnixMilli(), + Meta: []byte("{}"), }) require.NoError(t, err) err = tx.Commit() diff --git a/go/pkg/db/audit_log_insert.sql_generated.go b/go/pkg/db/audit_log_insert.sql_generated.go index 5d40a500ed..85e512103b 100644 --- a/go/pkg/db/audit_log_insert.sql_generated.go +++ b/go/pkg/db/audit_log_insert.sql_generated.go @@ -8,6 +8,7 @@ package db import ( "context" "database/sql" + "encoding/json" ) const insertAuditLog = `-- name: InsertAuditLog :exec @@ -39,26 +40,26 @@ INSERT INTO ` + "`" + `audit_log` + "`" + ` ( ?, ?, ?, - ?, + CAST(? AS JSON), ? ) ` type InsertAuditLogParams struct { - ID string `db:"id"` - WorkspaceID string `db:"workspace_id"` - BucketID string `db:"bucket_id"` - Bucket string `db:"bucket"` - Event string `db:"event"` - Time int64 `db:"time"` - Display string `db:"display"` - RemoteIp sql.NullString `db:"remote_ip"` - UserAgent sql.NullString `db:"user_agent"` - ActorType string `db:"actor_type"` - ActorID string `db:"actor_id"` - ActorName sql.NullString `db:"actor_name"` - ActorMeta []byte `db:"actor_meta"` - CreatedAt int64 `db:"created_at"` + ID string `db:"id"` + WorkspaceID string `db:"workspace_id"` + BucketID string `db:"bucket_id"` + Bucket string `db:"bucket"` + Event string `db:"event"` + Time int64 `db:"time"` + Display string `db:"display"` + RemoteIp sql.NullString `db:"remote_ip"` + UserAgent sql.NullString `db:"user_agent"` + ActorType string `db:"actor_type"` + ActorID string `db:"actor_id"` + ActorName sql.NullString `db:"actor_name"` + ActorMeta json.RawMessage `db:"actor_meta"` + CreatedAt int64 `db:"created_at"` } // InsertAuditLog @@ -91,7 +92,7 @@ type InsertAuditLogParams struct { // ?, // ?, // ?, -// ?, +// CAST(? AS JSON), // ? // ) func (q *Queries) InsertAuditLog(ctx context.Context, db DBTX, arg InsertAuditLogParams) error { diff --git a/go/pkg/db/audit_log_target_insert.sql_generated.go b/go/pkg/db/audit_log_target_insert.sql_generated.go index 8ed952b300..4210d87e0c 100644 --- a/go/pkg/db/audit_log_target_insert.sql_generated.go +++ b/go/pkg/db/audit_log_target_insert.sql_generated.go @@ -8,6 +8,7 @@ package db import ( "context" "database/sql" + "encoding/json" ) const insertAuditLogTarget = `-- name: InsertAuditLogTarget :exec @@ -31,22 +32,22 @@ INSERT INTO ` + "`" + `audit_log_target` + "`" + ` ( ?, ?, ?, - ?, + CAST(? AS JSON), ? ) ` type InsertAuditLogTargetParams struct { - WorkspaceID string `db:"workspace_id"` - BucketID string `db:"bucket_id"` - Bucket string `db:"bucket"` - AuditLogID string `db:"audit_log_id"` - DisplayName string `db:"display_name"` - Type string `db:"type"` - ID string `db:"id"` - Name sql.NullString `db:"name"` - Meta []byte `db:"meta"` - CreatedAt int64 `db:"created_at"` + WorkspaceID string `db:"workspace_id"` + BucketID string `db:"bucket_id"` + Bucket string `db:"bucket"` + AuditLogID string `db:"audit_log_id"` + DisplayName string `db:"display_name"` + Type string `db:"type"` + ID string `db:"id"` + Name sql.NullString `db:"name"` + Meta json.RawMessage `db:"meta"` + CreatedAt int64 `db:"created_at"` } // InsertAuditLogTarget @@ -71,7 +72,7 @@ type InsertAuditLogTargetParams struct { // ?, // ?, // ?, -// ?, +// CAST(? AS JSON), // ? // ) func (q *Queries) InsertAuditLogTarget(ctx context.Context, db DBTX, arg InsertAuditLogTargetParams) error { diff --git a/go/pkg/db/identity_insert.sql_generated.go b/go/pkg/db/identity_insert.sql_generated.go index a3e8c97be2..be34690f14 100644 --- a/go/pkg/db/identity_insert.sql_generated.go +++ b/go/pkg/db/identity_insert.sql_generated.go @@ -7,6 +7,7 @@ package db import ( "context" + "encoding/json" ) const insertIdentity = `-- name: InsertIdentity :exec @@ -23,17 +24,17 @@ INSERT INTO ` + "`" + `identities` + "`" + ` ( ?, ?, ?, - ? + CAST(? AS JSON) ) ` type InsertIdentityParams struct { - ID string `db:"id"` - ExternalID string `db:"external_id"` - WorkspaceID string `db:"workspace_id"` - Environment string `db:"environment"` - CreatedAt int64 `db:"created_at"` - Meta []byte `db:"meta"` + ID string `db:"id"` + ExternalID string `db:"external_id"` + WorkspaceID string `db:"workspace_id"` + Environment string `db:"environment"` + CreatedAt int64 `db:"created_at"` + Meta json.RawMessage `db:"meta"` } // InsertIdentity @@ -51,7 +52,7 @@ type InsertIdentityParams struct { // ?, // ?, // ?, -// ? +// CAST(? AS JSON) // ) func (q *Queries) InsertIdentity(ctx context.Context, db DBTX, arg InsertIdentityParams) error { _, err := db.ExecContext(ctx, insertIdentity, diff --git a/go/pkg/db/identity_update.sql_generated.go b/go/pkg/db/identity_update.sql_generated.go index 8a745726f9..b29ecf3d5f 100644 --- a/go/pkg/db/identity_update.sql_generated.go +++ b/go/pkg/db/identity_update.sql_generated.go @@ -7,27 +7,28 @@ package db import ( "context" + "encoding/json" ) const updateIdentity = `-- name: UpdateIdentity :exec -UPDATE ` + "`" + `identities` + "`" + ` -SET - meta = ?, +UPDATE ` + "`" + `identities` + "`" + ` +SET + meta = CAST(? AS JSON), updated_at = NOW() -WHERE +WHERE id = ? ` type UpdateIdentityParams struct { - Meta []byte `db:"meta"` - ID string `db:"id"` + Meta json.RawMessage `db:"meta"` + ID string `db:"id"` } // UpdateIdentity // // UPDATE `identities` // SET -// meta = ?, +// meta = CAST(? AS JSON), // updated_at = NOW() // WHERE // id = ? diff --git a/go/pkg/db/querier_generated.go b/go/pkg/db/querier_generated.go index 127c7c6749..c2679613bc 100644 --- a/go/pkg/db/querier_generated.go +++ b/go/pkg/db/querier_generated.go @@ -396,7 +396,7 @@ type Querier interface { // ?, // ?, // ?, - // ?, + // CAST(? AS JSON), // ? // ) InsertAuditLog(ctx context.Context, db DBTX, arg InsertAuditLogParams) error @@ -422,7 +422,7 @@ type Querier interface { // ?, // ?, // ?, - // ?, + // CAST(? AS JSON), // ? // ) InsertAuditLogTarget(ctx context.Context, db DBTX, arg InsertAuditLogTargetParams) error @@ -475,7 +475,7 @@ type Querier interface { // ?, // ?, // ?, - // ? + // CAST(? AS JSON) // ) InsertIdentity(ctx context.Context, db DBTX, arg InsertIdentityParams) error //InsertIdentityRatelimit @@ -1017,7 +1017,7 @@ type Querier interface { // // UPDATE `identities` // SET - // meta = ?, + // meta = CAST(? AS JSON), // updated_at = NOW() // WHERE // id = ? diff --git a/go/pkg/db/queries/audit_log_insert.sql b/go/pkg/db/queries/audit_log_insert.sql index ea3c22dbdc..b51fe497af 100644 --- a/go/pkg/db/queries/audit_log_insert.sql +++ b/go/pkg/db/queries/audit_log_insert.sql @@ -27,6 +27,6 @@ INSERT INTO `audit_log` ( sqlc.arg(actor_type), sqlc.arg(actor_id), sqlc.arg(actor_name), - sqlc.arg(actor_meta), + CAST(sqlc.arg(actor_meta) AS JSON), sqlc.arg(created_at) ); diff --git a/go/pkg/db/queries/audit_log_target_insert.sql b/go/pkg/db/queries/audit_log_target_insert.sql index 016befc63e..93a5ecc6b8 100644 --- a/go/pkg/db/queries/audit_log_target_insert.sql +++ b/go/pkg/db/queries/audit_log_target_insert.sql @@ -19,6 +19,6 @@ INSERT INTO `audit_log_target` ( sqlc.arg(type), sqlc.arg(id), sqlc.arg(name), - sqlc.arg(meta), + CAST(sqlc.arg(meta) AS JSON), sqlc.arg(created_at) ); diff --git a/go/pkg/db/queries/identity_insert.sql b/go/pkg/db/queries/identity_insert.sql index e459f7d169..21bee4dc09 100644 --- a/go/pkg/db/queries/identity_insert.sql +++ b/go/pkg/db/queries/identity_insert.sql @@ -12,5 +12,5 @@ INSERT INTO `identities` ( sqlc.arg('workspace_id'), sqlc.arg('environment'), sqlc.arg('created_at'), - sqlc.arg('meta') + CAST(sqlc.arg('meta') AS JSON) ); diff --git a/go/pkg/db/queries/identity_update.sql b/go/pkg/db/queries/identity_update.sql index f76fc42db1..7b0eedced8 100644 --- a/go/pkg/db/queries/identity_update.sql +++ b/go/pkg/db/queries/identity_update.sql @@ -1,7 +1,7 @@ -- name: UpdateIdentity :exec -UPDATE `identities` -SET - meta = sqlc.arg('meta'), +UPDATE `identities` +SET + meta = CAST(sqlc.arg('meta') AS JSON), updated_at = NOW() -WHERE - id = sqlc.arg('id'); \ No newline at end of file +WHERE + id = sqlc.arg('id'); diff --git a/go/pkg/testutil/containers/mysql.go b/go/pkg/testutil/containers/mysql.go index 0fda782714..f3a3386ece 100644 --- a/go/pkg/testutil/containers/mysql.go +++ b/go/pkg/testutil/containers/mysql.go @@ -105,6 +105,7 @@ func (c *Containers) RunMySQL() (hostCfg, dockerCfg *mysql.Config) { cfg.Addr = fmt.Sprintf("localhost:%s", resource.GetPort("3306/tcp")) cfg.DBName = "" // Explicitly no database name in base DSN cfg.ParseTime = true + cfg.InterpolateParams = true cfg.Logger = &mysql.NopLogger{} var conn *sql.DB