Skip to content

[frontend] change task URLs from /tasks/:id to /task/:slug/:number#38

Open
capcom6 wants to merge 2 commits into
masterfrom
frontend/task-slug-url
Open

[frontend] change task URLs from /tasks/:id to /task/:slug/:number#38
capcom6 wants to merge 2 commits into
masterfrom
frontend/task-slug-url

Conversation

@capcom6

@capcom6 capcom6 commented Jul 6, 2026

Copy link
Copy Markdown
Contributor
  • Add backend endpoint GET /api/v1/tasks/by-project/:slug/:number
  • Update frontend routes: /task/:slug/:number and /task/:slug/:number/edit
  • Update all navigation calls to use project_slug + number
  • Replace onMount with for reactive data fetching on param change
  • Fix infinite loop in App.svelte by removing sync call from effect body
  • Use plain variable instead of for assigning mutex
  • Update parseProjectSlugFromPath to recognize new URL pattern
  • Add example request to requests.http

Summary by CodeRabbit

  • New Features
    • Added authenticated task lookup by project slug and sequential task number.
    • Implemented user-friendly task URLs using /task/{slug}/{number} (including edit).
  • Bug Fixes
    • Updated dashboards, project tasks, and navigation to open the correct task route.
    • Improved task detail and edit pages to load consistently from URL-derived parameters.
    • Enhanced recent-project tracking to recognize additional task-related URL/hash patterns.
  • Documentation
    • Added Swagger/OpenAPI and request examples for the new “slug + number” task endpoint.

@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@capcom6, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 59 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ec4421df-45f0-4548-96d4-542dd212fb95

📥 Commits

Reviewing files that changed from the base of the PR and between 3bfe17d and 2bbd06e.

📒 Files selected for processing (12)
  • frontend/src/App.svelte
  • frontend/src/lib/api/tasks.ts
  • frontend/src/lib/pages/dashboard-personal.svelte
  • frontend/src/lib/pages/dashboard-tasks.svelte
  • frontend/src/lib/pages/project-tasks.svelte
  • frontend/src/lib/pages/task-detail.svelte
  • frontend/src/lib/pages/task-edit.svelte
  • frontend/src/lib/pages/task-new.svelte
  • frontend/src/lib/stores/recent-projects.svelte.ts
  • internal/server/docs/docs.go
  • internal/server/tasks/handler.go
  • requests.http
📝 Walkthrough

Walkthrough

Task retrieval now supports project slug and sequential number identifiers. Frontend routes, navigation, task detail loading, editing, mutations, attachment handling, and recent-project parsing were updated to use the canonical task URL.

Changes

Canonical task route migration

Layer / File(s) Summary
Backend task lookup endpoint
internal/server/tasks/handler.go, internal/server/docs/docs.go, requests.http
Adds an authenticated /tasks/:slug/:number handler, validates inputs, retrieves task details, documents the endpoint, and adds an HTTP request example.
Frontend canonical routes and navigation
frontend/src/App.svelte, frontend/src/lib/api/tasks.ts, frontend/src/lib/pages/dashboard-*.svelte, frontend/src/lib/pages/project-tasks.svelte, frontend/src/lib/pages/task-new.svelte, frontend/src/lib/stores/recent-projects.svelte.ts
Defines slug-and-number task routes, adds the matching API helper, updates task links and creation redirects, parses new paths for recent-project tracking, and uses prop shorthand for the task form.
Task detail loading and mutations
frontend/src/lib/pages/task-detail.svelte
Loads tasks by slug and number, retains the internal task ID for mutations, updates attachment handling, and routes editing through the canonical URL.
Task edit loading and redirect
frontend/src/lib/pages/task-edit.svelte
Loads task and project data reactively from route parameters, guards against stale results, updates by internal task ID, and redirects using the updated task’s slug and number.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant Frontend
  participant TaskAPI
  participant TaskService
  User->>Frontend: Open /task/{slug}/{number}
  Frontend->>TaskAPI: GET /tasks/{slug}/{number}
  TaskAPI->>TaskService: GetByProjectAndNumber(slug, number)
  TaskService-->>TaskAPI: Task details
  TaskAPI-->>Frontend: TaskDetailsResponse
  Frontend-->>User: Render task detail
Loading

Possibly related PRs

  • bit-issues/backend#6: Introduces the backend tasks handler structure used by this task retrieval endpoint.
  • bit-issues/backend#26: Modifies task detail responses and handler enrichment in overlapping backend task code.

Suggested labels: ready

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the main URL migration from task IDs to slug-and-number routes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown

🤖 Pull request artifacts

