Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Signup page leftovers #2849

Open
wants to merge 8 commits into
base: dev
Choose a base branch
from
Open

Signup page leftovers #2849

wants to merge 8 commits into from

Conversation

tomer-shvadron
Copy link
Collaborator

@tomer-shvadron tomer-shvadron commented Nov 18, 2024

  • Clean up the workflow configuration schema by removing the createCollectionFlowToken option
  • Update various workflow definition files to eliminate obsolete token settings

(your code was so cluttered, it looked like a toddler's art project on a bad day)

Summary by CodeRabbit

Release Notes

  • New Features

    • Enhanced workflow configurability with the addition of createCollectionFlowToken in specific workflow definitions.
    • Introduced a new method to count workflow tokens, improving token management capabilities.
  • Bug Fixes

    • Improved error handling in workflow-related operations, providing clearer feedback for missing data.
  • Refactor

    • Streamlined workflow management logic, enhancing readability and maintainability across various services and controllers.
    • Simplified return logic in several functions, improving performance and clarity.
    • Removed unused dependencies from service and test setups, optimizing the overall structure.
    • Removed the createCollectionFlowToken property from various workflow definitions, adjusting configuration options.
  • Chores

    • Updated import paths for better organization and consistency across modules.

- Clean up the workflow configuration schema by removing the createCollectionFlowToken option
- Update various workflow definition files to eliminate obsolete token settings

(your code was so cluttered, it looked like a toddler's art project on a bad day)
Copy link
Contributor

coderabbitai bot commented Nov 18, 2024

Walkthrough

This pull request introduces several modifications across various files, primarily focusing on the removal of the createCollectionFlowToken property from multiple workflow configuration schemas and definitions. Additionally, it simplifies the return logic in the buildCollectionFlowState function and enhances the WorkflowTokenService and WorkflowTokenRepository with new methods and updated dependencies. Import paths have been standardized to absolute paths in several files, and various workflow-related functions have been adjusted for improved clarity and error handling.

Changes

File Change Summary
packages/common/src/schemas/documents/workflow/config-schema.ts Removed property createCollectionFlowToken from WorkflowConfigSchema.
packages/common/src/utils/collection-flow/build-collection-flow-state.ts Simplified return logic in buildCollectionFlowState by removing intermediate variable.
services/workflows-service/scripts/workflows/dynamic-ui-workflow.ts Added property createCollectionFlowToken to config object; updated generateDynamicUiWorkflow to include projectId.
services/workflows-service/scripts/workflows/kyb-kyc-workflow-definition.ts Added property createCollectionFlowToken: true to config; updated contextSchema to include optional token field.
services/workflows-service/scripts/workflows/ui-definition/kyb-with-associated-companies/definition/compose-child-associated-company-definition.ts Removed createCollectionFlowToken from config object.
services/workflows-service/scripts/workflows/ui-definition/kyb-with-associated-companies/definition/compose-kyb-with-associated-companies-definition.ts Removed createCollectionFlowToken from config object.
services/workflows-service/scripts/workflows/ui-definition/kyb-with-associated-companies/definition/compose-kyc-child-workflow-definition.ts Removed createCollectionFlowToken from config object.
services/workflows-service/src/auth/auth.module.ts Updated import paths for various modules to absolute paths.
services/workflows-service/src/auth/workflow-token/workflow-token.repository.ts Added method count to WorkflowTokenRepository; rearranged import statements.
services/workflows-service/src/auth/workflow-token/workflow-token.service.ts Updated constructor to include new dependencies; enhanced create method logic; added count method.
services/workflows-service/src/common/guards/token-guard/token-auth.module.ts Added multiple services and repositories to providers array.
services/workflows-service/src/workflow/schemas/zod-schemas.ts Removed createCollectionFlowToken from ConfigSchema.
services/workflows-service/src/workflow/workflow-runtime-data.repository.ts Updated references from prisma to prismaService throughout the class.
services/workflows-service/src/workflow/workflow.controller.external.ts Renamed service reference from service to workflowService; improved error handling in methods.
services/workflows-service/src/workflow/workflow.service.ts Removed BusinessReportService from constructor; refactored methods for clarity and improved error handling.

Possibly related PRs

Suggested reviewers

  • alonp99

🐰 In the meadow, changes bloom,
A workflow's path finds more room.
Tokens removed, clarity gained,
New logic flows, no longer strained.
With each hop, we refine our way,
In code and dreams, we play all day! 🌼


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

changeset-bot bot commented Nov 18, 2024

⚠️ No Changeset found

Latest commit: dd2f683

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

- Remove unnecessary intermediate variable in buildCollectionFlowState
- Reorganize import statements for better readability
- Add a count method in WorkflowTokenService for token existence checks

(Your code is so bloated, it could use a good diet and some introspection)
- Replace relative imports with absolute paths for better readability
- Add additional providers to the TokenAuthModule for expanded functionality

(You’re like a pathing guide in a maze – leading the way, but it’s still a bit of a headache)
- Replace ambiguous service variable with workflowService
- Update all references to maintain consistency
- Enhance code readability and prevent confusion

(Your variable names are like trying to find a needle in a haystack without the hay)
@tomer-shvadron tomer-shvadron marked this pull request as ready for review November 26, 2024 15:40
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Outside diff range and nitpick comments (9)
services/workflows-service/src/common/guards/token-guard/token-auth.module.ts (1)

16-28: Consider documenting the module's expanded responsibilities.

The module has grown to include several new providers beyond its original token authentication scope. While this might be intentional as part of the workflow configuration cleanup, it would be helpful to document why these services are needed in the token authentication context.

Consider adding a module-level JSDoc comment explaining the expanded responsibilities:

+/**
+ * TokenAuthModule handles authentication through tokens and manages related
+ * workflow configurations. It provides integration with customer management,
+ * UI definitions, and project scoping to support the authentication process.
+ */
 @Module({
packages/common/src/utils/collection-flow/build-collection-flow-state.ts (2)

39-43: LGTM! Consider adding type assertion for additionalInformation.

The simplified return statement improves code clarity while maintaining the same functionality.

Consider adding explicit type assertion for additionalInformation to ensure type safety:

  return {
    config,
    state,
-   additionalInformation: inputConfig.additionalInformation || {},
+   additionalInformation: inputConfig.additionalInformation || {} as TCollectionFlow['additionalInformation'],
  };

Line range hint 24-24: Consider using proper logging infrastructure.

The console.log statement might not be suitable for production code. Consider using a proper logging infrastructure with appropriate log levels.

-    console.log('Collection Flow Context built progress state: ', progressState);
+    logger.debug('Collection Flow Context built progress state', { progressState });
services/workflows-service/src/auth/workflow-token/workflow-token.repository.ts (1)

27-32: LGTM! The count method is well-implemented.

The implementation correctly maintains multi-tenancy by enforcing the projectId filter and uses type-safe Prisma arguments.

Consider adding JSDoc documentation to describe the method's purpose, parameters, and return value:

+  /**
+   * Counts workflow tokens for a specific project
+   * @param args - Prisma count arguments for filtering and options
+   * @param projectId - Project identifier for scoping the count
+   * @returns Promise resolving to the count of matching tokens
+   */
   async count(args: Prisma.WorkflowRuntimeDataTokenCountArgs, projectId: TProjectId) {
services/workflows-service/src/workflow/workflow.controller.external.ts (4)

384-396: Enhance error message clarity

The error message could be more specific about what type of token was not found.

-      throw new NotFoundException(`No token was found for ${workflowRuntimeDataId}`);
+      throw new NotFoundException(`No collection flow token was found for workflow runtime ID: ${workflowRuntimeDataId}`);

Line range hint 419-421: Consider extracting magic numbers to constants

The expiry calculation contains magic numbers. Consider extracting these to named constants for better maintainability.

+ const DEFAULT_TOKEN_EXPIRY_DAYS = 30;
+ const MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000;
+
- const expiresAt = new Date(Date.now() + (expiry || 30) * 24 * 60 * 60 * 1000);
+ const expiresAt = new Date(Date.now() + (expiry || DEFAULT_TOKEN_EXPIRY_DAYS) * MILLISECONDS_PER_DAY);

517-521: Consider extracting workflow runtime retrieval to a separate method

The workflow runtime retrieval logic could be extracted to improve readability and reusability.

+ private async getLockedWorkflowRuntime(id: string, transaction: any) {
+   return await this.workflowService.getWorkflowRuntimeDataByIdAndLockUnscoped({
+     id,
+     transaction,
+   });
+ }
+
- const workflowRuntime =
-   await this.workflowService.getWorkflowRuntimeDataByIdAndLockUnscoped({
-     id: params.id,
-     transaction,
-   });
+ const workflowRuntime = await this.getLockedWorkflowRuntime(params.id, transaction);

Line range hint 532-554: Consider consolidating event emissions

The two sequential event emissions share similar structure and could be consolidated into a single helper method to reduce code duplication.

+ private async emitWorkflowEvent(
+   id: string,
+   name: string,
+   payload: any,
+   projectId: string,
+   transaction: any
+ ) {
+   await this.workflowService.event(
+     {
+       id,
+       name,
+       ...(payload && { payload }),
+     },
+     [projectId],
+     projectId,
+     transaction,
+   );
+ }
+
- await this.workflowService.event(
-   {
-     id: params.id,
-     name: BUILT_IN_EVENT.DEEP_MERGE_CONTEXT,
-     payload: {
-       newContext: context,
-       arrayMergeOption: ARRAY_MERGE_OPTION.REPLACE,
-     },
-   },
-   [workflowRuntime.projectId],
-   workflowRuntime.projectId,
-   transaction,
- );
-
- await this.workflowService.event(
-   {
-     id: params.id,
-     name: params.event,
-   },
-   [workflowRuntime.projectId],
-   workflowRuntime.projectId,
-   transaction,
- );
+ await this.emitWorkflowEvent(
+   params.id,
+   BUILT_IN_EVENT.DEEP_MERGE_CONTEXT,
+   {
+     newContext: context,
+     arrayMergeOption: ARRAY_MERGE_OPTION.REPLACE,
+   },
+   workflowRuntime.projectId,
+   transaction
+ );
+
+ await this.emitWorkflowEvent(
+   params.id,
+   params.event,
+   null,
+   workflowRuntime.projectId,
+   transaction
+ );
services/workflows-service/src/auth/workflow-token/workflow-token.service.ts (1)

51-61: Simplify complex type assertions for better maintainability

The type assertions in the construction of steps are complex and might lead to issues if the structure of uiDefinition.definition changes. This can affect readability and maintainability.

Consider defining a specific interface for uiDefinition.definition and refactoring the code to reduce the need for multiple type casts. Here's an example:

interface UiDefinition {
  definition: Record<string, Record<string, unknown>>;
}

// Then, use the interface without type assertions
steps: uiDefinition?.definition
  ? getOrderedSteps(
      uiDefinition.definition,
      { finalStates: [...WORKFLOW_FINAL_STATES] },
    ).map(stepName => ({
      stateName: stepName,
    }))
  : [],
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between c83a724 and 01de2c2.

📒 Files selected for processing (15)
  • packages/common/src/schemas/documents/workflow/config-schema.ts (0 hunks)
  • packages/common/src/utils/collection-flow/build-collection-flow-state.ts (1 hunks)
  • services/workflows-service/scripts/workflows/dynamic-ui-workflow.ts (0 hunks)
  • services/workflows-service/scripts/workflows/kyb-kyc-workflow-definition.ts (0 hunks)
  • services/workflows-service/scripts/workflows/ui-definition/kyb-with-associated-companies/definition/compose-child-associated-company-definition.ts (0 hunks)
  • services/workflows-service/scripts/workflows/ui-definition/kyb-with-associated-companies/definition/compose-kyb-with-associated-companies-definition.ts (0 hunks)
  • services/workflows-service/scripts/workflows/ui-definition/kyb-with-associated-companies/definition/compose-kyc-child-workflow-definition.ts (0 hunks)
  • services/workflows-service/src/auth/auth.module.ts (1 hunks)
  • services/workflows-service/src/auth/workflow-token/workflow-token.repository.ts (2 hunks)
  • services/workflows-service/src/auth/workflow-token/workflow-token.service.ts (2 hunks)
  • services/workflows-service/src/common/guards/token-guard/token-auth.module.ts (1 hunks)
  • services/workflows-service/src/workflow/schemas/zod-schemas.ts (0 hunks)
  • services/workflows-service/src/workflow/workflow-runtime-data.repository.ts (12 hunks)
  • services/workflows-service/src/workflow/workflow.controller.external.ts (14 hunks)
  • services/workflows-service/src/workflow/workflow.service.ts (0 hunks)
💤 Files with no reviewable changes (8)
  • packages/common/src/schemas/documents/workflow/config-schema.ts
  • services/workflows-service/scripts/workflows/dynamic-ui-workflow.ts
  • services/workflows-service/scripts/workflows/kyb-kyc-workflow-definition.ts
  • services/workflows-service/scripts/workflows/ui-definition/kyb-with-associated-companies/definition/compose-child-associated-company-definition.ts
  • services/workflows-service/scripts/workflows/ui-definition/kyb-with-associated-companies/definition/compose-kyb-with-associated-companies-definition.ts
  • services/workflows-service/scripts/workflows/ui-definition/kyb-with-associated-companies/definition/compose-kyc-child-workflow-definition.ts
  • services/workflows-service/src/workflow/schemas/zod-schemas.ts
  • services/workflows-service/src/workflow/workflow.service.ts
🔇 Additional comments (14)
services/workflows-service/src/auth/auth.module.ts (1)

Line range hint 7-11: LGTM! Import paths standardization looks good.

The conversion from relative to absolute imports using the '@/' prefix improves maintainability and makes the code more resilient to file relocations.

services/workflows-service/src/common/guards/token-guard/token-auth.module.ts (2)

3-13: LGTM! Clean import organization using absolute paths.

The imports are well-organized and consistently use absolute paths, which is good for maintainability and prevents path resolution issues.


16-28: Verify potential circular dependencies with the new providers.

While the addition of new providers enhances the module's capabilities, the introduction of multiple interdependent services (Customer, ApiKey, UiDefinition, etc.) increases the complexity of the dependency graph.

Let's verify there are no circular dependencies:

✅ Verification successful

Let me analyze the dependencies further to check for potential circular dependencies.


Based on the analysis of the dependencies, I can now provide a final response:

No circular dependencies detected in the token-auth.module providers

The verification shows that:

  1. CustomerService depends on ApiKeyService but not vice versa
  2. UiDefinitionService only depends on its repository and WorkflowRuntimeDataRepository
  3. None of the services import TokenAuthModule, preventing circular dependencies
  4. ProjectScopeService appears to be a standalone service without dependencies on other providers

The dependency graph is acyclic and the providers are properly layered, making it safe to include them in the token-auth.module.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for potential circular dependencies between the newly added services

# Search for imports of TokenAuthModule or its exports in the new service files
echo "Checking for potential circular dependencies..."
rg -l "TokenAuthModule|WorkflowTokenRepository|WorkflowTokenService|TokenAuthGuard" \
  $(fd -t f "$(rg -l "CustomerService|ApiKeyService|UiDefinitionService|ProjectScopeService" -g "*.ts")")

# Check if any of the new services import each other
echo "Checking for cross-dependencies between new services..."
for service in "CustomerService" "ApiKeyService" "UiDefinitionService" "ProjectScopeService"; do
  echo "Dependencies for $service:"
  rg "import.*$service" -g "*.ts"
done

Length of output: 22708


Script:

#!/bin/bash
# Check if any of the newly added services import TokenAuthModule or its components
echo "Checking if new services import TokenAuthModule or its components..."
rg "import.*\{.*TokenAuthModule.*\}" services/workflows-service/src/customer/customer.service.ts services/workflows-service/src/customer/api-key/api-key.service.ts services/workflows-service/src/ui-definition/ui-definition.service.ts services/workflows-service/src/project/project-scope.service.ts

# Check if CustomerService has any circular dependencies with ApiKeyService
echo "Checking CustomerService and ApiKeyService dependencies..."
ast-grep --pattern 'class CustomerService {
  $$$
  constructor($$$) {
    $$$
  }
  $$$
}'

ast-grep --pattern 'class ApiKeyService {
  $$$
  constructor($$$) {
    $$$
  }
  $$$
}'

# Check if UiDefinitionService has any circular dependencies
echo "Checking UiDefinitionService dependencies..."
ast-grep --pattern 'class UiDefinitionService {
  $$$
  constructor($$$) {
    $$$
  }
  $$$
}'

# Check if ProjectScopeService has any circular dependencies
echo "Checking ProjectScopeService dependencies..."
ast-grep --pattern 'class ProjectScopeService {
  $$$
  constructor($$$) {
    $$$
  }
  $$$
}'

Length of output: 20173

services/workflows-service/src/auth/workflow-token/workflow-token.repository.ts (1)

27-32: Verify the usage of the new count method in workflow configurations.

Since this PR involves removing createCollectionFlowToken, let's verify how this new count method integrates with the updated workflow configurations.

✅ Verification successful

The count method is properly integrated and used in the workflow token creation flow

The verification shows that the count method is correctly used within the WorkflowTokenService.create() method to check for existing tokens before creating a new one. This is part of the token management flow and not related to the removed createCollectionFlowToken. The method serves a different purpose and is working as intended.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for potential usages of the new count method in workflow-related files
rg -l "workflowToken.*count" --type typescript

# Check for any remaining references to createCollectionFlowToken
rg "createCollectionFlowToken" --type typescript

Length of output: 167


Script:

#!/bin/bash
# Search for potential usages of the new count method in workflow-related files
rg -l "workflowToken.*count"

# Look for workflow token related files and their content
fd "workflow.*token" -t f -X cat

# Check for any remaining references to createCollectionFlowToken
rg "createCollectionFlowToken"

Length of output: 8536

services/workflows-service/src/workflow/workflow-runtime-data.repository.ts (4)

26-26: LGTM! Improved naming convention

The rename from prisma to prismaService better follows Angular/NestJS naming conventions and makes the dependency injection more explicit.


32-32: LGTM! Consistent parameter updates

The default transaction parameters have been consistently updated across all methods to use this.prismaService, maintaining alignment with the constructor change while preserving the correct type signatures.

Also applies to: 64-64, 88-88, 136-136, 151-151, 168-168


50-52: LGTM! Consistent service reference updates

All method bodies have been updated to use this.prismaService, maintaining consistency with the constructor change while preserving the original functionality.

Also applies to: 58-58, 202-209, 261-272, 279-282, 288-291, 398-398


Line range hint 184-190: Verify the existence of custom PostgreSQL function

The code uses a custom PostgreSQL function jsonb_deep_merge_with_options. Let's verify its existence in the database schema.

✅ Verification successful

Custom PostgreSQL function is properly defined and maintained

The jsonb_deep_merge_with_options function is properly defined in the database schema through two migrations:

  • Initial implementation in migration 20230723221706_add_jsonb_deep_merge_with_options
  • Bug fix for handling primitives in migration 20231122094527_fix_jsonb_deep_merge_with_options_primitives_bug

The function is implemented in PLV8 (JavaScript in PostgreSQL), supports multiple array merging strategies ('concat', 'by_id', 'by_index', 'replace'), and handles edge cases appropriately.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if the custom PostgreSQL function exists in the migration files

# Search for the function definition in migration files
rg -l "jsonb_deep_merge_with_options" --type sql

# Search for function usage in other files
ast-grep --pattern 'jsonb_deep_merge_with_options'

Length of output: 330


Script:

#!/bin/bash
# Let's check the content of these migration files to verify the function definition

# Check the initial migration that added the function
cat services/workflows-service/prisma/migrations/20230723221706_add_jsonb_deep_merge_with_options/migration.sql

# Check the fix migration
cat services/workflows-service/prisma/migrations/20231122094527_fix_jsonb_deep_merge_with_options_primitives_bug/migration.sql

Length of output: 7504

services/workflows-service/src/workflow/workflow.controller.external.ts (2)

Line range hint 55-60: LGTM! Clear and descriptive service naming

The renaming from service to workflowService improves code clarity by making the service's purpose explicit.


408-417: LGTM! Improved error handling for workflow runtime data validation

The added try-catch block provides better error handling when validating workflow runtime data existence.

services/workflows-service/src/auth/workflow-token/workflow-token.service.ts (4)

3-10: Imports are appropriate and necessary for added functionality

The additional imports bring in the necessary types and services for the new logic in the WorkflowTokenService. This ensures all dependencies are properly declared.


14-19: Constructor correctly injects required services

The updated constructor includes additional services that are needed for the enhanced create method functionality. Dependency injection is properly used.


107-112: New count method aligns with service design and enhances functionality

The addition of the count method in WorkflowTokenService provides a useful abstraction over the repository layer, allowing for counting tokens based on specific criteria.


74-82: Ensure existing context properties are not overwritten unintentionally

When merging new properties into context, there is a possibility that existing properties could be overwritten. Specifically, confirm that adding collectionFlow and updating metadata does not overwrite any important data in the existing context.

Run the following script to check for any usages of collectionFlow and metadata in context handling:

Comment on lines 6 to +7
// eslint-disable-next-line import/no-cycle
import { UserModule } from '../user/user.module';
import { UserModule } from '@/user/user.module';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Consider extracting authentication-related functionality into a separate module

Based on the analysis of the codebase, here's how to resolve the circular dependency:

  1. Create a new AuthenticationModule that will contain:

    • PasswordService (it's self-contained and only handles password operations)
    • Authentication strategies (local.strategy.ts)
    • Session serializer
  2. Restructure the current modules:

    • AuthModule should focus on authorization and depend on UserModule and AuthenticationModule
    • UserModule should only depend on AuthenticationModule for password operations
    • Both modules can then remove their forwardRef usage

This separation follows the single responsibility principle and creates a cleaner dependency graph:

AuthenticationModule <-- UserModule
                    <-- AuthModule <-- UserModule
🔗 Analysis chain

Consider resolving the circular dependency with UserModule.

While forwardRef works as a temporary solution, circular dependencies can lead to maintenance issues and potential bugs. Consider:

  1. Extracting shared logic into a separate module
  2. Restructuring the dependencies to follow a more unidirectional flow

Let's analyze the dependency cycle:


Let me gather more information about the services and dependencies to better understand the circular dependency structure.


Let me check the specific services and their dependencies to understand what can be extracted.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Analyze the circular dependency between AuthModule and UserModule

# Check imports in UserModule
echo "Checking UserModule imports:"
rg -A 5 "import.*from.*auth" $(fd -t f "user.module.ts$")

# Check imports in AuthModule
echo "Checking AuthModule imports:"
rg -A 5 "import.*from.*user" $(fd -t f "auth.module.ts$")

Length of output: 4294


Script:

#!/bin/bash
# Check the services and dependencies in both modules

# Check AuthModule contents
echo "AuthModule contents:"
rg -A 15 "@Module\({" services/workflows-service/src/auth/auth.module.ts

# Check UserModule contents
echo "UserModule contents:"
rg -A 15 "@Module\({" services/workflows-service/src/user/user.module.ts

# Check what services from auth are used in user
echo "Auth services used in user:"
rg "import.*from.*auth/" services/workflows-service/src/user/

# Check what services from user are used in auth
echo "User services used in auth:"
rg "import.*from.*user/" services/workflows-service/src/auth/

Length of output: 2148


Script:

#!/bin/bash
# Check the specific service implementations

# Check PasswordService usage
echo "PasswordService implementation:"
ast-grep --pattern 'class PasswordService {
  $$$
}'

# Check AuthService implementation
echo "AuthService implementation:"
ast-grep --pattern 'class AuthService {
  $$$
}'

