From 4900e986bd61980ce0ca729e30a688029287a8e6 Mon Sep 17 00:00:00 2001 From: aPaladiychuk Date: Tue, 30 Apr 2024 16:55:11 +0300 Subject: [PATCH] connector endpoint debug --- backend/core/bll/connector.go | 62 ++++++++++++++++------------ backend/core/model/connector.go | 36 ++++++++-------- backend/core/parameters/model.go | 30 +++++++------- backend/core/repository/connector.go | 6 ++- 4 files changed, 73 insertions(+), 61 deletions(-) diff --git a/backend/core/bll/connector.go b/backend/core/bll/connector.go index 48e1ced7..f9852385 100644 --- a/backend/core/bll/connector.go +++ b/backend/core/bll/connector.go @@ -7,6 +7,7 @@ import ( "cognix.ch/api/v2/core/utils" "context" "github.com/go-pg/pg/v10" + "github.com/shopspring/decimal" "time" ) @@ -31,14 +32,8 @@ func NewConnectorBL(connectorRepo repository.ConnectorRepository, credentialRepo } func (c *connectorBL) Create(ctx context.Context, user *model.User, param *parameters.CreateConnectorParam) (*model.Connector, error) { - cred, err := c.credentialRepo.GetByID(ctx, param.CredentialID.IntPart(), user.TenantID, user.ID) - if err != nil { - return nil, err - } - if cred.Source != model.SourceType(param.Source) { - return nil, utils.InvalidInput.New("wrong credential source") - } - connector := model.Connector{ + + conn := model.Connector{ CredentialID: param.CredentialID, Name: param.Name, Source: model.SourceType(param.Source), @@ -51,41 +46,54 @@ func (c *connectorBL) Create(ctx context.Context, user *model.User, param *param Disabled: param.Disabled, CreatedDate: time.Now().UTC(), } - if err = c.connectorRepo.Create(ctx, &connector); err != nil { + if param.CredentialID.Valid { + cred, err := c.credentialRepo.GetByID(ctx, param.CredentialID.Decimal.IntPart(), user.TenantID, user.ID) + if err != nil { + return nil, err + } + if cred.Source != model.SourceType(param.Source) { + return nil, utils.InvalidInput.New("wrong credential source") + } + conn.CredentialID = decimal.NewNullDecimal(cred.ID) + } + + if err := c.connectorRepo.Create(ctx, &conn); err != nil { return nil, err } - return &connector, nil + return &conn, nil } func (c *connectorBL) Update(ctx context.Context, id int64, user *model.User, param *parameters.UpdateConnectorParam) (*model.Connector, error) { - connector, err := c.connectorRepo.GetByID(ctx, user.TenantID, user.ID, id) - if err != nil { - return nil, err - } - cred, err := c.credentialRepo.GetByID(ctx, param.CredentialID.IntPart(), user.TenantID, user.ID) + conn, err := c.connectorRepo.GetByID(ctx, user.TenantID, user.ID, id) if err != nil { return nil, err } - if cred.Source != connector.Source { - return nil, utils.InvalidInput.New("wrong credential source") + if param.CredentialID.Valid { + cred, err := c.credentialRepo.GetByID(ctx, param.CredentialID.Decimal.IntPart(), user.TenantID, user.ID) + if err != nil { + return nil, err + } + if cred.Source != conn.Source { + return nil, utils.InvalidInput.New("wrong credential source") + } } - connector.ConnectorSpecificConfig = param.ConnectorSpecificConfig - connector.CredentialID = param.CredentialID - connector.Name = param.Name - connector.InputType = param.InputType - connector.RefreshFreq = param.RefreshFreq - connector.Shared = param.Shared - connector.Disabled = param.Disabled - connector.UpdatedDate = pg.NullTime{time.Now().UTC()} + conn.ConnectorSpecificConfig = param.ConnectorSpecificConfig + conn.CredentialID = param.CredentialID + conn.Name = param.Name + conn.InputType = param.InputType + conn.RefreshFreq = param.RefreshFreq + conn.Shared = param.Shared + conn.Disabled = param.Disabled + conn.UpdatedDate = pg.NullTime{time.Now().UTC()} // sql.NullTime{ //Time: time.Now().UTC(), //Valid: true, // } // null.TimeFrom(time.Now().UTC()) - if err = c.connectorRepo.Update(ctx, connector); err != nil { + if err = c.connectorRepo.Update(ctx, conn); err != nil { return nil, err } - return connector, nil + return conn, nil } func (c *connectorBL) GetAll(ctx context.Context, user *model.User) ([]*model.Connector, error) { diff --git a/backend/core/model/connector.go b/backend/core/model/connector.go index 413ac48b..fe450c44 100644 --- a/backend/core/model/connector.go +++ b/backend/core/model/connector.go @@ -8,22 +8,22 @@ import ( ) type Connector struct { - tableName struct{} `pg:"connectors,omitempty"` - ID decimal.Decimal `json:"id,omitempty"` - CredentialID decimal.Decimal `json:"credential_id,omitempty"` - Name string `json:"name,omitempty"` - Source SourceType `json:"source,omitempty"` - InputType string `json:"input_type,omitempty"` - ConnectorSpecificConfig JSONMap `json:"connector_specific_config,omitempty"` - RefreshFreq int `json:"refresh_freq,omitempty"` - UserID uuid.UUID `json:"user_id,omitempty"` - TenantID uuid.UUID `json:"tenant_id,omitempty"` - Shared bool `json:"shared,omitempty" pg:",use_zero"` - Disabled bool `json:"disabled,omitempty" pg:",use_zero"` - LastSuccessfulIndexTime pg.NullTime `json:"last_successful_index_time,omitempty" pg:",use_zero"` - LastAttemptStatus string `json:"last_attempt_status,omitempty"` - TotalDocsIndexed int `json:"total_docs_indexed" pg:",use_zero"` - CreatedDate time.Time `json:"created_date,omitempty"` - UpdatedDate pg.NullTime `json:"updated_date,omitempty" pg:",use_zero"` - DeletedDate pg.NullTime `json:"deleted_date,omitempty" pg:",use_zero"` + tableName struct{} `pg:"connectors,omitempty"` + ID decimal.Decimal `json:"id,omitempty"` + CredentialID decimal.NullDecimal `json:"credential_id,omitempty"` + Name string `json:"name,omitempty"` + Source SourceType `json:"source,omitempty"` + InputType string `json:"input_type,omitempty"` + ConnectorSpecificConfig JSONMap `json:"connector_specific_config,omitempty"` + RefreshFreq int `json:"refresh_freq,omitempty"` + UserID uuid.UUID `json:"user_id,omitempty"` + TenantID uuid.UUID `json:"tenant_id,omitempty"` + Shared bool `json:"shared,omitempty" pg:",use_zero"` + Disabled bool `json:"disabled,omitempty" pg:",use_zero"` + LastSuccessfulIndexTime pg.NullTime `json:"last_successful_index_time,omitempty" pg:",use_zero"` + LastAttemptStatus string `json:"last_attempt_status,omitempty"` + TotalDocsIndexed int `json:"total_docs_indexed" pg:",use_zero"` + CreatedDate time.Time `json:"created_date,omitempty"` + UpdatedDate pg.NullTime `json:"updated_date,omitempty" pg:",use_zero"` + DeletedDate pg.NullTime `json:"deleted_date,omitempty" pg:",use_zero"` } diff --git a/backend/core/parameters/model.go b/backend/core/parameters/model.go index f2791181..811de17d 100644 --- a/backend/core/parameters/model.go +++ b/backend/core/parameters/model.go @@ -62,14 +62,14 @@ type UpdateCredentialParam struct { } type CreateConnectorParam struct { - CredentialID decimal.Decimal `json:"credential_id,omitempty"` - Name string `json:"name,omitempty"` - Source string `json:"source,omitempty"` - InputType string `json:"input_type,omitempty"` - ConnectorSpecificConfig model.JSONMap `json:"connector_specific_config,omitempty"` - RefreshFreq int `json:"refresh_freq,omitempty"` - Shared bool `json:"shared,omitempty"` - Disabled bool `json:"disabled,omitempty"` + CredentialID decimal.NullDecimal `json:"credential_id,omitempty"` + Name string `json:"name,omitempty"` + Source string `json:"source,omitempty"` + InputType string `json:"input_type,omitempty"` + ConnectorSpecificConfig model.JSONMap `json:"connector_specific_config,omitempty"` + RefreshFreq int `json:"refresh_freq,omitempty"` + Shared bool `json:"shared,omitempty"` + Disabled bool `json:"disabled,omitempty"` } func (v CreateConnectorParam) Validate() error { @@ -84,13 +84,13 @@ func (v CreateConnectorParam) Validate() error { } type UpdateConnectorParam struct { - CredentialID decimal.Decimal `json:"credential_id,omitempty"` - Name string `json:"name,omitempty"` - InputType string `json:"input_type,omitempty"` - ConnectorSpecificConfig model.JSONMap `json:"connector_specific_config,omitempty"` - RefreshFreq int `json:"refresh_freq,omitempty"` - Shared bool `json:"shared,omitempty"` - Disabled bool `json:"disabled,omitempty"` + CredentialID decimal.NullDecimal `json:"credential_id,omitempty"` + Name string `json:"name,omitempty"` + InputType string `json:"input_type,omitempty"` + ConnectorSpecificConfig model.JSONMap `json:"connector_specific_config,omitempty"` + RefreshFreq int `json:"refresh_freq,omitempty"` + Shared bool `json:"shared,omitempty"` + Disabled bool `json:"disabled,omitempty"` } type AddUserParam struct { diff --git a/backend/core/repository/connector.go b/backend/core/repository/connector.go index 01ee97c6..a7adf2df 100644 --- a/backend/core/repository/connector.go +++ b/backend/core/repository/connector.go @@ -68,7 +68,11 @@ func (r *connectorRepository) GetByID(ctx context.Context, tenantID, userID uuid } func (r *connectorRepository) Create(ctx context.Context, connector *model.Connector) error { - if _, err := r.db.WithContext(ctx).Model(connector).Insert(); err != nil { + stm := r.db.WithContext(ctx).Model(connector) + if !connector.CredentialID.Valid { + stm = stm.ExcludeColumn("credential_id") + } + if _, err := stm.Insert(); err != nil { return utils.Internal.Wrap(err, "can not create connector") } return nil