diff --git a/.golangci.yml b/.golangci.yml index 0285c529e..cd5a8d444 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -5,8 +5,31 @@ linters: - durationcheck - sloglint - unconvert + - tagliatelle issues: exclude-rules: - path: repository/ingested_data_indexes_repository.go text: "should be called, not discarded, to avoid a context leak" + +linters-settings: + tagliatelle: + # Check the struct tag name case. + case: + # Use the struct field name to check the name of the struct tag. + # Default: false + use-field-name: true + # `camel` is used for `json` and `yaml`, and `header` is used for `header` (can be overridden) + # Default: {} + rules: + # Any struct tag type can be used. + # Support string case: `camel`, `pascal`, `kebab`, `snake`, `upperSnake`, `goCamel`, `goPascal`, `goKebab`, `goSnake`, `upper`, `lower`, `header` + json: snake + yaml: camel + xml: camel + toml: camel + bson: camel + avro: snake + mapstructure: kebab + env: upperSnake + envconfig: upperSnake diff --git a/api/handle_decision.go b/api/handle_decision.go index 1ada78fd3..119cb9ac1 100644 --- a/api/handle_decision.go +++ b/api/handle_decision.go @@ -104,9 +104,9 @@ func handlePostDecision(uc usecases.Usecases, marbleAppHost string) func(c *gin. c.Request.Context(), models.CreateDecisionInput{ OrganizationId: organizationId, - PayloadRaw: requestData.TriggerObjectRaw, + PayloadRaw: requestData.TriggerObject, ScenarioId: requestData.ScenarioId, - TriggerObjectTable: requestData.TriggerObjectType, + TriggerObjectTable: requestData.ObjectType, }, false, true, @@ -154,8 +154,8 @@ func handlePostAllDecisions(uc usecases.Usecases, marbleAppHost string) func(c * c.Request.Context(), models.CreateAllDecisionsInput{ OrganizationId: organizationId, - PayloadRaw: requestData.TriggerObjectRaw, - TriggerObjectTable: requestData.TriggerObjectType, + PayloadRaw: requestData.TriggerObject, + TriggerObjectTable: requestData.ObjectType, }, ) if presentError(c, err) { diff --git a/dto/custom_list_dto.go b/dto/custom_list_dto.go index 8becd04ef..beb0d2114 100644 --- a/dto/custom_list_dto.go +++ b/dto/custom_list_dto.go @@ -13,8 +13,8 @@ type CustomList struct { Description string `json:"description"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` - CreatedAt_deprec time.Time `json:"createdAt"` - UpdatedAt_deprec time.Time `json:"updatedAt"` + CreatedAt_deprec time.Time `json:"createdAt"` //nolint:tagliatelle + UpdatedAt_deprec time.Time `json:"updatedAt"` //nolint:tagliatelle } func AdaptCustomListDto(list models.CustomList) CustomList { diff --git a/dto/decision_dto.go b/dto/decision_dto.go index 93de34ce3..a567aad14 100644 --- a/dto/decision_dto.go +++ b/dto/decision_dto.go @@ -24,14 +24,14 @@ type DecisionFilters struct { } type CreateDecisionBody struct { - TriggerObjectRaw json.RawMessage `json:"trigger_object" binding:"required"` - TriggerObjectType string `json:"object_type" binding:"required"` + TriggerObject json.RawMessage `json:"trigger_object" binding:"required"` + ObjectType string `json:"object_type" binding:"required"` } type CreateDecisionWithScenarioBody struct { - ScenarioId string `json:"scenario_id" binding:"required"` - TriggerObjectRaw json.RawMessage `json:"trigger_object" binding:"required"` - TriggerObjectType string `json:"object_type" binding:"required"` + ScenarioId string `json:"scenario_id" binding:"required"` + TriggerObject json.RawMessage `json:"trigger_object" binding:"required"` + ObjectType string `json:"object_type" binding:"required"` } type CreateDecisionInputDto struct { diff --git a/dto/dto_ast_node.go b/dto/dto_ast_node.go index 287dfda37..1baf48582 100644 --- a/dto/dto_ast_node.go +++ b/dto/dto_ast_node.go @@ -8,7 +8,7 @@ import ( ) type NodeDto struct { - FuncName string `json:"name,omitempty"` + Name string `json:"name,omitempty"` Constant any `json:"constant,omitempty"` Children []NodeDto `json:"children,omitempty"` NamedChildren map[string]NodeDto `json:"named_children,omitempty"` @@ -31,7 +31,7 @@ func AdaptNodeDto(node ast.Node) (NodeDto, error) { } return NodeDto{ - FuncName: funcName, + Name: funcName, Constant: node.Constant, Children: childrenDto, NamedChildren: namedChildrenDto, @@ -44,11 +44,11 @@ func adaptDtoFunctionName(f ast.Function) (string, error) { } func AdaptASTNode(dto NodeDto) (ast.Node, error) { - if dto.FuncName == "Unknown" { - dto.FuncName = "Undefined" + if dto.Name == "Unknown" { + dto.Name = "Undefined" } - function, err := adaptFunctionName(dto.FuncName) + function, err := adaptFunctionName(dto.Name) if err != nil { return ast.Node{}, err } diff --git a/dto/dto_ast_node_test.go b/dto/dto_ast_node_test.go index c4ad85231..a0d66801a 100644 --- a/dto/dto_ast_node_test.go +++ b/dto/dto_ast_node_test.go @@ -19,7 +19,7 @@ func TestAdaptNodeDto(t *testing.T) { assert.NoError(t, err) assert.Equal(t, NodeDto{ - FuncName: ">", + Name: ">", Children: []NodeDto{{Constant: 1, Children: []NodeDto{}, NamedChildren: map[string]NodeDto{}}}, NamedChildren: map[string]NodeDto{"named": {Constant: 2, Children: []NodeDto{}, NamedChildren: map[string]NodeDto{}}}, }, @@ -29,7 +29,7 @@ func TestAdaptNodeDto(t *testing.T) { func TestAdaptASTNode(t *testing.T) { dto := NodeDto{ - FuncName: "+", + Name: "+", Children: []NodeDto{{Constant: 1, Children: []NodeDto{}, NamedChildren: map[string]NodeDto{}}}, NamedChildren: map[string]NodeDto{ "named": {Constant: 2, Children: []NodeDto{}, NamedChildren: map[string]NodeDto{}}, diff --git a/dto/func_attributes_dto.go b/dto/func_attributes_dto.go index 81a365c02..8ae798040 100644 --- a/dto/func_attributes_dto.go +++ b/dto/func_attributes_dto.go @@ -5,14 +5,14 @@ import ( ) type FuncAttributesDto struct { - AstName string `json:"name"` + Name string `json:"name"` NumberOfArguments int `json:"number_of_arguments,omitempty"` NamedArguments []string `json:"named_arguments,omitempty"` } func AdaptFuncAttributesDto(attributes ast.FuncAttributes) FuncAttributesDto { return FuncAttributesDto{ - AstName: attributes.AstName, + Name: attributes.AstName, NumberOfArguments: attributes.NumberOfArguments, NamedArguments: attributes.NamedArguments, } diff --git a/dto/openapi.go b/dto/openapi.go index da682972b..d1284eea4 100644 --- a/dto/openapi.go +++ b/dto/openapi.go @@ -1,3 +1,4 @@ +//nolint:tagliatelle package dto import ( diff --git a/dto/rule_dto.go b/dto/rule_dto.go index 5995883ec..6da5918ec 100644 --- a/dto/rule_dto.go +++ b/dto/rule_dto.go @@ -9,40 +9,40 @@ import ( type RuleDto struct { Id string `json:"id"` - ScenarioIterationId_deprec string `json:"scenarioIterationId"` + ScenarioIterationId_deprec string `json:"scenarioIterationId"` //nolint:tagliatelle ScenarioIterationId string `json:"scenario_iteration_id"` - DisplayOrder_deprec int `json:"displayOrder"` + DisplayOrder_deprec int `json:"displayOrder"` //nolint:tagliatelle DisplayOrder int `json:"display_order"` Name string `json:"name"` Description string `json:"description"` FormulaAstExpression *NodeDto `json:"formula_ast_expression"` - ScoreModifier_deprec int `json:"scoreModifier"` + ScoreModifier_deprec int `json:"scoreModifier"` //nolint:tagliatelle ScoreModifier int `json:"score_modifier"` - CreatedAt_deprec time.Time `json:"createdAt"` + CreatedAt_deprec time.Time `json:"createdAt"` //nolint:tagliatelle CreatedAt time.Time `json:"created_at"` RuleGroup string `json:"rule_group"` } type CreateRuleInputBody struct { - ScenarioIterationId_deprec string `json:"scenarioIterationId"` + ScenarioIterationId_deprec string `json:"scenarioIterationId"` //nolint:tagliatelle ScenarioIterationId string `json:"scenario_iteration_id"` - DisplayOrder_deprec int `json:"displayOrder"` + DisplayOrder_deprec int `json:"displayOrder"` //nolint:tagliatelle DisplayOrder int `json:"display_order"` Name string `json:"name"` Description string `json:"description"` FormulaAstExpression *NodeDto `json:"formula_ast_expression"` - ScoreModifier_deprec int `json:"scoreModifier"` + ScoreModifier_deprec int `json:"scoreModifier"` //nolint:tagliatelle ScoreModifier int `json:"score_modifier"` RuleGroup string `json:"rule_group"` } type UpdateRuleBody struct { - DisplayOrder_deprec *int `json:"displayOrder,omitempty"` + DisplayOrder_deprec *int `json:"displayOrder,omitempty"` //nolint:tagliatelle DisplayOrder *int `json:"display_order,omitempty"` Name *string `json:"name,omitempty"` Description *string `json:"description,omitempty"` FormulaAstExpression *NodeDto `json:"formula_ast_expression"` - ScoreModifier_deprec *int `json:"scoreModifier,omitempty"` + ScoreModifier_deprec *int `json:"scoreModifier,omitempty"` //nolint:tagliatelle ScoreModifier *int `json:"score_modifier,omitempty"` RuleGroup *string `json:"rule_group"` } diff --git a/dto/rule_snoozes.go b/dto/rule_snoozes.go index 1b11ac09c..13c89979c 100644 --- a/dto/rule_snoozes.go +++ b/dto/rule_snoozes.go @@ -10,7 +10,7 @@ type RuleSnooze struct { Id string `json:"id"` PivotValue string `json:"pivot_value"` StartsAt time.Time `json:"starts_at"` - ExpiresAt time.Time `json:"ends_at"` + ExpiresAt time.Time `json:"ends_at"` //nolint:tagliatelle CreatedByUser string `json:"created_by_user"` CreatedFromDecisionId *string `json:"created_from_decision_id"` CreatedFromRuleId string `json:"created_from_rule_id"` diff --git a/dto/scenario_iterations.go b/dto/scenario_iterations.go index 915358549..c80e6d787 100644 --- a/dto/scenario_iterations.go +++ b/dto/scenario_iterations.go @@ -17,23 +17,22 @@ type ScenarioIterationWithBodyDto struct { type ScenarioIterationDto struct { Id string `json:"id"` - ScenarioId_deprec string `json:"scenarioId"` + ScenarioId_deprec string `json:"scenarioId"` //nolint:tagliatelle ScenarioId string `json:"scenario_id"` Version *int `json:"version"` - CreatedAt_deprec time.Time `json:"createdAt"` + CreatedAt_deprec time.Time `json:"createdAt"` //nolint:tagliatelle CreatedAt time.Time `json:"created_at"` - UpdatedAt_deprec time.Time `json:"updatedAt"` + UpdatedAt_deprec time.Time `json:"updatedAt"` //nolint:tagliatelle UpdatedAt time.Time `json:"updated_at"` } type ScenarioIterationBodyDto struct { TriggerConditionAstExpression *NodeDto `json:"trigger_condition_ast_expression"` Rules []RuleDto `json:"rules"` - ScoreReviewThreshold_deprec *int `json:"scoreReviewThreshold"` + ScoreReviewThreshold_deprec *int `json:"scoreReviewThreshold"` //nolint:tagliatelle ScoreReviewThreshold *int `json:"score_review_threshold"` - ScoreRejectThreshold_deprec *int `json:"scoreRejectThreshold"` + ScoreRejectThreshold_deprec *int `json:"scoreRejectThreshold"` //nolint:tagliatelle ScoreRejectThreshold *int `json:"score_reject_threshold"` - BatchTriggerSQL string `json:"batchTriggerSql"` // TODO deprec Schedule string `json:"schedule"` } @@ -43,7 +42,6 @@ func AdaptScenarioIterationWithBodyDto(si models.ScenarioIteration) (ScenarioIte ScoreReviewThreshold: si.ScoreReviewThreshold, ScoreRejectThreshold_deprec: si.ScoreRejectThreshold, ScoreRejectThreshold: si.ScoreRejectThreshold, - BatchTriggerSQL: si.BatchTriggerSQL, Schedule: si.Schedule, Rules: make([]RuleDto, len(si.Rules)), } @@ -84,12 +82,11 @@ func AdaptScenarioIterationWithBodyDto(si models.ScenarioIteration) (ScenarioIte type UpdateScenarioIterationBody struct { Body struct { TriggerConditionAstExpression *NodeDto `json:"trigger_condition_ast_expression"` - ScoreReviewThreshold_deprec *int `json:"scoreReviewThreshold,omitempty"` + ScoreReviewThreshold_deprec *int `json:"scoreReviewThreshold,omitempty"` //nolint:tagliatelle ScoreReviewThreshold *int `json:"score_review_threshold,omitempty"` - ScoreRejectThreshold_deprec *int `json:"scoreRejectThreshold,omitempty"` + ScoreRejectThreshold_deprec *int `json:"scoreRejectThreshold,omitempty"` //nolint:tagliatelle ScoreRejectThreshold *int `json:"score_reject_threshold,omitempty"` Schedule *string `json:"schedule"` - BatchTriggerSQL *string `json:"batchTriggerSQL"` } `json:"body,omitempty"` } @@ -100,7 +97,6 @@ func AdaptUpdateScenarioIterationInput(input UpdateScenarioIterationBody, iterat ScoreReviewThreshold: input.Body.ScoreReviewThreshold, ScoreRejectThreshold: input.Body.ScoreRejectThreshold, Schedule: input.Body.Schedule, - BatchTriggerSQL: input.Body.BatchTriggerSQL, }, } @@ -128,17 +124,16 @@ func AdaptUpdateScenarioIterationInput(input UpdateScenarioIterationBody, iterat // Create iteration DTO type CreateScenarioIterationBody struct { - ScenarioId_deprec string `json:"scenarioId"` + ScenarioId_deprec string `json:"scenarioId"` //nolint:tagliatelle ScenarioId string `json:"scenario_id"` Body *struct { TriggerConditionAstExpression *NodeDto `json:"trigger_condition_ast_expression"` Rules []CreateRuleInputBody `json:"rules"` - ScoreReviewThreshold_deprec *int `json:"scoreReviewThreshold,omitempty"` + ScoreReviewThreshold_deprec *int `json:"scoreReviewThreshold,omitempty"` //nolint:tagliatelle ScoreReviewThreshold *int `json:"score_review_threshold,omitempty"` - ScoreRejectThreshold_deprec *int `json:"scoreRejectThreshold,omitempty"` + ScoreRejectThreshold_deprec *int `json:"scoreRejectThreshold,omitempty"` //nolint:tagliatelle ScoreRejectThreshold *int `json:"score_reject_threshold,omitempty"` Schedule string `json:"schedule"` - BatchTriggerSQL string `json:"batchTriggerSQL"` } `json:"body,omitempty"` } @@ -155,7 +150,6 @@ func AdaptCreateScenarioIterationInput(input CreateScenarioIterationBody, organi createScenarioIterationInput.Body = &models.CreateScenarioIterationBody{ ScoreReviewThreshold: input.Body.ScoreReviewThreshold, ScoreRejectThreshold: input.Body.ScoreRejectThreshold, - BatchTriggerSQL: input.Body.BatchTriggerSQL, Schedule: input.Body.Schedule, Rules: make([]models.CreateRuleInput, len(input.Body.Rules)), } diff --git a/dto/scenario_publications.go b/dto/scenario_publications.go index ab206288f..3213e33d1 100644 --- a/dto/scenario_publications.go +++ b/dto/scenario_publications.go @@ -9,13 +9,13 @@ import ( type ScenarioPublication struct { Id string `json:"id"` Rank int32 `json:"rank"` - ScenarioId_deprec string `json:"scenarioID"` + ScenarioId_deprec string `json:"scenarioID"` //nolint:tagliatelle ScenarioId string `json:"scenario_id"` - ScenarioIterationId_deprec string `json:"scenarioIterationID"` + ScenarioIterationId_deprec string `json:"scenarioIterationID"` //nolint:tagliatelle ScenarioIterationId string `json:"scenario_iteration_id"` - PublicationAction_deprec string `json:"publicationAction"` + PublicationAction_deprec string `json:"publicationAction"` //nolint:tagliatelle PublicationAction string `json:"publication_action"` - CreatedAt_deprec time.Time `json:"createdAt"` + CreatedAt_deprec time.Time `json:"createdAt"` //nolint:tagliatelle CreatedAt time.Time `json:"created_at"` } @@ -35,9 +35,9 @@ func AdaptScenarioPublicationDto(sp models.ScenarioPublication) ScenarioPublicat } type CreateScenarioPublicationBody struct { - ScenarioIterationId_deprec string `json:"scenarioIterationID"` + ScenarioIterationId_deprec string `json:"scenarioIterationID"` //nolint:tagliatelle ScenarioIterationId string `json:"scenario_iteration_id"` - PublicationAction_deprec string `json:"publicationAction"` + PublicationAction_deprec string `json:"publicationAction"` //nolint:tagliatelle PublicationAction string `json:"publication_action"` } diff --git a/dto/scenario_validation_dto.go b/dto/scenario_validation_dto.go index 048522623..38104288c 100644 --- a/dto/scenario_validation_dto.go +++ b/dto/scenario_validation_dto.go @@ -8,13 +8,13 @@ import ( type ScenarioValidationErrorDto struct { Message string `json:"message"` - Code string `json:"error"` + Error string `json:"error"` } func AdaptScenarioValidationErrorDto(err models.ScenarioValidationError) ScenarioValidationErrorDto { return ScenarioValidationErrorDto{ Message: err.Error.Error(), - Code: err.Code.String(), + Error: err.Code.String(), } } diff --git a/dto/scenarios.go b/dto/scenarios.go index 56fed1e89..34b02ccab 100644 --- a/dto/scenarios.go +++ b/dto/scenarios.go @@ -11,17 +11,17 @@ import ( // Read DTO type ScenarioDto struct { Id string `json:"id"` - CreatedAt_deprec time.Time `json:"createdAt"` + CreatedAt_deprec time.Time //nolint:tagliatelle CreatedAt time.Time `json:"created_at"` DecisionToCaseOutcomes []string `json:"decision_to_case_outcomes"` DecisionToCaseInboxId null.String `json:"decision_to_case_inbox_id"` DecisionToCaseWorkflowType string `json:"decision_to_case_workflow_type"` Description string `json:"description"` - LiveVersionID_deprec *string `json:"liveVersionId,omitempty"` + LiveVersionID_deprec *string `json:"liveVersionId,omitempty"` //nolint:tagliatelle LiveVersionID *string `json:"live_version_id,omitempty"` Name string `json:"name"` OrganizationId string `json:"organization_id"` - TriggerObjectType_deprec string `json:"triggerObjectType"` + TriggerObjectType_deprec string `json:"triggerObjectType"` //nolint:tagliatelle TriggerObjectType string `json:"trigger_object_type"` } @@ -48,7 +48,7 @@ func AdaptScenarioDto(scenario models.Scenario) ScenarioDto { type CreateScenarioBody struct { Name string `json:"name"` Description string `json:"description"` - TriggerObjectType_deprec string `json:"triggerObjectType"` + TriggerObjectType_deprec string `json:"triggerObjectType"` //nolint:tagliatelle TriggerObjectType string `json:"trigger_object_type"` } diff --git a/dto/webhooks.go b/dto/webhooks.go index f93992c09..2e9523fa7 100644 --- a/dto/webhooks.go +++ b/dto/webhooks.go @@ -31,7 +31,7 @@ type Secret struct { CreatedAt string `json:"created_at,omitempty"` DeletedAt string `json:"deleted_at,omitempty"` ExpiresAt string `json:"expires_at,omitempty"` - Uid string `json:"id,omitempty"` + Id string `json:"id,omitempty"` UpdatedAt string `json:"updated_at,omitempty"` Value string `json:"value,omitempty"` } @@ -41,7 +41,7 @@ func AdaptSecret(secret models.Secret) Secret { CreatedAt: secret.CreatedAt, DeletedAt: secret.DeletedAt, ExpiresAt: secret.ExpiresAt, - Uid: secret.Uid, + Id: secret.Uid, UpdatedAt: secret.UpdatedAt, Value: secret.Value, } diff --git a/models/ast/evaluation_error_dto.go b/models/ast/evaluation_error_dto.go index f7c451b28..4d4e3b649 100644 --- a/models/ast/evaluation_error_dto.go +++ b/models/ast/evaluation_error_dto.go @@ -5,7 +5,7 @@ import ( ) type EvaluationErrorDto struct { - EvaluationError string `json:"error"` + EvaluationError string `json:"error"` //nolint:tagliatelle Message string `json:"message"` ArgumentIndex *int `json:"argument_index,omitempty"` ArgumentName *string `json:"argument_name,omitempty"` diff --git a/models/ast/node_evaluation_dto.go b/models/ast/node_evaluation_dto.go index 1957032d2..b186694db 100644 --- a/models/ast/node_evaluation_dto.go +++ b/models/ast/node_evaluation_dto.go @@ -5,8 +5,8 @@ import "github.com/checkmarble/marble-backend/pure_utils" // When too long, the ReturnValue can be omitted (ex: when function is `FUNC_CUSTOM_LIST_ACCESS“). // In such cases, ReturnValue will be nil and Omitted will be true. type ReturnValueDto struct { - Value any `json:"value,omitempty"` - Omitted bool `json:"is_omitted"` + Value any `json:"value,omitempty"` + IsOmitted bool `json:"is_omitted"` } type NodeEvaluationDto struct { @@ -19,9 +19,9 @@ type NodeEvaluationDto struct { func AdaptNodeEvaluationDto(evaluation NodeEvaluation) NodeEvaluationDto { var returnValueDto ReturnValueDto if isReturnValueOmitted(evaluation) { - returnValueDto = ReturnValueDto{Value: nil, Omitted: true} + returnValueDto = ReturnValueDto{Value: nil, IsOmitted: true} } else { - returnValueDto = ReturnValueDto{Value: evaluation.ReturnValue, Omitted: false} + returnValueDto = ReturnValueDto{Value: evaluation.ReturnValue, IsOmitted: false} } return NodeEvaluationDto{