feat: implement feeding of helminth #597

Merged
Sainan merged 1 commits from feed-the-beast into main 2024-12-21 22:26:15 -08:00
Owner

More progress on #288. Currently, Helminth never gets tired of resources; this may be implemented later.

More progress on #288. Currently, Helminth never gets tired of resources; this may be implemented later.
coderabbitai[bot] commented 2024-12-21 20:05:43 -08:00 (Migrated from github.com)
Author
Owner

Walkthrough

This pull request introduces changes to the Warframe inventory management system, specifically focusing on the Infested Foundry functionality. The modifications span across multiple files, including package.json, infestedFoundryController.ts, inventoryModel.ts, and inventoryTypes.ts.

The primary changes involve updating the data structure for handling Helminth resources. A new IHelminthResource interface is introduced, which replaces the previous ITypeCount type for representing resources. The infestedFoundryController now includes a new case "c" for processing item consumption, allowing for more detailed tracking of resource contributions.

The dependency warframe-public-export-plus is updated to version 0.5.8. The inventory database interface has also been modified, with several properties changing their type representations, such as TrainingDate, LoadOutPresets, Mailbox, and GuildId, now using more specific MongoDB-related types.

These changes appear to enhance the precision and flexibility of resource management within the Warframe inventory system, particularly for the Infested Foundry mechanics.

Sequence Diagram

sequenceDiagram
    participant Client
    participant InfestedFoundryController
    participant InventoryModel
    participant Database

    Client->>InfestedFoundryController: Send item consumption request
    InfestedFoundryController->>InventoryModel: Retrieve account inventory
    InventoryModel->>Database: Fetch inventory data
    Database-->>InventoryModel: Return inventory
    InfestedFoundryController->>InfestedFoundryController: Process resource contributions
    InfestedFoundryController->>InfestedFoundryController: Calculate XP and update resources
    InfestedFoundryController->>InventoryModel: Save updated inventory
    InventoryModel->>Database: Persist changes
    Database-->>InventoryModel: Confirm save
    InfestedFoundryController-->>Client: Respond with inventory changes
  • #586: Modifications to IInventoryDatabase and IInventoryResponse interfaces, related to inventory management system updates.
  • #582: Changes to the inventoryController, connected to resource management and processing mechanisms.

Tip

CodeRabbit's docstrings feature is now available as part of our Early Access Program! Simply use the command @coderabbitai generate docstrings to have CodeRabbit automatically generate docstrings for your pull request. We would love to hear your feedback on Discord.


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 generate docstrings to generate docstrings for this PR. (Beta)
  • @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.

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.
<!-- This is an auto-generated comment: summarize by coderabbit.ai --> <!-- walkthrough_start --> ## Walkthrough This pull request introduces changes to the Warframe inventory management system, specifically focusing on the Infested Foundry functionality. The modifications span across multiple files, including `package.json`, `infestedFoundryController.ts`, `inventoryModel.ts`, and `inventoryTypes.ts`. The primary changes involve updating the data structure for handling Helminth resources. A new `IHelminthResource` interface is introduced, which replaces the previous `ITypeCount` type for representing resources. The `infestedFoundryController` now includes a new case "c" for processing item consumption, allowing for more detailed tracking of resource contributions. The dependency `warframe-public-export-plus` is updated to version 0.5.8. The inventory database interface has also been modified, with several properties changing their type representations, such as `TrainingDate`, `LoadOutPresets`, `Mailbox`, and `GuildId`, now using more specific MongoDB-related types. These changes appear to enhance the precision and flexibility of resource management within the Warframe inventory system, particularly for the Infested Foundry mechanics. ## Sequence Diagram ```mermaid sequenceDiagram participant Client participant InfestedFoundryController participant InventoryModel participant Database Client->>InfestedFoundryController: Send item consumption request InfestedFoundryController->>InventoryModel: Retrieve account inventory InventoryModel->>Database: Fetch inventory data Database-->>InventoryModel: Return inventory InfestedFoundryController->>InfestedFoundryController: Process resource contributions InfestedFoundryController->>InfestedFoundryController: Calculate XP and update resources InfestedFoundryController->>InventoryModel: Save updated inventory InventoryModel->>Database: Persist changes Database-->>InventoryModel: Confirm save InfestedFoundryController-->>Client: Respond with inventory changes ``` ## Possibly Related PRs - **#586**: Modifications to `IInventoryDatabase` and `IInventoryResponse` interfaces, related to inventory management system updates. - **#582**: Changes to the `inventoryController`, connected to resource management and processing mechanisms. <!-- walkthrough_end --> <!-- announcements_start --> > [!TIP] > CodeRabbit's [docstrings feature](https://docs.coderabbit.ai/finishing-touches/docstrings) is now available as part of our [Early Access Program](https://docs.coderabbit.ai/early-access)! Simply use the command `@coderabbitai generate docstrings` to have CodeRabbit automatically generate docstrings for your pull request. We would love to hear your feedback on [Discord](https://discord.com/channels/1134356397673414807/1317286905557287022). <!-- announcements_end --> <!-- internal state start --> <!-- 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 --> <!-- internal state end --> <!-- tips_start --> --- 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? <details> <summary>❤️ Share</summary> - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code) </details> <details> <summary>🪧 Tips</summary> ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - 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 generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR. ([Beta](https://docs.coderabbit.ai/early-access#beta)) - `@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. ### Documentation and Community - Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit. - Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements. </details> <!-- tips_end -->
coderabbitai[bot] (Migrated from github.com) reviewed 2024-12-21 20:07:32 -08:00
coderabbitai[bot] (Migrated from github.com) left a comment
Author
Owner