# Check UserService implementation
echo "UserService implementation:"
ast-grep --pattern 'class UserService {
  $$$
}'

# Check module decorators (fixing previous regex)
echo "Module decorators:"
rg "@Module\(\{" -A 10 services/workflows-service/src/auth/auth.module.ts services/workflows-service/src/user/user.module.ts

Length of output: 10268

Comment on lines +28 to +32
const existingTokensForWorkflowRuntime = await this.count(
{ where: { workflowRuntimeDataId } },
projectId,
);

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Potential race condition when checking existing tokens

The check for existingTokensForWorkflowRuntime may lead to a race condition if multiple requests are processed concurrently, possibly resulting in multiple tokens being created when only one is intended.

Consider implementing a mutex, database-level constraint, or transaction to ensure that only one token is created per workflowRuntimeDataId.

…UserController

- Add imports for UiDefinitionRepository and ApiKey services
- Include new dependencies in module testing setup
- Create a new UI definition instance as part of the test setup

(your tests are more complex than explaining the plot of Inception)
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Outside diff range and nitpick comments (2)
services/workflows-service/src/collection-flow/controllers/collection-flow.no-user.controller.intg.test.ts (2)

77-81: Consider grouping related providers together

While the additions are correct, consider grouping related providers together for better readability. For example, group UI-related providers (UiDefinitionService, UiDefinitionRepository) and Customer-related providers (CustomerService, ApiKeyService, ApiKeyRepository) consecutively.

-        UiDefinitionService,
-        UiDefinitionRepository,
-        CustomerService,
-        ApiKeyService,
-        ApiKeyRepository,
+        // UI Definition related
+        UiDefinitionService,
+        UiDefinitionRepository,
+        // Customer related
+        CustomerService,
+        ApiKeyService,
+        ApiKeyRepository,

Database cleanup issue is caused by commented-out transaction control

The database cleanup issue is caused by the commented-out transaction control in the database helper. The helper attempts to delete data without proper session replication role settings, which can cause referential integrity issues during cleanup.

Specific issues in database-helper.ts:

  • Line 19: SET session_replication_role = replica is commented out
  • Line 24: SET session_replication_role = DEFAULT is commented out

These settings are crucial for properly bypassing referential constraints during cleanup operations, which explains why some tests can't be run due to cleanup issues.

🔗 Analysis chain

Line range hint 192-192: Address the database cleanup issue

The TODO comment indicates an unresolved database cleanup issue that's preventing additional test cases from running. This should be prioritized as it affects test coverage and reliability.

Let's check for similar cleanup issues in other test files:

Would you like help investigating and resolving the database cleanup issue? I can help create a GitHub issue to track this task.


Let me gather more context about this test file and related test files to better understand the cleanup issue.


Let me check the test helpers to understand the database cleanup implementation since the issue seems to be related to that.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for similar DB cleanup related comments
rg "TODO.*[Dd]([Bb]|atabase).*cleanup" --type ts

Length of output: 216


Script:

#!/bin/bash
# Get the content of the test file to understand the cleanup context
cat services/workflows-service/src/collection-flow/controllers/collection-flow.no-user.controller.intg.test.ts

# Look for similar integration test files in the same directory
fd ".*\.intg\.test\.ts$" services/workflows-service/src/collection-flow/controllers/

Length of output: 9466


Script:

#!/bin/bash
# Check the database helper implementation
cat services/workflows-service/src/test/helpers/database-helper.ts

# Look for other test files using these helpers
rg "cleanupDatabase|tearDownDatabase" --type ts

Length of output: 7472

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 01de2c2 and 0982228.

📒 Files selected for processing (2)
  • services/workflows-service/src/collection-flow/controllers/collection-flow.no-user.controller.intg.test.ts (4 hunks)
  • services/workflows-service/src/workflow/workflow.service.unit.test.ts (0 hunks)
💤 Files with no reviewable changes (1)
  • services/workflows-service/src/workflow/workflow.service.unit.test.ts
🔇 Additional comments (2)
services/workflows-service/src/collection-flow/controllers/collection-flow.no-user.controller.intg.test.ts (2)

40-42: LGTM: Clean import additions

The new imports are properly organized and use absolute paths consistently.


105-105: LGTM: Consistent repository initialization

