Skip to content

add task solution#321

Open
Taipan-4ik wants to merge 2 commits intomate-academy:masterfrom
Taipan-4ik:develop
Open

add task solution#321
Taipan-4ik wants to merge 2 commits intomate-academy:masterfrom
Taipan-4ik:develop

Conversation

@Taipan-4ik
Copy link

No description provided.

Copy link

@mateacademy-ai-mentor mateacademy-ai-mentor left a comment

Choose a reason for hiding this comment

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

Review Summary

Decision: Request Changes

Your implementation is close, but there is a critical blocker related to destination paths ending with a slash. This violates explicit checklist items (1.2, 1.6, 3.1, 3.5) and will cause functional failures.

Critical issues to fix

  1. Destination ending with slash must exist as a directory

    • Location: src/app.js (around the logic that interprets the destination path; likely near your statSync/existsSync checks)
    • Problem: If destination ends with / (e.g., dest/) and dest does not exist, the code currently falls through to parent directory checks or throws an error about the parent directory. The requirement states: when a destination ends with /, it must be treated as a directory and must exist; otherwise, throw an error specifically about the destination directory not existing.
    • Why: This is a core requirement for mv-like semantics and tests will expect this behavior.
    • How to fix: Add an explicit check before computing the final target path:
      • If destination.endsWith('/'):
        • If !fs.existsSync(destination) → throw an error like: "Destination directory does not exist: "
        • Else if !fs.statSync(destination).isDirectory() → throw an error indicating it’s not a directory
        • Else compute path.join(destination, path.basename(source))
  2. Error message specificity when destination ends with slash

    • Location: src/app.js (same area as above)
    • Problem: When destination ends with / but does not exist, the thrown error references the parent directory instead of the destination directory itself.
    • Why: The requirement expects an error about the destination directory not existing, not about its parent.
    • How to fix: After implementing the explicit endsWith('/') check, ensure the thrown message clearly states the destination directory does not exist.

Minor suggestions (non-blocking)

  • Ensure consistency of error messages across cases so users get precise guidance.

You did a solid job on argument validation, rejecting flags, verifying the source is a file, and handling existing directory/file cases. Addressing the trailing slash directory check and refining the error will bring your solution fully in line with the requirements. Keep going—you’re very close!


✨ Please rate this review in the Platform's notification center1. I will be grateful for your feedback! ✨

Important

Fix the issues, commit the changes, and then re-request my review using the Re-request review button2 in the Reviewers tab.

Tip

If you have any comments about this review, please leave a message in the Add a comment section below and mention me with the @mateacademy-ai-mentor tag3.
I will read your message during my next review of your pull request. Please do not reply directly to my comments, as that feature is not supported yet.

Caution

Do not close the pull request until the review is complete. Closing it early can lead to unexpected behavior and disrupt the review process.

Footnotes

  1. Rate AI review example

  2. Re-request AI review example

  3. Add AI review comments example

src/app.js Outdated
let fullPath;

try {
const destStats = fs.statSync(dest, { throwIfNoEntry: false });

Choose a reason for hiding this comment

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

The code does not explicitly handle the case where the destination ends with a slash ('/'). According to the requirements, if the destination ends with '/', it must be treated as a directory and must exist. If it does not exist, an error should be thrown. The current logic only checks if the destination exists and is a directory, but does not treat a non-existent path ending with '/' as an error. You should add a check here to handle this case as required by the task description (see checklist items 1.2, 1.6, 3.1, 3.5).

src/app.js Outdated
const parentDir = path.dirname(fullPath);
const parentStats = fs.statSync(parentDir, { throwIfNoEntry: false });

if (!parentStats || !parentStats.isDirectory()) {

Choose a reason for hiding this comment

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

If the destination ends with a slash ('/') but does not exist, the error thrown here will be about the parent directory not existing, rather than the required error about the destination directory itself not existing. You should add explicit logic to check if the destination ends with '/', and if so, verify that it exists and is a directory, otherwise throw an error specific to the missing directory.

Copy link

@mateacademy-ai-mentor mateacademy-ai-mentor left a comment

Choose a reason for hiding this comment

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

Review Summary

Decision: APPROVE

Reasoning: Your Node.js CLI app correctly implements a mv-like file mover with exactly two positional args, robust path handling, and precise error messages. It validates the source is a file, handles trailing slash semantics, moves into existing directories preserving the basename, supports renaming, and ensures destination directories exist without creating them. Errors are surfaced clearly and execution exits early when preconditions fail. The use of fs.renameSync is appropriate and meets the requirements.

Minor (non-blocking) suggestions:

  • Consider handling cross-device moves (fallback to copy+unlink on EXDEV) for extra robustness.
  • If the project grows, you could refactor repeated error handling into small helpers.

Great work addressing edge cases and keeping the logic clear and dependable!


✨ Please rate this review in the Platform's notification center1. I will be grateful for your feedback! ✨

Footnotes

  1. Rate AI review example

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.

2 participants