Platform File
🐳 Docker GitHub Container Registry
🍎 Darwin arm64 backend_Darwin_arm64.tar.gz
🍎 Darwin x86_64 backend_Darwin_x86_64.tar.gz
🐧 Linux arm64 backend_Linux_arm64.tar.gz
🐧 Linux i386 backend_Linux_i386.tar.gz
🐧 Linux x86_64 backend_Linux_x86_64.tar.gz
🪟 Windows arm64 backend_Windows_arm64.zip
🪟 Windows i386 backend_Windows_i386.zip
🪟 Windows x86_64 backend_Windows_x86_64.zip

@capcom6

capcom6 commented Jul 6, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.

@capcom6

capcom6 commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.


Your plan includes PR reviews subject to rate limits. More reviews will be available in 35 minutes.

@capcom6

capcom6 commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.


Your plan includes PR reviews subject to rate limits. More reviews will be available in 58 minutes.

@capcom6 capcom6 force-pushed the frontend/task-slug-url branch from 38ca146 to 2ce88f3 Compare July 8, 2026 01:36
@capcom6 capcom6 requested a review from dudina-ma July 8, 2026 07:56
@capcom6 capcom6 added the ready PR is ready to merge label Jul 8, 2026
@capcom6 capcom6 force-pushed the frontend/task-slug-url branch from 2ce88f3 to 63d96f4 Compare July 9, 2026 00:59
@github-actions github-actions Bot removed the ready PR is ready to merge label Jul 9, 2026
@capcom6

capcom6 commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.


Your plan includes PR reviews subject to rate limits. More reviews will be available in 57 minutes.

@capcom6

capcom6 commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
frontend/src/lib/pages/task-new.svelte (1)

61-61: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value

Consider URL-encoding the project slug in the navigate call.

parseProjectSlugFromPath in recent-projects.svelte.ts uses decodeURIComponent on the slug, implying slugs may contain encoded characters. Using encodeURIComponent here ensures round-trip consistency.

♻️ Proposed refactor
-    navigate(`/task/${task.project_slug}/${task.number}`);
+    navigate(`/task/${encodeURIComponent(task.project_slug)}/${task.number}`);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@frontend/src/lib/pages/task-new.svelte` at line 61, URL-encode the project
slug before constructing the task route in the navigation call. Update the
navigate call in the task creation flow to wrap task.project_slug with
encodeURIComponent, preserving compatibility with parseProjectSlugFromPath’s
decodeURIComponent handling.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/server/tasks/handler.go`:
- Around line 189-198: Remove the unreachable empty-slug validation from
getByProjectAndNumber, and after parsing the task number, reject values less
than 1 with a fiber.StatusBadRequest error matching the existing invalid-number
handling.

In `@requests.http`:
- Around line 251-255: Update the “Get task by project slug and number” example
request to use the registered two-segment route `/tasks/{slug}/{number}`; remove
the extra `by-project` segment so it targets `/tasks/my-new-project/1`,
consistent with the handler route and Swagger documentation.

---

Nitpick comments:
In `@frontend/src/lib/pages/task-new.svelte`:
- Line 61: URL-encode the project slug before constructing the task route in the
navigation call. Update the navigate call in the task creation flow to wrap
task.project_slug with encodeURIComponent, preserving compatibility with
parseProjectSlugFromPath’s decodeURIComponent handling.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 945a3c63-575b-49b1-9518-0a093d605d2f

📥 Commits

Reviewing files that changed from the base of the PR and between 8d80806 and 63d96f4.

📒 Files selected for processing (12)
  • frontend/src/App.svelte
  • frontend/src/lib/api/tasks.ts
  • frontend/src/lib/pages/dashboard-personal.svelte
  • frontend/src/lib/pages/dashboard-tasks.svelte
  • frontend/src/lib/pages/project-tasks.svelte
  • frontend/src/lib/pages/task-detail.svelte
  • frontend/src/lib/pages/task-edit.svelte
  • frontend/src/lib/pages/task-new.svelte
  • frontend/src/lib/stores/recent-projects.svelte.ts
  • internal/server/docs/docs.go
  • internal/server/tasks/handler.go
  • requests.http

Comment thread internal/server/tasks/handler.go
Comment thread requests.http
@coderabbitai coderabbitai Bot added the ready PR is ready to merge label Jul 10, 2026
capcom6 added 2 commits July 14, 2026 08:21
- Add backend endpoint GET /api/v1/tasks/by-project/:slug/:number
- Update frontend routes: /task/:slug/:number and /task/:slug/:number/edit
- Update all navigation calls to use project_slug + number
- Replace onMount with  for reactive data fetching on param change
- Fix infinite  loop in App.svelte by removing sync call from effect body
- Use plain variable instead of  for assigning mutex
- Update parseProjectSlugFromPath to recognize new URL pattern
- Add example request to requests.http
@capcom6 capcom6 force-pushed the frontend/task-slug-url branch from 3bfe17d to 2bbd06e Compare July 14, 2026 01:21
@github-actions github-actions Bot removed the ready PR is ready to merge label Jul 14, 2026
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