Actionable comments posted: 3

🧹 Nitpick comments (4)
src/controllers/api/infestedFoundryController.ts (4)

58-60: Recommend validating mode parameters and request data.
The new "c" case for consuming items is understandable, but there seems to be no early validation for invalid request data or unknown “ItemType”. Consider adding checks to avoid potential runtime errors.


66-68: Variable naming is clear; consider grouping declarations.
Everything is fine here, but you can group or inline variables if needed for brevity.


93-95: Use a named constant instead of the magic number.
Multiplying by 666 might be intentional, but it may be clearer to define a well-named constant or config value for clarity and maintainability.

- inventory.InfestedFoundry.XP += 666 * totalPercentagePointsGained;
+ const HELMINTH_XP_FACTOR = 666;
+ inventory.InfestedFoundry.XP += HELMINTH_XP_FACTOR * totalPercentagePointsGained;

130-135: Consider clarifying date usage.
The “Date” field is a number, presumably a Unix timestamp. This is fine, but be sure to consistently handle or convert the timestamp as appropriate.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 37f6fe9323 and 695f3bf77a.

Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (4)
  • package.json (1 hunks)
  • src/controllers/api/infestedFoundryController.ts (3 hunks)
  • src/models/inventoryModels/inventoryModel.ts (2 hunks)
  • src/types/inventoryTypes/inventoryTypes.ts (1 hunks)
Files skipped from review due to trivial changes (1)
  • package.json
🔇 Additional comments (8)
src/controllers/api/infestedFoundryController.ts (3)

6-6: Import correctness confirmed.
No issues spotted with the import statement for IMiscItem.


61-65: Initialization logic looks good.
Ensuring InfestedFoundry, Resources, and XP are defined before usage is a solid approach.


97-105: Response structure is consistent.
The final JSON response includes the updated InfestedFoundry info and the adjusted MiscItems, which is appropriate.

src/types/inventoryTypes/inventoryTypes.ts (2)

527-531: New IHelminthResource interface is well-aligned with the current design.
The switch from “ItemCount” to “Count” is consistent with usage in the InfestedFoundry logic.


535-535: Resource array usage looks good.
Updating IInfestedFoundry.Resources to IHelminthResource[] clarifies the difference between Helminth resources and other items in the inventory.

src/models/inventoryModels/inventoryModel.ts (3)

28-28: Import references are consistent.
The import of IHelminthResource is necessary for the new schema usage and looks correct.


459-459: No additional changes.
This blank line was likely added for readability. No action needed.


463-463: Resource array mapping is properly updated.
Switching to helminthResourceSchema fosters type safety and consistency with the controller changes.

**Actionable comments posted: 3** <details> <summary>🧹 Nitpick comments (4)</summary><blockquote> <details> <summary>src/controllers/api/infestedFoundryController.ts (4)</summary><blockquote> `58-60`: **Recommend validating mode parameters and request data.** The new "c" case for consuming items is understandable, but there seems to be no early validation for invalid request data or unknown “ItemType”. Consider adding checks to avoid potential runtime errors. --- `66-68`: **Variable naming is clear; consider grouping declarations.** Everything is fine here, but you can group or inline variables if needed for brevity. --- `93-95`: **Use a named constant instead of the magic number.** Multiplying by 666 might be intentional, but it may be clearer to define a well-named constant or config value for clarity and maintainability. ```diff - inventory.InfestedFoundry.XP += 666 * totalPercentagePointsGained; + const HELMINTH_XP_FACTOR = 666; + inventory.InfestedFoundry.XP += HELMINTH_XP_FACTOR * totalPercentagePointsGained; ``` --- `130-135`: **Consider clarifying date usage.** The “Date” field is a number, presumably a Unix timestamp. This is fine, but be sure to consistently handle or convert the timestamp as appropriate. </blockquote></details> </blockquote></details> <details> <summary>📜 Review details</summary> **Configuration used: .coderabbit.yaml** **Review profile: CHILL** **Plan: Pro** <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 37f6fe9323c64e22bd50da83e60ef8ed0126916d and 695f3bf77a945eb2c9929065eaff3b8dad5649f6. </details> <details> <summary>⛔ Files ignored due to path filters (1)</summary> * `package-lock.json` is excluded by `!**/package-lock.json` </details> <details> <summary>📒 Files selected for processing (4)</summary> * `package.json` (1 hunks) * `src/controllers/api/infestedFoundryController.ts` (3 hunks) * `src/models/inventoryModels/inventoryModel.ts` (2 hunks) * `src/types/inventoryTypes/inventoryTypes.ts` (1 hunks) </details> <details> <summary>✅ Files skipped from review due to trivial changes (1)</summary> * package.json </details> <details> <summary>🔇 Additional comments (8)</summary> <details> <summary>src/controllers/api/infestedFoundryController.ts (3)</summary> `6-6`: **Import correctness confirmed.** No issues spotted with the import statement for IMiscItem. --- `61-65`: **Initialization logic looks good.** Ensuring InfestedFoundry, Resources, and XP are defined before usage is a solid approach. --- `97-105`: **Response structure is consistent.** The final JSON response includes the updated InfestedFoundry info and the adjusted MiscItems, which is appropriate. </details> <details> <summary>src/types/inventoryTypes/inventoryTypes.ts (2)</summary> `527-531`: **New IHelminthResource interface is well-aligned with the current design.** The switch from “ItemCount” to “Count” is consistent with usage in the InfestedFoundry logic. --- `535-535`: **Resource array usage looks good.** Updating IInfestedFoundry.Resources to IHelminthResource[] clarifies the difference between Helminth resources and other items in the inventory. </details> <details> <summary>src/models/inventoryModels/inventoryModel.ts (3)</summary> `28-28`: **Import references are consistent.** The import of IHelminthResource is necessary for the new schema usage and looks correct. --- `459-459`: **No additional changes.** This blank line was likely added for readability. No action needed. --- `463-463`: **Resource array mapping is properly updated.** Switching to helminthResourceSchema fosters type safety and consistency with the controller changes. </details> </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
@ -56,0 +89,4 @@
miscItemChanges.push({ ItemType: contribution.ItemType, ItemCount: snack.count * -1 });
}
}
coderabbitai[bot] (Migrated from github.com) commented 2024-12-21 20:07:31 -08:00
Author
Owner

⚠️ Potential issue

Handle potential missing snack data.
If a contribution’s “ItemType” is not present in “ExportMisc.helminthSnacks”, “snack” would be undefined, causing a runtime error. Consider adding a guard clause to handle missing or invalid keys.

Proposed check:

+ if (!snack) {
+   res.status(400).json({ error: `Invalid snack item type: ${contribution.ItemType}` });
+   return;
+ }

Committable suggestion skipped: line range outside the PR's diff.

_:warning: Potential issue_ **Handle potential missing snack data.** If a contribution’s “ItemType” is not present in “ExportMisc.helminthSnacks”, “snack” would be undefined, causing a runtime error. Consider adding a guard clause to handle missing or invalid keys. Proposed check: ```diff + if (!snack) { + res.status(400).json({ error: `Invalid snack item type: ${contribution.ItemType}` }); + return; + } ``` > Committable suggestion skipped: line range outside the PR's diff. <!-- This is an auto-generated comment by CodeRabbit -->
@ -56,0 +97,4 @@
res.json({
InventoryChanges: {
InfestedFoundry: {
XP: inventory.InfestedFoundry.XP,
coderabbitai[bot] (Migrated from github.com) commented 2024-12-21 20:07:31 -08:00
Author
Owner

💡 Codebase verification

Verify negative item counts in inventory.
The addMiscItems implementation in inventoryService.ts does not check for negative item counts when updating the inventory. This could lead to negative inventory states when removing items. Please add validation to ensure item counts don't go below zero.

Example locations that need attention:

  • src/services/inventoryService.ts: Add validation in addMiscItems function before updating MiscItems[itemIndex].ItemCount to prevent negative values
  • src/controllers/api/infestedFoundryController.ts: Add pre-validation before calling addMiscItems to ensure the player has enough items to remove
🔗 Analysis chain

Verify negative item counts.
When removing items from the player’s inventory, confirm that the user’s existing item count isn’t going below zero. This can prevent accidental negative inventory states.


Let me check the implementation of addMiscItems to verify how it handles negative item counts.


Let me try a different pattern to find the implementation.


Let me try one more search pattern to locate the implementation.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for any references to 'addMiscItems' calls that allow negative item counts.
rg -A 3 --json $'addMiscItems\\('

Length of output: 16660


Script:

#!/bin/bash
# Find the implementation of addMiscItems function
ast-grep --pattern 'function addMiscItems($_) {
  $$$
}'

Length of output: 58


Script:

#!/bin/bash
# Find the implementation of addMiscItems function with export
ast-grep --pattern 'export function addMiscItems($_) {
  $$$
}'

# Also search with ripgrep for any definition
rg -A 10 "function addMiscItems"

Length of output: 100


Script:

#!/bin/bash
# Search for the file containing addMiscItems implementation
fd -t f -e ts | xargs rg -l "addMiscItems.*=" 

# Then look for the actual implementation
rg -A 15 "addMiscItems.*=" 

Length of output: 1303

_:bulb: Codebase verification_ **Verify negative item counts in inventory.** The `addMiscItems` implementation in `inventoryService.ts` does not check for negative item counts when updating the inventory. This could lead to negative inventory states when removing items. Please add validation to ensure item counts don't go below zero. Example locations that need attention: - `src/services/inventoryService.ts`: Add validation in `addMiscItems` function before updating `MiscItems[itemIndex].ItemCount` to prevent negative values - `src/controllers/api/infestedFoundryController.ts`: Add pre-validation before calling `addMiscItems` to ensure the player has enough items to remove <details> <summary>🔗 Analysis chain</summary> **Verify negative item counts.** When removing items from the player’s inventory, confirm that the user’s existing item count isn’t going below zero. This can prevent accidental negative inventory states. --- Let me check the implementation of `addMiscItems` to verify how it handles negative item counts. --- Let me try a different pattern to find the implementation. --- Let me try one more search pattern to locate the implementation. </details> <details> <summary>🏁 Scripts executed</summary> The following scripts were executed for the analysis: Script: ```shell #!/bin/bash # Check for any references to 'addMiscItems' calls that allow negative item counts. rg -A 3 --json $'addMiscItems\\(' ``` Length of output: 16660 --- Script: ```shell #!/bin/bash # Find the implementation of addMiscItems function ast-grep --pattern 'function addMiscItems($_) { $$$ }' ``` Length of output: 58 --- Script: ```shell #!/bin/bash # Find the implementation of addMiscItems function with export ast-grep --pattern 'export function addMiscItems($_) { $$$ }' # Also search with ripgrep for any definition rg -A 10 "function addMiscItems" ``` Length of output: 100 --- Script: ```shell #!/bin/bash # Search for the file containing addMiscItems implementation fd -t f -e ts | xargs rg -l "addMiscItems.*=" # Then look for the actual implementation rg -A 15 "addMiscItems.*=" ``` Length of output: 1303 </details> <!-- This is an auto-generated comment by CodeRabbit -->
@ -461,3 +463,4 @@
Resources: { type: [helminthResourceSchema], default: undefined },
Slots: Number,
XP: Number,
ConsumedSuits: { type: [consumedSchuitsSchema], default: undefined },
coderabbitai[bot] (Migrated from github.com) commented 2024-12-21 20:07:31 -08:00
Author
Owner

🛠️ Refactor suggestion

Schema definition is correct; consider adding validations.
You might add a minimum value validator for “Count” to avoid impossible negative states.

- const helminthResourceSchema = new Schema<IHelminthResource>({ ItemType: String, Count: Number }, { _id: false });
+ const helminthResourceSchema = new Schema<IHelminthResource>({
+   ItemType: { type: String, required: true },
+   Count: { type: Number, required: true, min: 0 }
+ }, { _id: false });
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

const helminthResourceSchema = new Schema<IHelminthResource>({
  ItemType: { type: String, required: true },
  Count: { type: Number, required: true, min: 0 }
}, { _id: false });
_:hammer_and_wrench: Refactor suggestion_ **Schema definition is correct; consider adding validations.** You might add a minimum value validator for “Count” to avoid impossible negative states. ```diff - const helminthResourceSchema = new Schema<IHelminthResource>({ ItemType: String, Count: Number }, { _id: false }); + const helminthResourceSchema = new Schema<IHelminthResource>({ + ItemType: { type: String, required: true }, + Count: { type: Number, required: true, min: 0 } + }, { _id: false }); ``` <!-- suggestion_start --> <details> <summary>📝 Committable suggestion</summary> > ‼️ **IMPORTANT** > Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements. `````suggestion const helminthResourceSchema = new Schema<IHelminthResource>({ ItemType: { type: String, required: true }, Count: { type: Number, required: true, min: 0 } }, { _id: false }); ````` </details> <!-- suggestion_end --> <!-- This is an auto-generated comment by CodeRabbit -->
Sign in to join this conversation.
No description provided.