The uiDefinitionRepository initialization follows the established pattern and is properly typed.

Comment on lines +135 to +143
await uiDefinitionRepository.create({
data: {
uiSchema: {},
projectId: project.id,
uiContext: 'collection_flow',
name: 'signup-test-ui-definition',
workflowDefinitionId: workflowDefinition.id,
},
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

UI definition test coverage is incomplete

The test file creates a UI definition with an empty schema but doesn't verify its integration with the workflow. This is concerning because:

  • The controller implementation shows that uiDefinitionId is used in the workflow context
  • There are no assertions verifying the UI definition's presence or schema in the test responses
  • The empty uiSchema might not represent real-world scenarios

Suggested improvements:

  • Add assertions to verify the UI definition is correctly linked to the workflow
  • Test the workflow context endpoint to ensure UI definition data is properly included
  • Use a realistic UI schema that matches production scenarios
🔗 Analysis chain

Enhance test coverage for UI definition integration

While the UI definition setup is added, consider the following improvements:

  1. Add assertions to verify the UI definition's integration with the workflow
  2. Consider adding a more realistic uiSchema instead of an empty object
  3. Add test cases specifically for UI definition-related functionality

Let's check if there are any existing UI definition test cases:

Example test case to add:

it('should include UI definition in the workflow context', async () => {
  const response = await request(app.getHttpServer())
    .get('/collection-flow/context')
    .set('authorization', `Bearer ${workflowRuntimeDataToken.token}`);

  expect(response.body.context.uiDefinition).toBeDefined();
  expect(response.body.context.uiDefinition.uiSchema).toEqual({});
});
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for UI definition related test cases
rg -l "uiDefinition.*test" --type ts

Length of output: 38


Script:

#!/bin/bash
# Let's try a broader search for UI definition tests and related code
rg -l "uiDefinition" --type ts

# Also search for specific UI definition test patterns
rg "describe.*['\"].*UI.*definition" --type ts -A 5

# Search for UI schema related tests
rg "uiSchema.*test" --type ts -A 5

Length of output: 5914


Script:

#!/bin/bash
# Let's check the collection flow controller test file for context
rg "uiSchema|uiDefinition" services/workflows-service/src/collection-flow/controllers/collection-flow.no-user.controller.intg.test.ts -B 2 -A 2

# Let's also check if there are any UI definition assertions in the test file
rg "expect.*uiDefinition|expect.*uiSchema" services/workflows-service/src/collection-flow/controllers/collection-flow.no-user.controller.intg.test.ts

# Check the actual controller implementation to understand UI definition usage
rg "uiDefinition|uiSchema" services/workflows-service/src/collection-flow/controllers/collection-flow.no-user.controller.ts -B 2 -A 2

Length of output: 1272

…service

- Add integration test for UI definition repository
- Update results validation with environment variables

(These tests are so robust, they can survive a zombie apocalypse… but maybe not a spelling mistake)
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (1)
services/workflows-service/src/collection-flow/collection-flow.service.intg.test.ts (1)

236-257: Enhance test coverage for context structure

The expected context structure is well-defined, but consider adding:

  1. Tests for missing or invalid environment variables
  2. Validation of URL formats in metadata
  3. Edge cases for missing customer display name

Example test cases to add:

it('should handle missing environment variables', async () => {
  // Mock env with undefined values
  // Verify error handling or fallback values
});

it('should validate URL formats', async () => {
  // Test with invalid URL formats in env
  // Verify validation or sanitization
});

it('should handle missing customer display name', async () => {
  // Create customer without displayName
  // Verify fallback behavior
});
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 0982228 and dd2f683.

📒 Files selected for processing (1)
  • services/workflows-service/src/collection-flow/collection-flow.service.intg.test.ts (5 hunks)
🔇 Additional comments (2)
services/workflows-service/src/collection-flow/collection-flow.service.intg.test.ts (2)

40-40: LGTM: Clean setup of new dependencies

The addition of the env import and UiDefinitionRepository is well-structured and follows the existing pattern of dependency injection in the test setup.

Also applies to: 125-125, 164-164


208-216: Verify uiContext value and consider additional test cases

While the UI definition creation is correctly implemented, consider:

  1. Verifying if 'collection_flow' is the correct constant for uiContext
  2. Adding test cases for invalid/missing UI definitions to ensure proper error handling
✅ Verification successful

'collection_flow' is a valid uiContext value

The value 'collection_flow' is correctly used as it's one of the two valid enum values ('back_office' | 'collection_flow') defined in the UiDefinitionModel. The test implementation is consistent with the model's constraints.

Regarding test coverage:

  • The current minimal test case is sufficient for basic functionality
  • Additional test cases for invalid UI definitions would be handled by class-validator decorators (@IsString, @isObject, etc.)
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other occurrences of the uiContext value to verify consistency
rg -l "collection_flow" --type ts

Length of output: 1838


Script:

#!/bin/bash
# Check the UI context definition in the model and common constants
echo "=== Checking UI Definition model ==="
cat services/workflows-service/src/ui-definition/ui-definition.model.ts

echo -e "\n=== Checking common constants ==="
cat packages/common/src/consts/index.ts

Length of output: 6135

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant