From 175a16a96a46bba6754389fa070005697b064373 Mon Sep 17 00:00:00 2001 From: Vernon Keenan Date: Fri, 24 Jul 2026 08:33:33 -0700 Subject: [PATCH] feat(members): add governed Database metadata client (#28) --- .../database_metadata_contract_test.go | 184 +++++++ .../databases/databases_client.go | 158 +----- .../databases/get_databases_parameters.go | 57 ++- .../databases/get_databases_responses.go | 8 +- .../databases/post_databases_parameters.go | 159 ------ .../databases/post_databases_responses.go | 484 ------------------ .../databases/put_databases_parameters.go | 159 ------ .../databases/put_databases_responses.go | 484 ------------------ .../members_client/learning_contract_test.go | 4 +- .../members_client/track_contract_test.go | 4 +- .../members_models/database_metadata.go | 172 +++++++ .../database_metadata_response.go | 191 +++++++ docs/MEMBERS_DATABASE_METADATA_CLIENT.md | 28 + swagger/external/members-vernonkeenan.yaml | 124 +++-- swagger/members-vernonkeenan.yaml | 124 +++-- 15 files changed, 784 insertions(+), 1556 deletions(-) create mode 100644 api/members/members_client/database_metadata_contract_test.go delete mode 100644 api/members/members_client/databases/post_databases_parameters.go delete mode 100644 api/members/members_client/databases/post_databases_responses.go delete mode 100644 api/members/members_client/databases/put_databases_parameters.go delete mode 100644 api/members/members_client/databases/put_databases_responses.go create mode 100644 api/members/members_models/database_metadata.go create mode 100644 api/members/members_models/database_metadata_response.go create mode 100644 docs/MEMBERS_DATABASE_METADATA_CLIENT.md diff --git a/api/members/members_client/database_metadata_contract_test.go b/api/members/members_client/database_metadata_contract_test.go new file mode 100644 index 0000000..2c63e7d --- /dev/null +++ b/api/members/members_client/database_metadata_contract_test.go @@ -0,0 +1,184 @@ +package members_client_test + +import ( + "context" + "os" + "path/filepath" + "reflect" + "regexp" + "strings" + "testing" + + "code.tnxs.net/vernonkeenan/lib/api/members/members_client" + "code.tnxs.net/vernonkeenan/lib/api/members/members_client/databases" + "code.tnxs.net/vernonkeenan/lib/api/members/members_models" + openapiruntime "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" +) + +type databaseMetadataCaptureTransport struct { + operation *openapiruntime.ClientOperation +} + +func (transport *databaseMetadataCaptureTransport) Submit( + operation *openapiruntime.ClientOperation, +) (any, error) { + return transport.SubmitContext(context.Background(), operation) +} + +func (transport *databaseMetadataCaptureTransport) SubmitContext( + _ context.Context, + operation *openapiruntime.ClientOperation, +) (any, error) { + transport.operation = operation + if operation.ID != "getDatabases" { + panic("unexpected generated Database metadata operation: " + operation.ID) + } + return databases.NewGetDatabasesOK(), nil +} + +func TestGeneratedDatabaseMetadataOperationIsFixedReadOnlyAndAuthenticated(t *testing.T) { + transport := &databaseMetadataCaptureTransport{} + auth := openapiruntime.ClientAuthInfoWriterFunc( + func(openapiruntime.ClientRequest, strfmt.Registry) error { return nil }, + ) + tenantID := strfmt.UUID("77777777-7777-4777-8777-777777777777") + databaseID := strfmt.UUID("88888888-8888-4888-8888-888888888888") + params := databases.NewGetDatabasesParams(). + WithTenantID(tenantID). + WithDatabaseID(&databaseID) + _, err := databases.New(transport, strfmt.Default).GetDatabases(params, auth) + if err != nil { + t.Fatalf("generated Database metadata operation failed: %v", err) + } + if transport.operation == nil { + t.Fatal("generated client did not submit an operation") + } + if transport.operation.ID != "getDatabases" || + transport.operation.Method != "GET" || + transport.operation.PathPattern != "/databases" { + t.Fatalf( + "operation = %s %s %s, want getDatabases GET /databases", + transport.operation.ID, + transport.operation.Method, + transport.operation.PathPattern, + ) + } + if transport.operation.AuthInfo == nil { + t.Fatal("generated operation discarded its compound auth writer") + } + if params.TenantID != tenantID || params.DatabaseID == nil || + *params.DatabaseID != databaseID { + t.Fatal("generated Database metadata client lost tenant or record filter") + } +} + +func TestDatabaseMetadataSpecRequiresExactScopeTenantAndCompoundAuth(t *testing.T) { + specText := readMembersLearningSpec(t) + pathBlock := learningSpecPathBlock(t, specText, "/databases") + for _, forbidden := range []string{" post:", " put:", " patch:", " delete:"} { + if strings.Contains(pathBlock, forbidden) { + t.Errorf("/databases exposes unsupported %s", strings.TrimSpace(forbidden)) + } + } + block := learningSpecOperationBlock(t, specText, "/databases", "get") + for _, required := range []string{ + " operationId: getDatabases\n", + "members:database:read", + `- $ref: "#/parameters/databaseTenantId"`, + " security:\n - ApiKeyAuth: []\n kvSessionCookie: []", + } { + if !strings.Contains(block, required) { + t.Errorf("GET /databases lost required contract %q", required) + } + } +} + +func TestDatabaseMetadataModelContainsOnlyCredentialFreeFields(t *testing.T) { + assertExactModelFields(t, members_models.DatabaseMetadata{}, map[string]string{ + "Active": "*bool", + "ClusterID": "*strfmt.UUID", + "CreatedDate": "*strfmt.DateTime", + "DatabaseName": "*string", + "ID": "*strfmt.UUID", + "LastModifiedDate": "*strfmt.DateTime", + "Status": "*string", + "TenantID": "*strfmt.UUID", + "Type": "*string", + }) +} + +func TestDatabaseMetadataClientHasNoProvisioningMutation(t *testing.T) { + contract := reflect.TypeOf((*databases.ClientService)(nil)).Elem() + for index := 0; index < contract.NumMethod(); index++ { + method := contract.Method(index).Name + for _, forbidden := range []string{ + "Post", "Put", "Patch", "Delete", "Create", "Update", + "Provision", "DSN", "Credential", + } { + if strings.Contains(method, forbidden) { + t.Errorf("Database metadata client exposes forbidden method %s", method) + } + } + } + root := reflect.TypeOf(members_client.Members{}) + if _, exists := root.FieldByName("Databases"); !exists { + t.Fatal("root Members client does not expose Database metadata") + } +} + +func TestGeneratedDatabaseMetadataSurfaceHasNoRetiredOrSecretCoupling(t *testing.T) { + repoRoot := learningRepoRoot(t) + targets := []string{ + filepath.Join(repoRoot, "api", "members", "members_client", "databases"), + filepath.Join( + repoRoot, "api", "members", "members_models", "database_metadata.go", + ), + filepath.Join( + repoRoot, + "api", + "members", + "members_models", + "database_metadata_response.go", + ), + } + credentialLiteral := regexp.MustCompile( + `(?i)(api[_-]?key|password|secret)\s*[:=]\s*["'][^"']+["']`, + ) + for _, target := range targets { + err := filepath.WalkDir(target, func( + path string, + entry os.DirEntry, + walkErr error, + ) error { + if walkErr != nil { + return walkErr + } + if entry.IsDir() || !strings.HasSuffix(path, ".go") || + strings.HasSuffix(path, "_test.go") { + return nil + } + content, err := os.ReadFile(path) + if err != nil { + return err + } + lower := strings.ToLower(string(content)) + for _, forbidden := range []string{ + "salesforce", "sf-gate", "go-force", "cache", + "processortoken", + "postdatabases", "putdatabases", "deletedatabases", + } { + if strings.Contains(lower, forbidden) { + t.Errorf("%s contains forbidden boundary %q", path, forbidden) + } + } + if credentialLiteral.Match(content) { + t.Errorf("%s contains a credential-shaped literal", path) + } + return nil + }) + if err != nil { + t.Fatalf("scan generated Database metadata target %s: %v", target, err) + } + } +} diff --git a/api/members/members_client/databases/databases_client.go b/api/members/members_client/databases/databases_client.go index dbe077d..6d56826 100644 --- a/api/members/members_client/databases/databases_client.go +++ b/api/members/members_client/databases/databases_client.go @@ -60,30 +60,18 @@ type ClientOption func(*runtime.ClientOperation) // ClientService is the interface for Client methods. type ClientService interface { - // GetDatabases get a list databases. + // GetDatabases get sanitized database metadata. GetDatabases(params *GetDatabasesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetDatabasesOK, error) - // GetDatabasesContext get a list databases. + // GetDatabasesContext get sanitized database metadata. GetDatabasesContext(ctx context.Context, params *GetDatabasesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetDatabasesOK, error) - // PostDatabases create new databases. - PostDatabases(params *PostDatabasesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PostDatabasesOK, error) - - // PostDatabasesContext create new databases. - PostDatabasesContext(ctx context.Context, params *PostDatabasesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PostDatabasesOK, error) - - // PutDatabases update databases. - PutDatabases(params *PutDatabasesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PutDatabasesOK, error) - - // PutDatabasesContext update databases. - PutDatabasesContext(ctx context.Context, params *PutDatabasesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PutDatabasesOK, error) - SetTransport(transport runtime.ContextualTransport) } -// GetDatabases gets a list databases. +// GetDatabases gets sanitized database metadata. // -// Return a list of Database records from the datastore. +// Tenant-bound read of sanitized Database metadata. Requires members:database:read and active human membership. DSN, provisioning credentials, and audit identities are absent. Provisioning writes remain unavailable.. // // This method does not support injected context. // However, timeout and opentracing contexts are honored whenever enabled. @@ -100,9 +88,9 @@ func (a *Client) GetDatabases(params *GetDatabasesParams, authInfo runtime.Clien return a.GetDatabasesContext(ctx, params, authInfo, opts...) } -// GetDatabasesContext gets a list databases. +// GetDatabasesContext gets sanitized database metadata. // -// Return a list of Database records from the datastore. +// Tenant-bound read of sanitized Database metadata. Requires members:database:read and active human membership. DSN, provisioning credentials, and audit identities are absent. Provisioning writes remain unavailable.. // // Do not use the deprecated [GetDatabasesParams.Context] with this method: it would be ignored. func (a *Client) GetDatabasesContext(ctx context.Context, params *GetDatabasesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetDatabasesOK, error) { @@ -148,140 +136,6 @@ func (a *Client) GetDatabasesContext(ctx context.Context, params *GetDatabasesPa panic(msg) } -// PostDatabases creates new databases. -// -// Create Databases. -// -// This method does not support injected context. -// However, timeout and opentracing contexts are honored whenever enabled. -// -// If you need to pass a specific context, use [Client.PostDatabasesContext] instead. -func (a *Client) PostDatabases(params *PostDatabasesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PostDatabasesOK, error) { - var ctx context.Context - if params.inner.ctx != nil { - ctx = params.inner.ctx - } else { - ctx = context.Background() - } - - return a.PostDatabasesContext(ctx, params, authInfo, opts...) -} - -// PostDatabasesContext creates new databases. -// -// Create Databases. -// -// Do not use the deprecated [PostDatabasesParams.Context] with this method: it would be ignored. -func (a *Client) PostDatabasesContext(ctx context.Context, params *PostDatabasesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PostDatabasesOK, error) { - // NOTE: parameters are not validated before sending - if params == nil { - params = NewPostDatabasesParams() - } - - op := &runtime.ClientOperation{ - ID: "postDatabases", - Method: "POST", - PathPattern: "/databases", - ProducesMediaTypes: []string{"application/json"}, - ConsumesMediaTypes: []string{"application/json"}, - Schemes: []string{"http"}, - Params: params, - Reader: &PostDatabasesReader{formats: a.formats}, - AuthInfo: authInfo, - Client: params.HTTPClient, - } - - for _, opt := range opts { - opt(op) - } - - result, err := a.transport.SubmitContext(ctx, op) - if err != nil { - return nil, err - } - - // only one success response has to be checked - success, ok := result.(*PostDatabasesOK) - if ok { - return success, nil - } - - // unexpected success response. - - // no default response is defined. - // - // safeguard: normally, in the absence of a default response, unknown success responses return an error above: so this is a codegen issue - msg := fmt.Sprintf("unexpected success response for postDatabases: API contract not enforced by server. Client expected to get an error, but got: %T", result) - panic(msg) -} - -// PutDatabases updates databases. -// -// Update Database. -// -// This method does not support injected context. -// However, timeout and opentracing contexts are honored whenever enabled. -// -// If you need to pass a specific context, use [Client.PutDatabasesContext] instead. -func (a *Client) PutDatabases(params *PutDatabasesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PutDatabasesOK, error) { - var ctx context.Context - if params.inner.ctx != nil { - ctx = params.inner.ctx - } else { - ctx = context.Background() - } - - return a.PutDatabasesContext(ctx, params, authInfo, opts...) -} - -// PutDatabasesContext updates databases. -// -// Update Database. -// -// Do not use the deprecated [PutDatabasesParams.Context] with this method: it would be ignored. -func (a *Client) PutDatabasesContext(ctx context.Context, params *PutDatabasesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PutDatabasesOK, error) { - // NOTE: parameters are not validated before sending - if params == nil { - params = NewPutDatabasesParams() - } - - op := &runtime.ClientOperation{ - ID: "putDatabases", - Method: "PUT", - PathPattern: "/databases", - ProducesMediaTypes: []string{"application/json"}, - ConsumesMediaTypes: []string{"application/json"}, - Schemes: []string{"http"}, - Params: params, - Reader: &PutDatabasesReader{formats: a.formats}, - AuthInfo: authInfo, - Client: params.HTTPClient, - } - - for _, opt := range opts { - opt(op) - } - - result, err := a.transport.SubmitContext(ctx, op) - if err != nil { - return nil, err - } - - // only one success response has to be checked - success, ok := result.(*PutDatabasesOK) - if ok { - return success, nil - } - - // unexpected success response. - - // no default response is defined. - // - // safeguard: normally, in the absence of a default response, unknown success responses return an error above: so this is a codegen issue - msg := fmt.Sprintf("unexpected success response for putDatabases: API contract not enforced by server. Client expected to get an error, but got: %T", result) - panic(msg) -} - // SetTransport changes the transport on the client func (a *Client) SetTransport(transport runtime.ContextualTransport) { a.transport = transport diff --git a/api/members/members_client/databases/get_databases_parameters.go b/api/members/members_client/databases/get_databases_parameters.go index cf4590c..ad50fac 100644 --- a/api/members/members_client/databases/get_databases_parameters.go +++ b/api/members/members_client/databases/get_databases_parameters.go @@ -69,8 +69,10 @@ type GetDatabasesParams struct { // DatabaseID. // - // Record Id of a Database - DatabaseID string + // Record ID of sanitized Database metadata + // + // Format: uuid + DatabaseID *strfmt.UUID // Limit. // @@ -86,6 +88,13 @@ type GetDatabasesParams struct { // Format: int64 Offset *int64 + // TenantID. + // + // Tenant that owns the Database metadata. Members verifies active human membership and never returns DSN or provisioning credentials. + // + // Format: uuid + TenantID strfmt.UUID + HTTPClient *http.Client inner innerParams @@ -144,13 +153,13 @@ func (o *GetDatabasesParams) SetHTTPClient(client *http.Client) { } // WithDatabaseID adds the databaseID to the get databases params. -func (o *GetDatabasesParams) WithDatabaseID(databaseID string) *GetDatabasesParams { +func (o *GetDatabasesParams) WithDatabaseID(databaseID *strfmt.UUID) *GetDatabasesParams { o.SetDatabaseID(databaseID) return o } // SetDatabaseID adds the databaseId to the get databases params. -func (o *GetDatabasesParams) SetDatabaseID(databaseID string) { +func (o *GetDatabasesParams) SetDatabaseID(databaseID *strfmt.UUID) { o.DatabaseID = databaseID } @@ -176,6 +185,17 @@ func (o *GetDatabasesParams) SetOffset(offset *int64) { o.Offset = offset } +// WithTenantID adds the tenantID to the get databases params. +func (o *GetDatabasesParams) WithTenantID(tenantID strfmt.UUID) *GetDatabasesParams { + o.SetTenantID(tenantID) + return o +} + +// SetTenantID adds the tenantId to the get databases params. +func (o *GetDatabasesParams) SetTenantID(tenantID strfmt.UUID) { + o.TenantID = tenantID +} + // WriteToRequest writes these params to a [runtime.ClientRequest]. func (o *GetDatabasesParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { if err := r.SetTimeout(o.inner.timeout); err != nil { @@ -183,13 +203,20 @@ func (o *GetDatabasesParams) WriteToRequest(r runtime.ClientRequest, reg strfmt. } var res []error - // query param databaseId - qrDatabaseID := o.DatabaseID - qDatabaseID := qrDatabaseID - if qDatabaseID != "" { + if o.DatabaseID != nil { - if err := r.SetQueryParam("databaseId", qDatabaseID); err != nil { - return err + // query param databaseId + var qrDatabaseID strfmt.UUID + + if o.DatabaseID != nil { + qrDatabaseID = *o.DatabaseID + } + qDatabaseID := qrDatabaseID.String() + if qDatabaseID != "" { + + if err := r.SetQueryParam("databaseId", qDatabaseID); err != nil { + return err + } } } @@ -227,6 +254,16 @@ func (o *GetDatabasesParams) WriteToRequest(r runtime.ClientRequest, reg strfmt. } } + // query param tenantId + qrTenantID := o.TenantID + qTenantID := qrTenantID.String() + if qTenantID != "" { + + if err := r.SetQueryParam("tenantId", qTenantID); err != nil { + return err + } + } + if len(res) > 0 { return errors.CompositeValidationError(res...) } diff --git a/api/members/members_client/databases/get_databases_responses.go b/api/members/members_client/databases/get_databases_responses.go index 9808a62..8611af6 100644 --- a/api/members/members_client/databases/get_databases_responses.go +++ b/api/members/members_client/databases/get_databases_responses.go @@ -73,9 +73,9 @@ func NewGetDatabasesOK() *GetDatabasesOK { // GetDatabasesOK describes a response with status code 200, with default header values. // -// Response with Database objects +// Response with tenant-bound, credential-free Database metadata type GetDatabasesOK struct { - Payload *members_models.DatabaseResponse + Payload *members_models.DatabaseMetadataResponse } // IsSuccess returns true when this get databases o k response has a 2xx status code @@ -118,13 +118,13 @@ func (o *GetDatabasesOK) String() string { return fmt.Sprintf("[GET /databases][%d] getDatabasesOK %s", 200, payload) } -func (o *GetDatabasesOK) GetPayload() *members_models.DatabaseResponse { +func (o *GetDatabasesOK) GetPayload() *members_models.DatabaseMetadataResponse { return o.Payload } func (o *GetDatabasesOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - o.Payload = new(members_models.DatabaseResponse) + o.Payload = new(members_models.DatabaseMetadataResponse) // response payload if err := consumer.Consume(response.Body(), o.Payload); err != nil && !stderrors.Is(err, io.EOF) { diff --git a/api/members/members_client/databases/post_databases_parameters.go b/api/members/members_client/databases/post_databases_parameters.go deleted file mode 100644 index 53372cf..0000000 --- a/api/members/members_client/databases/post_databases_parameters.go +++ /dev/null @@ -1,159 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// (c) 2012-2020 by Taxnexus, Inc. -// All rights reserved worldwide. -// Proprietary product; unlicensed use is not allowed - -package databases - -import ( - "context" - "net/http" - "time" - - "code.tnxs.net/vernonkeenan/lib/api/members/members_models" - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - cr "github.com/go-openapi/runtime/client" - "github.com/go-openapi/strfmt" -) - -// NewPostDatabasesParams creates a new PostDatabasesParams object, -// with the default timeout for this client. -// -// Default values are not hydrated, since defaults are normally applied by the API server side. -// -// To enforce default values in parameter, use SetDefaults or WithDefaults. -func NewPostDatabasesParams() *PostDatabasesParams { - return NewPostDatabasesParamsWithTimeout(cr.DefaultTimeout) -} - -// NewPostDatabasesParamsWithTimeout creates a new PostDatabasesParams object -// with the ability to set a timeout on a request. -func NewPostDatabasesParamsWithTimeout(timeout time.Duration) *PostDatabasesParams { - return &PostDatabasesParams{ - inner: innerParams{ - timeout: timeout, - }, - } -} - -// NewPostDatabasesParamsWithContext creates a new PostDatabasesParams object -// with the ability to set a context for a request. -// -// Deprecated: use the operation call with context to pass the context instead of [PostDatabasesParams]. -func NewPostDatabasesParamsWithContext(ctx context.Context) *PostDatabasesParams { - return &PostDatabasesParams{ - inner: innerParams{ - ctx: ctx, - }, - } -} - -// NewPostDatabasesParamsWithHTTPClient creates a new PostDatabasesParams object -// with the ability to set a custom HTTPClient for a request. -func NewPostDatabasesParamsWithHTTPClient(client *http.Client) *PostDatabasesParams { - return &PostDatabasesParams{ - HTTPClient: client, - } -} - -/* -PostDatabasesParams contains all the parameters to send to the API endpoint - - for the post databases operation. - - Typically these are written to a http.Request. -*/ -type PostDatabasesParams struct { - - // DatabaseRequest. - // - // An array of Database records - DatabaseRequest *members_models.DatabaseRequest - - HTTPClient *http.Client - - inner innerParams -} - -// WithDefaults hydrates default values in the post databases params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *PostDatabasesParams) WithDefaults() *PostDatabasesParams { - o.SetDefaults() - return o -} - -// SetDefaults hydrates default values in the post databases params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *PostDatabasesParams) SetDefaults() { - // no default values defined for this parameter -} - -// WithTimeout adds the timeout to the post databases params. -func (o *PostDatabasesParams) WithTimeout(timeout time.Duration) *PostDatabasesParams { - o.SetTimeout(timeout) - return o -} - -// SetTimeout adds the timeout to the post databases params. -func (o *PostDatabasesParams) SetTimeout(timeout time.Duration) { - o.inner.timeout = timeout -} - -// WithContext adds the context to the post databases params. -// -// Deprecated: use the operation call with context to pass the context instead of [PostDatabasesParams]. -func (o *PostDatabasesParams) WithContext(ctx context.Context) *PostDatabasesParams { - o.SetContext(ctx) - return o -} - -// SetContext adds the context to the post databases params. -// -// Deprecated: use the operation call with context to pass the context instead of [PostDatabasesParams]. -func (o *PostDatabasesParams) SetContext(ctx context.Context) { - o.inner.ctx = ctx -} - -// WithHTTPClient adds the HTTPClient to the post databases params. -func (o *PostDatabasesParams) WithHTTPClient(client *http.Client) *PostDatabasesParams { - o.SetHTTPClient(client) - return o -} - -// SetHTTPClient adds the HTTPClient to the post databases params. -func (o *PostDatabasesParams) SetHTTPClient(client *http.Client) { - o.HTTPClient = client -} - -// WithDatabaseRequest adds the databaseRequest to the post databases params. -func (o *PostDatabasesParams) WithDatabaseRequest(databaseRequest *members_models.DatabaseRequest) *PostDatabasesParams { - o.SetDatabaseRequest(databaseRequest) - return o -} - -// SetDatabaseRequest adds the databaseRequest to the post databases params. -func (o *PostDatabasesParams) SetDatabaseRequest(databaseRequest *members_models.DatabaseRequest) { - o.DatabaseRequest = databaseRequest -} - -// WriteToRequest writes these params to a [runtime.ClientRequest]. -func (o *PostDatabasesParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { - if err := r.SetTimeout(o.inner.timeout); err != nil { - return err - } - var res []error - if o.DatabaseRequest != nil { - if err := r.SetBodyParam(o.DatabaseRequest); err != nil { - return err - } - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/members/members_client/databases/post_databases_responses.go b/api/members/members_client/databases/post_databases_responses.go deleted file mode 100644 index b689771..0000000 --- a/api/members/members_client/databases/post_databases_responses.go +++ /dev/null @@ -1,484 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// (c) 2012-2020 by Taxnexus, Inc. -// All rights reserved worldwide. -// Proprietary product; unlicensed use is not allowed - -package databases - -import ( - "encoding/json" - stderrors "errors" - "fmt" - "io" - - "code.tnxs.net/vernonkeenan/lib/api/members/members_models" - "github.com/go-openapi/runtime" - "github.com/go-openapi/strfmt" -) - -// PostDatabasesReader is a Reader for the PostDatabases structure. -type PostDatabasesReader struct { - formats strfmt.Registry -} - -// ReadResponse reads a server response into the received o. -func (o *PostDatabasesReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (any, error) { - switch response.Code() { - case 200: - result := NewPostDatabasesOK() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return result, nil - case 401: - result := NewPostDatabasesUnauthorized() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - case 403: - result := NewPostDatabasesForbidden() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - case 404: - result := NewPostDatabasesNotFound() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - case 422: - result := NewPostDatabasesUnprocessableEntity() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - case 500: - result := NewPostDatabasesInternalServerError() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - default: - return nil, runtime.NewAPIError("[POST /databases] postDatabases", response, response.Code()) - } -} - -// NewPostDatabasesOK creates a PostDatabasesOK with default headers values -func NewPostDatabasesOK() *PostDatabasesOK { - return &PostDatabasesOK{} -} - -// PostDatabasesOK describes a response with status code 200, with default header values. -// -// Response with Database objects -type PostDatabasesOK struct { - Payload *members_models.DatabaseResponse -} - -// IsSuccess returns true when this post databases o k response has a 2xx status code -func (o *PostDatabasesOK) IsSuccess() bool { - return true -} - -// IsRedirect returns true when this post databases o k response has a 3xx status code -func (o *PostDatabasesOK) IsRedirect() bool { - return false -} - -// IsClientError returns true when this post databases o k response has a 4xx status code -func (o *PostDatabasesOK) IsClientError() bool { - return false -} - -// IsServerError returns true when this post databases o k response has a 5xx status code -func (o *PostDatabasesOK) IsServerError() bool { - return false -} - -// IsCode returns true when this post databases o k response a status code equal to that given -func (o *PostDatabasesOK) IsCode(code int) bool { - return code == 200 -} - -// Code gets the status code for the post databases o k response -func (o *PostDatabasesOK) Code() int { - return 200 -} - -func (o *PostDatabasesOK) Error() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[POST /databases][%d] postDatabasesOK %s", 200, payload) -} - -func (o *PostDatabasesOK) String() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[POST /databases][%d] postDatabasesOK %s", 200, payload) -} - -func (o *PostDatabasesOK) GetPayload() *members_models.DatabaseResponse { - return o.Payload -} - -func (o *PostDatabasesOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(members_models.DatabaseResponse) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && !stderrors.Is(err, io.EOF) { - return err - } - - return nil -} - -// NewPostDatabasesUnauthorized creates a PostDatabasesUnauthorized with default headers values -func NewPostDatabasesUnauthorized() *PostDatabasesUnauthorized { - return &PostDatabasesUnauthorized{} -} - -// PostDatabasesUnauthorized describes a response with status code 401, with default header values. -// -// Access Unauthorized, invalid API-KEY was used -type PostDatabasesUnauthorized struct { - Payload *members_models.Error -} - -// IsSuccess returns true when this post databases unauthorized response has a 2xx status code -func (o *PostDatabasesUnauthorized) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this post databases unauthorized response has a 3xx status code -func (o *PostDatabasesUnauthorized) IsRedirect() bool { - return false -} - -// IsClientError returns true when this post databases unauthorized response has a 4xx status code -func (o *PostDatabasesUnauthorized) IsClientError() bool { - return true -} - -// IsServerError returns true when this post databases unauthorized response has a 5xx status code -func (o *PostDatabasesUnauthorized) IsServerError() bool { - return false -} - -// IsCode returns true when this post databases unauthorized response a status code equal to that given -func (o *PostDatabasesUnauthorized) IsCode(code int) bool { - return code == 401 -} - -// Code gets the status code for the post databases unauthorized response -func (o *PostDatabasesUnauthorized) Code() int { - return 401 -} - -func (o *PostDatabasesUnauthorized) Error() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[POST /databases][%d] postDatabasesUnauthorized %s", 401, payload) -} - -func (o *PostDatabasesUnauthorized) String() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[POST /databases][%d] postDatabasesUnauthorized %s", 401, payload) -} - -func (o *PostDatabasesUnauthorized) GetPayload() *members_models.Error { - return o.Payload -} - -func (o *PostDatabasesUnauthorized) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(members_models.Error) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && !stderrors.Is(err, io.EOF) { - return err - } - - return nil -} - -// NewPostDatabasesForbidden creates a PostDatabasesForbidden with default headers values -func NewPostDatabasesForbidden() *PostDatabasesForbidden { - return &PostDatabasesForbidden{} -} - -// PostDatabasesForbidden describes a response with status code 403, with default header values. -// -// Access forbidden, account lacks access -type PostDatabasesForbidden struct { - AccessControlAllowOrigin string - - Payload *members_models.Error -} - -// IsSuccess returns true when this post databases forbidden response has a 2xx status code -func (o *PostDatabasesForbidden) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this post databases forbidden response has a 3xx status code -func (o *PostDatabasesForbidden) IsRedirect() bool { - return false -} - -// IsClientError returns true when this post databases forbidden response has a 4xx status code -func (o *PostDatabasesForbidden) IsClientError() bool { - return true -} - -// IsServerError returns true when this post databases forbidden response has a 5xx status code -func (o *PostDatabasesForbidden) IsServerError() bool { - return false -} - -// IsCode returns true when this post databases forbidden response a status code equal to that given -func (o *PostDatabasesForbidden) IsCode(code int) bool { - return code == 403 -} - -// Code gets the status code for the post databases forbidden response -func (o *PostDatabasesForbidden) Code() int { - return 403 -} - -func (o *PostDatabasesForbidden) Error() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[POST /databases][%d] postDatabasesForbidden %s", 403, payload) -} - -func (o *PostDatabasesForbidden) String() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[POST /databases][%d] postDatabasesForbidden %s", 403, payload) -} - -func (o *PostDatabasesForbidden) GetPayload() *members_models.Error { - return o.Payload -} - -func (o *PostDatabasesForbidden) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - // hydrates response header Access-Control-Allow-Origin - hdrAccessControlAllowOrigin := response.GetHeader("Access-Control-Allow-Origin") - - if hdrAccessControlAllowOrigin != "" { - o.AccessControlAllowOrigin = hdrAccessControlAllowOrigin - } - - o.Payload = new(members_models.Error) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && !stderrors.Is(err, io.EOF) { - return err - } - - return nil -} - -// NewPostDatabasesNotFound creates a PostDatabasesNotFound with default headers values -func NewPostDatabasesNotFound() *PostDatabasesNotFound { - return &PostDatabasesNotFound{} -} - -// PostDatabasesNotFound describes a response with status code 404, with default header values. -// -// Resource was not found -type PostDatabasesNotFound struct { - Payload *members_models.Error -} - -// IsSuccess returns true when this post databases not found response has a 2xx status code -func (o *PostDatabasesNotFound) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this post databases not found response has a 3xx status code -func (o *PostDatabasesNotFound) IsRedirect() bool { - return false -} - -// IsClientError returns true when this post databases not found response has a 4xx status code -func (o *PostDatabasesNotFound) IsClientError() bool { - return true -} - -// IsServerError returns true when this post databases not found response has a 5xx status code -func (o *PostDatabasesNotFound) IsServerError() bool { - return false -} - -// IsCode returns true when this post databases not found response a status code equal to that given -func (o *PostDatabasesNotFound) IsCode(code int) bool { - return code == 404 -} - -// Code gets the status code for the post databases not found response -func (o *PostDatabasesNotFound) Code() int { - return 404 -} - -func (o *PostDatabasesNotFound) Error() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[POST /databases][%d] postDatabasesNotFound %s", 404, payload) -} - -func (o *PostDatabasesNotFound) String() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[POST /databases][%d] postDatabasesNotFound %s", 404, payload) -} - -func (o *PostDatabasesNotFound) GetPayload() *members_models.Error { - return o.Payload -} - -func (o *PostDatabasesNotFound) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(members_models.Error) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && !stderrors.Is(err, io.EOF) { - return err - } - - return nil -} - -// NewPostDatabasesUnprocessableEntity creates a PostDatabasesUnprocessableEntity with default headers values -func NewPostDatabasesUnprocessableEntity() *PostDatabasesUnprocessableEntity { - return &PostDatabasesUnprocessableEntity{} -} - -// PostDatabasesUnprocessableEntity describes a response with status code 422, with default header values. -// -// Unprocessable Entity, likely a bad parameter -type PostDatabasesUnprocessableEntity struct { - Payload *members_models.Error -} - -// IsSuccess returns true when this post databases unprocessable entity response has a 2xx status code -func (o *PostDatabasesUnprocessableEntity) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this post databases unprocessable entity response has a 3xx status code -func (o *PostDatabasesUnprocessableEntity) IsRedirect() bool { - return false -} - -// IsClientError returns true when this post databases unprocessable entity response has a 4xx status code -func (o *PostDatabasesUnprocessableEntity) IsClientError() bool { - return true -} - -// IsServerError returns true when this post databases unprocessable entity response has a 5xx status code -func (o *PostDatabasesUnprocessableEntity) IsServerError() bool { - return false -} - -// IsCode returns true when this post databases unprocessable entity response a status code equal to that given -func (o *PostDatabasesUnprocessableEntity) IsCode(code int) bool { - return code == 422 -} - -// Code gets the status code for the post databases unprocessable entity response -func (o *PostDatabasesUnprocessableEntity) Code() int { - return 422 -} - -func (o *PostDatabasesUnprocessableEntity) Error() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[POST /databases][%d] postDatabasesUnprocessableEntity %s", 422, payload) -} - -func (o *PostDatabasesUnprocessableEntity) String() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[POST /databases][%d] postDatabasesUnprocessableEntity %s", 422, payload) -} - -func (o *PostDatabasesUnprocessableEntity) GetPayload() *members_models.Error { - return o.Payload -} - -func (o *PostDatabasesUnprocessableEntity) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(members_models.Error) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && !stderrors.Is(err, io.EOF) { - return err - } - - return nil -} - -// NewPostDatabasesInternalServerError creates a PostDatabasesInternalServerError with default headers values -func NewPostDatabasesInternalServerError() *PostDatabasesInternalServerError { - return &PostDatabasesInternalServerError{} -} - -// PostDatabasesInternalServerError describes a response with status code 500, with default header values. -// -// Server Internal Error -type PostDatabasesInternalServerError struct { - Payload *members_models.Error -} - -// IsSuccess returns true when this post databases internal server error response has a 2xx status code -func (o *PostDatabasesInternalServerError) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this post databases internal server error response has a 3xx status code -func (o *PostDatabasesInternalServerError) IsRedirect() bool { - return false -} - -// IsClientError returns true when this post databases internal server error response has a 4xx status code -func (o *PostDatabasesInternalServerError) IsClientError() bool { - return false -} - -// IsServerError returns true when this post databases internal server error response has a 5xx status code -func (o *PostDatabasesInternalServerError) IsServerError() bool { - return true -} - -// IsCode returns true when this post databases internal server error response a status code equal to that given -func (o *PostDatabasesInternalServerError) IsCode(code int) bool { - return code == 500 -} - -// Code gets the status code for the post databases internal server error response -func (o *PostDatabasesInternalServerError) Code() int { - return 500 -} - -func (o *PostDatabasesInternalServerError) Error() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[POST /databases][%d] postDatabasesInternalServerError %s", 500, payload) -} - -func (o *PostDatabasesInternalServerError) String() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[POST /databases][%d] postDatabasesInternalServerError %s", 500, payload) -} - -func (o *PostDatabasesInternalServerError) GetPayload() *members_models.Error { - return o.Payload -} - -func (o *PostDatabasesInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(members_models.Error) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && !stderrors.Is(err, io.EOF) { - return err - } - - return nil -} diff --git a/api/members/members_client/databases/put_databases_parameters.go b/api/members/members_client/databases/put_databases_parameters.go deleted file mode 100644 index 6fcffcf..0000000 --- a/api/members/members_client/databases/put_databases_parameters.go +++ /dev/null @@ -1,159 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// (c) 2012-2020 by Taxnexus, Inc. -// All rights reserved worldwide. -// Proprietary product; unlicensed use is not allowed - -package databases - -import ( - "context" - "net/http" - "time" - - "code.tnxs.net/vernonkeenan/lib/api/members/members_models" - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - cr "github.com/go-openapi/runtime/client" - "github.com/go-openapi/strfmt" -) - -// NewPutDatabasesParams creates a new PutDatabasesParams object, -// with the default timeout for this client. -// -// Default values are not hydrated, since defaults are normally applied by the API server side. -// -// To enforce default values in parameter, use SetDefaults or WithDefaults. -func NewPutDatabasesParams() *PutDatabasesParams { - return NewPutDatabasesParamsWithTimeout(cr.DefaultTimeout) -} - -// NewPutDatabasesParamsWithTimeout creates a new PutDatabasesParams object -// with the ability to set a timeout on a request. -func NewPutDatabasesParamsWithTimeout(timeout time.Duration) *PutDatabasesParams { - return &PutDatabasesParams{ - inner: innerParams{ - timeout: timeout, - }, - } -} - -// NewPutDatabasesParamsWithContext creates a new PutDatabasesParams object -// with the ability to set a context for a request. -// -// Deprecated: use the operation call with context to pass the context instead of [PutDatabasesParams]. -func NewPutDatabasesParamsWithContext(ctx context.Context) *PutDatabasesParams { - return &PutDatabasesParams{ - inner: innerParams{ - ctx: ctx, - }, - } -} - -// NewPutDatabasesParamsWithHTTPClient creates a new PutDatabasesParams object -// with the ability to set a custom HTTPClient for a request. -func NewPutDatabasesParamsWithHTTPClient(client *http.Client) *PutDatabasesParams { - return &PutDatabasesParams{ - HTTPClient: client, - } -} - -/* -PutDatabasesParams contains all the parameters to send to the API endpoint - - for the put databases operation. - - Typically these are written to a http.Request. -*/ -type PutDatabasesParams struct { - - // DatabaseRequest. - // - // An array of Database records - DatabaseRequest *members_models.DatabaseRequest - - HTTPClient *http.Client - - inner innerParams -} - -// WithDefaults hydrates default values in the put databases params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *PutDatabasesParams) WithDefaults() *PutDatabasesParams { - o.SetDefaults() - return o -} - -// SetDefaults hydrates default values in the put databases params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *PutDatabasesParams) SetDefaults() { - // no default values defined for this parameter -} - -// WithTimeout adds the timeout to the put databases params. -func (o *PutDatabasesParams) WithTimeout(timeout time.Duration) *PutDatabasesParams { - o.SetTimeout(timeout) - return o -} - -// SetTimeout adds the timeout to the put databases params. -func (o *PutDatabasesParams) SetTimeout(timeout time.Duration) { - o.inner.timeout = timeout -} - -// WithContext adds the context to the put databases params. -// -// Deprecated: use the operation call with context to pass the context instead of [PutDatabasesParams]. -func (o *PutDatabasesParams) WithContext(ctx context.Context) *PutDatabasesParams { - o.SetContext(ctx) - return o -} - -// SetContext adds the context to the put databases params. -// -// Deprecated: use the operation call with context to pass the context instead of [PutDatabasesParams]. -func (o *PutDatabasesParams) SetContext(ctx context.Context) { - o.inner.ctx = ctx -} - -// WithHTTPClient adds the HTTPClient to the put databases params. -func (o *PutDatabasesParams) WithHTTPClient(client *http.Client) *PutDatabasesParams { - o.SetHTTPClient(client) - return o -} - -// SetHTTPClient adds the HTTPClient to the put databases params. -func (o *PutDatabasesParams) SetHTTPClient(client *http.Client) { - o.HTTPClient = client -} - -// WithDatabaseRequest adds the databaseRequest to the put databases params. -func (o *PutDatabasesParams) WithDatabaseRequest(databaseRequest *members_models.DatabaseRequest) *PutDatabasesParams { - o.SetDatabaseRequest(databaseRequest) - return o -} - -// SetDatabaseRequest adds the databaseRequest to the put databases params. -func (o *PutDatabasesParams) SetDatabaseRequest(databaseRequest *members_models.DatabaseRequest) { - o.DatabaseRequest = databaseRequest -} - -// WriteToRequest writes these params to a [runtime.ClientRequest]. -func (o *PutDatabasesParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { - if err := r.SetTimeout(o.inner.timeout); err != nil { - return err - } - var res []error - if o.DatabaseRequest != nil { - if err := r.SetBodyParam(o.DatabaseRequest); err != nil { - return err - } - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/members/members_client/databases/put_databases_responses.go b/api/members/members_client/databases/put_databases_responses.go deleted file mode 100644 index 41d9689..0000000 --- a/api/members/members_client/databases/put_databases_responses.go +++ /dev/null @@ -1,484 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// (c) 2012-2020 by Taxnexus, Inc. -// All rights reserved worldwide. -// Proprietary product; unlicensed use is not allowed - -package databases - -import ( - "encoding/json" - stderrors "errors" - "fmt" - "io" - - "code.tnxs.net/vernonkeenan/lib/api/members/members_models" - "github.com/go-openapi/runtime" - "github.com/go-openapi/strfmt" -) - -// PutDatabasesReader is a Reader for the PutDatabases structure. -type PutDatabasesReader struct { - formats strfmt.Registry -} - -// ReadResponse reads a server response into the received o. -func (o *PutDatabasesReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (any, error) { - switch response.Code() { - case 200: - result := NewPutDatabasesOK() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return result, nil - case 401: - result := NewPutDatabasesUnauthorized() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - case 403: - result := NewPutDatabasesForbidden() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - case 404: - result := NewPutDatabasesNotFound() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - case 422: - result := NewPutDatabasesUnprocessableEntity() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - case 500: - result := NewPutDatabasesInternalServerError() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - default: - return nil, runtime.NewAPIError("[PUT /databases] putDatabases", response, response.Code()) - } -} - -// NewPutDatabasesOK creates a PutDatabasesOK with default headers values -func NewPutDatabasesOK() *PutDatabasesOK { - return &PutDatabasesOK{} -} - -// PutDatabasesOK describes a response with status code 200, with default header values. -// -// Response with Database objects -type PutDatabasesOK struct { - Payload *members_models.DatabaseResponse -} - -// IsSuccess returns true when this put databases o k response has a 2xx status code -func (o *PutDatabasesOK) IsSuccess() bool { - return true -} - -// IsRedirect returns true when this put databases o k response has a 3xx status code -func (o *PutDatabasesOK) IsRedirect() bool { - return false -} - -// IsClientError returns true when this put databases o k response has a 4xx status code -func (o *PutDatabasesOK) IsClientError() bool { - return false -} - -// IsServerError returns true when this put databases o k response has a 5xx status code -func (o *PutDatabasesOK) IsServerError() bool { - return false -} - -// IsCode returns true when this put databases o k response a status code equal to that given -func (o *PutDatabasesOK) IsCode(code int) bool { - return code == 200 -} - -// Code gets the status code for the put databases o k response -func (o *PutDatabasesOK) Code() int { - return 200 -} - -func (o *PutDatabasesOK) Error() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[PUT /databases][%d] putDatabasesOK %s", 200, payload) -} - -func (o *PutDatabasesOK) String() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[PUT /databases][%d] putDatabasesOK %s", 200, payload) -} - -func (o *PutDatabasesOK) GetPayload() *members_models.DatabaseResponse { - return o.Payload -} - -func (o *PutDatabasesOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(members_models.DatabaseResponse) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && !stderrors.Is(err, io.EOF) { - return err - } - - return nil -} - -// NewPutDatabasesUnauthorized creates a PutDatabasesUnauthorized with default headers values -func NewPutDatabasesUnauthorized() *PutDatabasesUnauthorized { - return &PutDatabasesUnauthorized{} -} - -// PutDatabasesUnauthorized describes a response with status code 401, with default header values. -// -// Access Unauthorized, invalid API-KEY was used -type PutDatabasesUnauthorized struct { - Payload *members_models.Error -} - -// IsSuccess returns true when this put databases unauthorized response has a 2xx status code -func (o *PutDatabasesUnauthorized) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this put databases unauthorized response has a 3xx status code -func (o *PutDatabasesUnauthorized) IsRedirect() bool { - return false -} - -// IsClientError returns true when this put databases unauthorized response has a 4xx status code -func (o *PutDatabasesUnauthorized) IsClientError() bool { - return true -} - -// IsServerError returns true when this put databases unauthorized response has a 5xx status code -func (o *PutDatabasesUnauthorized) IsServerError() bool { - return false -} - -// IsCode returns true when this put databases unauthorized response a status code equal to that given -func (o *PutDatabasesUnauthorized) IsCode(code int) bool { - return code == 401 -} - -// Code gets the status code for the put databases unauthorized response -func (o *PutDatabasesUnauthorized) Code() int { - return 401 -} - -func (o *PutDatabasesUnauthorized) Error() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[PUT /databases][%d] putDatabasesUnauthorized %s", 401, payload) -} - -func (o *PutDatabasesUnauthorized) String() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[PUT /databases][%d] putDatabasesUnauthorized %s", 401, payload) -} - -func (o *PutDatabasesUnauthorized) GetPayload() *members_models.Error { - return o.Payload -} - -func (o *PutDatabasesUnauthorized) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(members_models.Error) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && !stderrors.Is(err, io.EOF) { - return err - } - - return nil -} - -// NewPutDatabasesForbidden creates a PutDatabasesForbidden with default headers values -func NewPutDatabasesForbidden() *PutDatabasesForbidden { - return &PutDatabasesForbidden{} -} - -// PutDatabasesForbidden describes a response with status code 403, with default header values. -// -// Access forbidden, account lacks access -type PutDatabasesForbidden struct { - AccessControlAllowOrigin string - - Payload *members_models.Error -} - -// IsSuccess returns true when this put databases forbidden response has a 2xx status code -func (o *PutDatabasesForbidden) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this put databases forbidden response has a 3xx status code -func (o *PutDatabasesForbidden) IsRedirect() bool { - return false -} - -// IsClientError returns true when this put databases forbidden response has a 4xx status code -func (o *PutDatabasesForbidden) IsClientError() bool { - return true -} - -// IsServerError returns true when this put databases forbidden response has a 5xx status code -func (o *PutDatabasesForbidden) IsServerError() bool { - return false -} - -// IsCode returns true when this put databases forbidden response a status code equal to that given -func (o *PutDatabasesForbidden) IsCode(code int) bool { - return code == 403 -} - -// Code gets the status code for the put databases forbidden response -func (o *PutDatabasesForbidden) Code() int { - return 403 -} - -func (o *PutDatabasesForbidden) Error() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[PUT /databases][%d] putDatabasesForbidden %s", 403, payload) -} - -func (o *PutDatabasesForbidden) String() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[PUT /databases][%d] putDatabasesForbidden %s", 403, payload) -} - -func (o *PutDatabasesForbidden) GetPayload() *members_models.Error { - return o.Payload -} - -func (o *PutDatabasesForbidden) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - // hydrates response header Access-Control-Allow-Origin - hdrAccessControlAllowOrigin := response.GetHeader("Access-Control-Allow-Origin") - - if hdrAccessControlAllowOrigin != "" { - o.AccessControlAllowOrigin = hdrAccessControlAllowOrigin - } - - o.Payload = new(members_models.Error) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && !stderrors.Is(err, io.EOF) { - return err - } - - return nil -} - -// NewPutDatabasesNotFound creates a PutDatabasesNotFound with default headers values -func NewPutDatabasesNotFound() *PutDatabasesNotFound { - return &PutDatabasesNotFound{} -} - -// PutDatabasesNotFound describes a response with status code 404, with default header values. -// -// Resource was not found -type PutDatabasesNotFound struct { - Payload *members_models.Error -} - -// IsSuccess returns true when this put databases not found response has a 2xx status code -func (o *PutDatabasesNotFound) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this put databases not found response has a 3xx status code -func (o *PutDatabasesNotFound) IsRedirect() bool { - return false -} - -// IsClientError returns true when this put databases not found response has a 4xx status code -func (o *PutDatabasesNotFound) IsClientError() bool { - return true -} - -// IsServerError returns true when this put databases not found response has a 5xx status code -func (o *PutDatabasesNotFound) IsServerError() bool { - return false -} - -// IsCode returns true when this put databases not found response a status code equal to that given -func (o *PutDatabasesNotFound) IsCode(code int) bool { - return code == 404 -} - -// Code gets the status code for the put databases not found response -func (o *PutDatabasesNotFound) Code() int { - return 404 -} - -func (o *PutDatabasesNotFound) Error() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[PUT /databases][%d] putDatabasesNotFound %s", 404, payload) -} - -func (o *PutDatabasesNotFound) String() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[PUT /databases][%d] putDatabasesNotFound %s", 404, payload) -} - -func (o *PutDatabasesNotFound) GetPayload() *members_models.Error { - return o.Payload -} - -func (o *PutDatabasesNotFound) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(members_models.Error) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && !stderrors.Is(err, io.EOF) { - return err - } - - return nil -} - -// NewPutDatabasesUnprocessableEntity creates a PutDatabasesUnprocessableEntity with default headers values -func NewPutDatabasesUnprocessableEntity() *PutDatabasesUnprocessableEntity { - return &PutDatabasesUnprocessableEntity{} -} - -// PutDatabasesUnprocessableEntity describes a response with status code 422, with default header values. -// -// Unprocessable Entity, likely a bad parameter -type PutDatabasesUnprocessableEntity struct { - Payload *members_models.Error -} - -// IsSuccess returns true when this put databases unprocessable entity response has a 2xx status code -func (o *PutDatabasesUnprocessableEntity) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this put databases unprocessable entity response has a 3xx status code -func (o *PutDatabasesUnprocessableEntity) IsRedirect() bool { - return false -} - -// IsClientError returns true when this put databases unprocessable entity response has a 4xx status code -func (o *PutDatabasesUnprocessableEntity) IsClientError() bool { - return true -} - -// IsServerError returns true when this put databases unprocessable entity response has a 5xx status code -func (o *PutDatabasesUnprocessableEntity) IsServerError() bool { - return false -} - -// IsCode returns true when this put databases unprocessable entity response a status code equal to that given -func (o *PutDatabasesUnprocessableEntity) IsCode(code int) bool { - return code == 422 -} - -// Code gets the status code for the put databases unprocessable entity response -func (o *PutDatabasesUnprocessableEntity) Code() int { - return 422 -} - -func (o *PutDatabasesUnprocessableEntity) Error() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[PUT /databases][%d] putDatabasesUnprocessableEntity %s", 422, payload) -} - -func (o *PutDatabasesUnprocessableEntity) String() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[PUT /databases][%d] putDatabasesUnprocessableEntity %s", 422, payload) -} - -func (o *PutDatabasesUnprocessableEntity) GetPayload() *members_models.Error { - return o.Payload -} - -func (o *PutDatabasesUnprocessableEntity) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(members_models.Error) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && !stderrors.Is(err, io.EOF) { - return err - } - - return nil -} - -// NewPutDatabasesInternalServerError creates a PutDatabasesInternalServerError with default headers values -func NewPutDatabasesInternalServerError() *PutDatabasesInternalServerError { - return &PutDatabasesInternalServerError{} -} - -// PutDatabasesInternalServerError describes a response with status code 500, with default header values. -// -// Server Internal Error -type PutDatabasesInternalServerError struct { - Payload *members_models.Error -} - -// IsSuccess returns true when this put databases internal server error response has a 2xx status code -func (o *PutDatabasesInternalServerError) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this put databases internal server error response has a 3xx status code -func (o *PutDatabasesInternalServerError) IsRedirect() bool { - return false -} - -// IsClientError returns true when this put databases internal server error response has a 4xx status code -func (o *PutDatabasesInternalServerError) IsClientError() bool { - return false -} - -// IsServerError returns true when this put databases internal server error response has a 5xx status code -func (o *PutDatabasesInternalServerError) IsServerError() bool { - return true -} - -// IsCode returns true when this put databases internal server error response a status code equal to that given -func (o *PutDatabasesInternalServerError) IsCode(code int) bool { - return code == 500 -} - -// Code gets the status code for the put databases internal server error response -func (o *PutDatabasesInternalServerError) Code() int { - return 500 -} - -func (o *PutDatabasesInternalServerError) Error() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[PUT /databases][%d] putDatabasesInternalServerError %s", 500, payload) -} - -func (o *PutDatabasesInternalServerError) String() string { - payload, _ := json.Marshal(o.Payload) - return fmt.Sprintf("[PUT /databases][%d] putDatabasesInternalServerError %s", 500, payload) -} - -func (o *PutDatabasesInternalServerError) GetPayload() *members_models.Error { - return o.Payload -} - -func (o *PutDatabasesInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(members_models.Error) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && !stderrors.Is(err, io.EOF) { - return err - } - - return nil -} diff --git a/api/members/members_client/learning_contract_test.go b/api/members/members_client/learning_contract_test.go index 9e2a48d..1474b52 100644 --- a/api/members/members_client/learning_contract_test.go +++ b/api/members/members_client/learning_contract_test.go @@ -23,7 +23,7 @@ import ( "github.com/go-openapi/strfmt" ) -const membersProviderSpecSHA256 = "4b7d409b5e989632ca4b0ab9a5a868dc1234a89b4dc3ba1fef307cd306478a6c" +const membersProviderSpecSHA256 = "fac8e386cb348993648644ba89c1bc14effbce679b2323ecdc332d1b4401d6ea" var learningTestAuth = openapiruntime.ClientAuthInfoWriterFunc(func(openapiruntime.ClientRequest, strfmt.Registry) error { return nil @@ -517,7 +517,7 @@ func TestMembersSpecIsPinnedToProviderSource(t *testing.T) { } sum := sha256.Sum256(mainSpec) if got := hex.EncodeToString(sum[:]); got != membersProviderSpecSHA256 { - t.Fatalf("Members spec drifted from the integrated TrackEvent, Transaction, TrackTopic, and TrackUser provider contract: SHA-256 = %s, want %s", got, membersProviderSpecSHA256) + t.Fatalf("Members spec drifted from the integrated TrackEvent, Transaction, TrackTopic, TrackUser, and Database metadata provider contract: SHA-256 = %s, want %s", got, membersProviderSpecSHA256) } externalSpec, err := os.ReadFile(filepath.Join(repoRoot, "swagger", "external", "members-vernonkeenan.yaml")) diff --git a/api/members/members_client/track_contract_test.go b/api/members/members_client/track_contract_test.go index acda130..2223dd7 100644 --- a/api/members/members_client/track_contract_test.go +++ b/api/members/members_client/track_contract_test.go @@ -19,7 +19,7 @@ import ( "github.com/go-openapi/strfmt" ) -const membersTrackSpecSHA256 = "4b7d409b5e989632ca4b0ab9a5a868dc1234a89b4dc3ba1fef307cd306478a6c" +const membersTrackSpecSHA256 = "fac8e386cb348993648644ba89c1bc14effbce679b2323ecdc332d1b4401d6ea" var trackTestAuth = openapiruntime.ClientAuthInfoWriterFunc( func(openapiruntime.ClientRequest, strfmt.Registry) error { return nil }, @@ -203,7 +203,7 @@ func TestMembersSpecIsPinnedToTrackProviderCommit(t *testing.T) { sum := sha256.Sum256(mainSpec) if got := hex.EncodeToString(sum[:]); got != membersTrackSpecSHA256 { t.Fatalf( - "Members spec drifted from the integrated TrackEvent, Transaction, TrackTopic, and TrackUser provider contract: SHA-256 = %s, want %s", + "Members spec drifted from the integrated TrackEvent, Transaction, TrackTopic, TrackUser, and Database metadata provider contract: SHA-256 = %s, want %s", got, membersTrackSpecSHA256, ) } diff --git a/api/members/members_models/database_metadata.go b/api/members/members_models/database_metadata.go new file mode 100644 index 0000000..18efeb6 --- /dev/null +++ b/api/members/members_models/database_metadata.go @@ -0,0 +1,172 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// (c) 2012-2020 by Taxnexus, Inc. +// All rights reserved worldwide. +// Proprietary product; unlicensed use is not allowed + +package members_models + +import ( + "context" + + "github.com/go-openapi/errors" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag/jsonutils" + "github.com/go-openapi/swag/typeutils" + "github.com/go-openapi/validate" +) + +// DatabaseMetadata Credential-free metadata for a Database provisioned and owned by a Tenant +// +// swagger:model DatabaseMetadata +type DatabaseMetadata struct { + + // Whether the Database is active + Active *bool `json:"Active,omitempty"` + + // Optional Cluster in the same Tenant + // Format: uuid + ClusterID *strfmt.UUID `json:"ClusterID,omitempty"` + + // Server-owned creation timestamp + // Format: date-time + CreatedDate *strfmt.DateTime `json:"CreatedDate,omitempty"` + + // Physical Database name + DatabaseName *string `json:"DatabaseName,omitempty"` + + // Server-owned Database record ID + // Required: true + // Format: uuid + ID *strfmt.UUID `json:"ID"` + + // Server-owned modification timestamp + // Format: date-time + LastModifiedDate *strfmt.DateTime `json:"LastModifiedDate,omitempty"` + + // Database status metadata + Status *string `json:"Status,omitempty"` + + // Tenant that owns the Database + // Required: true + // Format: uuid + TenantID *strfmt.UUID `json:"TenantID"` + + // Database engine type + Type *string `json:"Type,omitempty"` +} + +// Validate validates this database metadata +func (m *DatabaseMetadata) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateClusterID(formats); err != nil { + res = append(res, err) + } + + if err := m.validateCreatedDate(formats); err != nil { + res = append(res, err) + } + + if err := m.validateID(formats); err != nil { + res = append(res, err) + } + + if err := m.validateLastModifiedDate(formats); err != nil { + res = append(res, err) + } + + if err := m.validateTenantID(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *DatabaseMetadata) validateClusterID(formats strfmt.Registry) error { + if typeutils.IsZero(m.ClusterID) { // not required + return nil + } + + if err := validate.FormatOf("ClusterID", "body", "uuid", m.ClusterID.String(), formats); err != nil { + return err + } + + return nil +} + +func (m *DatabaseMetadata) validateCreatedDate(formats strfmt.Registry) error { + if typeutils.IsZero(m.CreatedDate) { // not required + return nil + } + + if err := validate.FormatOf("CreatedDate", "body", "date-time", m.CreatedDate.String(), formats); err != nil { + return err + } + + return nil +} + +func (m *DatabaseMetadata) validateID(formats strfmt.Registry) error { + + if err := validate.Required("ID", "body", m.ID); err != nil { + return err + } + + if err := validate.FormatOf("ID", "body", "uuid", m.ID.String(), formats); err != nil { + return err + } + + return nil +} + +func (m *DatabaseMetadata) validateLastModifiedDate(formats strfmt.Registry) error { + if typeutils.IsZero(m.LastModifiedDate) { // not required + return nil + } + + if err := validate.FormatOf("LastModifiedDate", "body", "date-time", m.LastModifiedDate.String(), formats); err != nil { + return err + } + + return nil +} + +func (m *DatabaseMetadata) validateTenantID(formats strfmt.Registry) error { + + if err := validate.Required("TenantID", "body", m.TenantID); err != nil { + return err + } + + if err := validate.FormatOf("TenantID", "body", "uuid", m.TenantID.String(), formats); err != nil { + return err + } + + return nil +} + +// ContextValidate validates this database metadata based on context it is used +func (m *DatabaseMetadata) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (m *DatabaseMetadata) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return jsonutils.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *DatabaseMetadata) UnmarshalBinary(b []byte) error { + var res DatabaseMetadata + if err := jsonutils.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/api/members/members_models/database_metadata_response.go b/api/members/members_models/database_metadata_response.go new file mode 100644 index 0000000..99ac154 --- /dev/null +++ b/api/members/members_models/database_metadata_response.go @@ -0,0 +1,191 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// (c) 2012-2020 by Taxnexus, Inc. +// All rights reserved worldwide. +// Proprietary product; unlicensed use is not allowed + +package members_models + +import ( + "context" + stderrors "errors" + "strconv" + + "github.com/go-openapi/errors" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag/jsonutils" + "github.com/go-openapi/swag/typeutils" +) + +// DatabaseMetadataResponse Tenant-bound Database metadata with DSN and provisioning credentials omitted +// +// swagger:model DatabaseMetadataResponse +type DatabaseMetadataResponse struct { + + // data + Data []*DatabaseMetadata `json:"Data"` + + // meta + Meta *ResponseMeta `json:"Meta,omitempty"` +} + +// Validate validates this database metadata response +func (m *DatabaseMetadataResponse) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateData(formats); err != nil { + res = append(res, err) + } + + if err := m.validateMeta(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *DatabaseMetadataResponse) validateData(formats strfmt.Registry) error { + if typeutils.IsZero(m.Data) { // not required + return nil + } + + for i := 0; i < len(m.Data); i++ { + if typeutils.IsZero(m.Data[i]) { // not required + continue + } + + if m.Data[i] != nil { + if err := m.Data[i].Validate(formats); err != nil { + ve := new(errors.Validation) + if stderrors.As(err, &ve) { + return ve.ValidateName("Data" + "." + strconv.Itoa(i)) + } + ce := new(errors.CompositeError) + if stderrors.As(err, &ce) { + return ce.ValidateName("Data" + "." + strconv.Itoa(i)) + } + + return err + } + } + + } + + return nil +} + +func (m *DatabaseMetadataResponse) validateMeta(formats strfmt.Registry) error { + if typeutils.IsZero(m.Meta) { // not required + return nil + } + + if m.Meta != nil { + if err := m.Meta.Validate(formats); err != nil { + ve := new(errors.Validation) + if stderrors.As(err, &ve) { + return ve.ValidateName("Meta") + } + ce := new(errors.CompositeError) + if stderrors.As(err, &ce) { + return ce.ValidateName("Meta") + } + + return err + } + } + + return nil +} + +// ContextValidate validate this database metadata response based on the context it is used +func (m *DatabaseMetadataResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := m.contextValidateData(ctx, formats); err != nil { + res = append(res, err) + } + + if err := m.contextValidateMeta(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *DatabaseMetadataResponse) contextValidateData(ctx context.Context, formats strfmt.Registry) error { + + for i := 0; i < len(m.Data); i++ { + + if m.Data[i] != nil { + + if typeutils.IsZero(m.Data[i]) { // not required + return nil + } + + if err := m.Data[i].ContextValidate(ctx, formats); err != nil { + ve := new(errors.Validation) + if stderrors.As(err, &ve) { + return ve.ValidateName("Data" + "." + strconv.Itoa(i)) + } + ce := new(errors.CompositeError) + if stderrors.As(err, &ce) { + return ce.ValidateName("Data" + "." + strconv.Itoa(i)) + } + + return err + } + } + + } + + return nil +} + +func (m *DatabaseMetadataResponse) contextValidateMeta(ctx context.Context, formats strfmt.Registry) error { + + if m.Meta != nil { + + if typeutils.IsZero(m.Meta) { // not required + return nil + } + + if err := m.Meta.ContextValidate(ctx, formats); err != nil { + ve := new(errors.Validation) + if stderrors.As(err, &ve) { + return ve.ValidateName("Meta") + } + ce := new(errors.CompositeError) + if stderrors.As(err, &ce) { + return ce.ValidateName("Meta") + } + + return err + } + } + + return nil +} + +// MarshalBinary interface implementation +func (m *DatabaseMetadataResponse) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return jsonutils.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *DatabaseMetadataResponse) UnmarshalBinary(b []byte) error { + var res DatabaseMetadataResponse + if err := jsonutils.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/docs/MEMBERS_DATABASE_METADATA_CLIENT.md b/docs/MEMBERS_DATABASE_METADATA_CLIENT.md new file mode 100644 index 0000000..cdeb33f --- /dev/null +++ b/docs/MEMBERS_DATABASE_METADATA_CLIENT.md @@ -0,0 +1,28 @@ +# Members Database metadata client + +Date: 2026-07-24 + +Provider source: Members commit +`6931b1177610a4bb41bf1bee488680b7146aa32b`. + +The generated Members client exposes only: + +- `GET /databases` with required `tenantId`; +- optional `databaseId`, `limit`, and `offset` filters; +- a dedicated `DatabaseMetadata` response model. + +The provider requires compound API-key plus native member-session +authentication and exact `members:database:read` machine scope. Active tenant +members may read metadata; Contributors remain read-only. + +`DatabaseMetadata` contains ID, TenantID, optional ClusterID, Active, +DatabaseName, Status, Type, CreatedDate, and LastModifiedDate. It has no DSN, +provisioning credential, processor token, password, or actor audit identity. +The generated Database client has no create, update, delete, provisioning, +generic-resource, Salesforce, sf-gate, or Cache operation. + +The Ticket provider remains unavailable because its tenant/ownership, +decimal-money, inventory, and lifecycle contracts are not authoritative. +Database metadata is the safe DBMS discovery fallback and does not authorize +infrastructure writes. Production use remains blocked on a separately governed +exact-scope seed and provider release. diff --git a/swagger/external/members-vernonkeenan.yaml b/swagger/external/members-vernonkeenan.yaml index ad62315..fe03a6a 100644 --- a/swagger/external/members-vernonkeenan.yaml +++ b/swagger/external/members-vernonkeenan.yaml @@ -466,11 +466,19 @@ parameters: required: false type: string databaseIdQuery: - description: Record Id of a Database + description: Record ID of sanitized Database metadata in: query name: databaseId type: string + format: uuid + required: false + databaseTenantId: + description: Tenant that owns the Database metadata. Members verifies active human membership and never returns DSN or provisioning credentials. + in: query + name: tenantId required: true + type: string + format: uuid databaseRequest: description: An array of Database records in: body @@ -583,6 +591,10 @@ responses: description: Response with Database objects schema: $ref: "#/definitions/DatabaseResponse" + DatabaseMetadataResponse: + description: Response with tenant-bound, credential-free Database metadata + schema: + $ref: "#/definitions/DatabaseMetadataResponse" DocumentResponse: description: Document Response Object schema: @@ -2173,15 +2185,16 @@ paths: - Courses /databases: get: - description: Return a list of Database records from the datastore + description: Tenant-bound read of sanitized Database metadata. Requires members:database:read and active human membership. DSN, provisioning credentials, and audit identities are absent. Provisioning writes remain unavailable. operationId: getDatabases parameters: - $ref: "#/parameters/databaseIdQuery" + - $ref: "#/parameters/databaseTenantId" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": - $ref: "#/responses/DatabaseResponse" + $ref: "#/responses/DatabaseMetadataResponse" "401": $ref: "#/responses/Unauthorized" "403": @@ -2194,53 +2207,8 @@ paths: $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] - summary: Get a list Databases - tags: - - Databases - post: - description: Create Databases - operationId: postDatabases - parameters: - - $ref: "#/parameters/databaseRequest" - responses: - "200": - $ref: "#/responses/DatabaseResponse" - "401": - $ref: "#/responses/Unauthorized" - "403": - $ref: "#/responses/AccessForbidden" - "404": - $ref: "#/responses/NotFound" - "422": - $ref: "#/responses/UnprocessableEntity" - "500": - $ref: "#/responses/ServerError" - security: - - ApiKeyAuth: [] - summary: Create new Databases - tags: - - Databases - put: - description: Update Database - operationId: putDatabases - parameters: - - $ref: "#/parameters/databaseRequest" - responses: - "200": - $ref: "#/responses/DatabaseResponse" - "401": - $ref: "#/responses/Unauthorized" - "403": - $ref: "#/responses/AccessForbidden" - "404": - $ref: "#/responses/NotFound" - "422": - $ref: "#/responses/UnprocessableEntity" - "500": - $ref: "#/responses/ServerError" - security: - - ApiKeyAuth: [] - summary: Update Databases + kvSessionCookie: [] + summary: Get sanitized Database metadata tags: - Databases /documents: @@ -5497,6 +5465,62 @@ definitions: $ref: "#/definitions/CourseSection" type: array type: object + DatabaseMetadata: + description: Credential-free metadata for a Database provisioned and owned by a Tenant + type: object + required: + - ID + - TenantID + properties: + ID: + description: Server-owned Database record ID + type: string + format: uuid + Active: + description: Whether the Database is active + type: boolean + x-nullable: true + ClusterID: + description: Optional Cluster in the same Tenant + type: string + format: uuid + x-nullable: true + CreatedDate: + description: Server-owned creation timestamp + type: string + format: date-time + x-nullable: true + DatabaseName: + description: Physical Database name + type: string + x-nullable: true + LastModifiedDate: + description: Server-owned modification timestamp + type: string + format: date-time + x-nullable: true + Status: + description: Database status metadata + type: string + x-nullable: true + TenantID: + description: Tenant that owns the Database + type: string + format: uuid + Type: + description: Database engine type + type: string + x-nullable: true + DatabaseMetadataResponse: + description: Tenant-bound Database metadata with DSN and provisioning credentials omitted + type: object + properties: + Data: + type: array + items: + $ref: "#/definitions/DatabaseMetadata" + Meta: + $ref: "#/definitions/ResponseMeta" DatabaseRequest: description: An array of Database objects properties: diff --git a/swagger/members-vernonkeenan.yaml b/swagger/members-vernonkeenan.yaml index b366f2c..f02c81d 100644 --- a/swagger/members-vernonkeenan.yaml +++ b/swagger/members-vernonkeenan.yaml @@ -466,11 +466,19 @@ parameters: required: false type: string databaseIdQuery: - description: Record Id of a Database + description: Record ID of sanitized Database metadata in: query name: databaseId type: string + format: uuid + required: false + databaseTenantId: + description: Tenant that owns the Database metadata. Members verifies active human membership and never returns DSN or provisioning credentials. + in: query + name: tenantId required: true + type: string + format: uuid databaseRequest: description: An array of Database records in: body @@ -583,6 +591,10 @@ responses: description: Response with Database objects schema: $ref: "#/definitions/DatabaseResponse" + DatabaseMetadataResponse: + description: Response with tenant-bound, credential-free Database metadata + schema: + $ref: "#/definitions/DatabaseMetadataResponse" DocumentResponse: description: Document Response Object schema: @@ -2173,15 +2185,16 @@ paths: - Courses /databases: get: - description: Return a list of Database records from the datastore + description: Tenant-bound read of sanitized Database metadata. Requires members:database:read and active human membership. DSN, provisioning credentials, and audit identities are absent. Provisioning writes remain unavailable. operationId: getDatabases parameters: - $ref: "#/parameters/databaseIdQuery" + - $ref: "#/parameters/databaseTenantId" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": - $ref: "#/responses/DatabaseResponse" + $ref: "#/responses/DatabaseMetadataResponse" "401": $ref: "#/responses/Unauthorized" "403": @@ -2194,53 +2207,8 @@ paths: $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] - summary: Get a list Databases - tags: - - Databases - post: - description: Create Databases - operationId: postDatabases - parameters: - - $ref: "#/parameters/databaseRequest" - responses: - "200": - $ref: "#/responses/DatabaseResponse" - "401": - $ref: "#/responses/Unauthorized" - "403": - $ref: "#/responses/AccessForbidden" - "404": - $ref: "#/responses/NotFound" - "422": - $ref: "#/responses/UnprocessableEntity" - "500": - $ref: "#/responses/ServerError" - security: - - ApiKeyAuth: [] - summary: Create new Databases - tags: - - Databases - put: - description: Update Database - operationId: putDatabases - parameters: - - $ref: "#/parameters/databaseRequest" - responses: - "200": - $ref: "#/responses/DatabaseResponse" - "401": - $ref: "#/responses/Unauthorized" - "403": - $ref: "#/responses/AccessForbidden" - "404": - $ref: "#/responses/NotFound" - "422": - $ref: "#/responses/UnprocessableEntity" - "500": - $ref: "#/responses/ServerError" - security: - - ApiKeyAuth: [] - summary: Update Databases + kvSessionCookie: [] + summary: Get sanitized Database metadata tags: - Databases /documents: @@ -5497,6 +5465,62 @@ definitions: $ref: "#/definitions/CourseSection" type: array type: object + DatabaseMetadata: + description: Credential-free metadata for a Database provisioned and owned by a Tenant + type: object + required: + - ID + - TenantID + properties: + ID: + description: Server-owned Database record ID + type: string + format: uuid + Active: + description: Whether the Database is active + type: boolean + x-nullable: true + ClusterID: + description: Optional Cluster in the same Tenant + type: string + format: uuid + x-nullable: true + CreatedDate: + description: Server-owned creation timestamp + type: string + format: date-time + x-nullable: true + DatabaseName: + description: Physical Database name + type: string + x-nullable: true + LastModifiedDate: + description: Server-owned modification timestamp + type: string + format: date-time + x-nullable: true + Status: + description: Database status metadata + type: string + x-nullable: true + TenantID: + description: Tenant that owns the Database + type: string + format: uuid + Type: + description: Database engine type + type: string + x-nullable: true + DatabaseMetadataResponse: + description: Tenant-bound Database metadata with DSN and provisioning credentials omitted + type: object + properties: + Data: + type: array + items: + $ref: "#/definitions/DatabaseMetadata" + Meta: + $ref: "#/definitions/ResponseMeta" DatabaseRequest: description: An array of Database objects properties: