feat: adicionando mais de um dono de formulário - #207

Merged
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios
Nov 4, 2025
Merged

feat: adicionando mais de um dono de formulário#207
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios

Conversation

@rbxyz

@rbxyzrbxyz commented Nov 4, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Forms can now have multiple assigned owners/responsible users that can be managed during creation and editing.
  • Chores

    • Version updated to 1.5.4.

@rbxyzrbxyz linked an issue Nov 4, 2025 that may be closed by this pull request
@vercel

vercelBot commented Nov 4, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloReadyReadyPreviewCommentNov 4, 2025 4:47pm

@coderabbitai

coderabbitaiBot commented Nov 4, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR adds multi-owner support to forms by introducing an ownerIds array field to the Prisma Form model. Changes propagate through the API routers and UI components to support multiple form owners, updating authorization checks to treat ownership as either the original userId or inclusion in the ownerIds array across all affected routes.

Changes

Cohort / File(s)Change Summary
Version Update
package.json
Version field bumped from 1.5.3 to 1.5.4
Database Schema
prisma/schema.prisma
Added ownerIds: String[] field with default empty array to Form model
Form Server Routes
src/server/api/routers/forms.ts
Added ownerIds field to create (default []) and update (optional) input schemas; persisted in form create/update payloads
Form Response Routes
src/server/api/routers/form-response.ts
Extended ownership checks across multiple routes to treat user as owner if either form.userId matches or user is in form.ownerIds; updated selects to include ownerIds for authorization validation
Form Builder Component
src/components/forms/form-builder-with-save.tsx
Added initialOwnerIds prop and state initialization; new UI section "Responsáveis do Formulário" with UserSearch control to select owners; passes ownerIds through create/update payloads
Page Components
src/app/(authenticated)/forms/[id]/edit/page.tsx, src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx
Added initialOwnerIds prop passing in edit page; updated ownership authorization logic in response detail page to check against both userId and ownerIds

Sequence Diagram

sequenceDiagram
participant User as Creator/Editor
participant UI as Form Builder
participant API as Form API
participant DB as Database
User->>UI: Select multiple owners
UI->>UI: Update ownerIds state
Note over UI: ownerIds array bound to UserSearch
User->>UI: Save form
UI->>API: Create/Update with ownerIds payload
API->>API: Validate input schema (ownerIds: string[])
API->>DB: Persist form with ownerIds
DB-->>API: Form saved
API->>API: Authorization check:<br/>isOwner = userId === currentUser<br/>OR currentUser ∈ ownerIds
API-->>UI: Success response
Note over DB: Form model now includes<br/>ownerIds: String[] array
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • src/server/api/routers/form-response.ts: Multiple routes modified with authorization logic; verify ownership checks are correctly applied across all routes (sendChatMessage, updateStatus, getById, update, getChat, listUserResponses, listByForm) and that ownerIds includes are consistent
  • src/server/api/routers/forms.ts: Ensure conditional merge logic for ownerIds update (ternary operator) properly handles undefined/empty cases
  • src/components/forms/form-builder-with-save.tsx: Verify UserSearch component integration and state propagation through create/edit flows
  • Authorization logic consistency: Confirm all ownership checks consistently use the pattern: form.userId === currentUserId || currentUserId in ownerIds

Possibly related PRs

Poem

🐰 Multiple hearts now own the form,
No single keeper in the norm,
An array grows, responsible and true,
Shared ownership breaks the two-to-do!

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 206-ajustar-formularios

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ca9d442 and d337110.

📒 Files selected for processing (7)
  • package.json (1 hunks)
  • prisma/schema.prisma (1 hunks)
  • src/app/(authenticated)/forms/[id]/edit/page.tsx (1 hunks)
  • src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx (1 hunks)
  • src/components/forms/form-builder-with-save.tsx (5 hunks)
  • src/server/api/routers/form-response.ts (12 hunks)
  • src/server/api/routers/forms.ts (3 hunks)

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 and usage tips.

@rbxyz
rbxyz merged commit d148a87 into mainNov 4, 2025
7 of 9 checks passed
@rbxyz
rbxyz deleted the 206-ajustar-formularios branch November 6, 2025 17:00
Sign up for freeto 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.

Ajustar formulários

1 participant

@rbxyz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat: adicionando mais de um dono de formulário - #207

Merged
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios
Nov 4, 2025
Merged

feat: adicionando mais de um dono de formulário#207
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios

Conversation

@rbxyz

@rbxyzrbxyz commented Nov 4, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Forms can now have multiple assigned owners/responsible users that can be managed during creation and editing.
  • Chores

    • Version updated to 1.5.4.

@rbxyzrbxyz linked an issue Nov 4, 2025 that may be closed by this pull request
@vercel

vercelBot commented Nov 4, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloReadyReadyPreviewCommentNov 4, 2025 4:47pm

@coderabbitai

coderabbitaiBot commented Nov 4, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR adds multi-owner support to forms by introducing an ownerIds array field to the Prisma Form model. Changes propagate through the API routers and UI components to support multiple form owners, updating authorization checks to treat ownership as either the original userId or inclusion in the ownerIds array across all affected routes.

Changes

Cohort / File(s)Change Summary
Version Update
package.json
Version field bumped from 1.5.3 to 1.5.4
Database Schema
prisma/schema.prisma
Added ownerIds: String[] field with default empty array to Form model
Form Server Routes
src/server/api/routers/forms.ts
Added ownerIds field to create (default []) and update (optional) input schemas; persisted in form create/update payloads
Form Response Routes
src/server/api/routers/form-response.ts
Extended ownership checks across multiple routes to treat user as owner if either form.userId matches or user is in form.ownerIds; updated selects to include ownerIds for authorization validation
Form Builder Component
src/components/forms/form-builder-with-save.tsx
Added initialOwnerIds prop and state initialization; new UI section "Responsáveis do Formulário" with UserSearch control to select owners; passes ownerIds through create/update payloads
Page Components
src/app/(authenticated)/forms/[id]/edit/page.tsx, src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx
Added initialOwnerIds prop passing in edit page; updated ownership authorization logic in response detail page to check against both userId and ownerIds

Sequence Diagram

sequenceDiagram
participant User as Creator/Editor
participant UI as Form Builder
participant API as Form API
participant DB as Database
User->>UI: Select multiple owners
UI->>UI: Update ownerIds state
Note over UI: ownerIds array bound to UserSearch
User->>UI: Save form
UI->>API: Create/Update with ownerIds payload
API->>API: Validate input schema (ownerIds: string[])
API->>DB: Persist form with ownerIds
DB-->>API: Form saved
API->>API: Authorization check:<br/>isOwner = userId === currentUser<br/>OR currentUser ∈ ownerIds
API-->>UI: Success response
Note over DB: Form model now includes<br/>ownerIds: String[] array
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • src/server/api/routers/form-response.ts: Multiple routes modified with authorization logic; verify ownership checks are correctly applied across all routes (sendChatMessage, updateStatus, getById, update, getChat, listUserResponses, listByForm) and that ownerIds includes are consistent
  • src/server/api/routers/forms.ts: Ensure conditional merge logic for ownerIds update (ternary operator) properly handles undefined/empty cases
  • src/components/forms/form-builder-with-save.tsx: Verify UserSearch component integration and state propagation through create/edit flows
  • Authorization logic consistency: Confirm all ownership checks consistently use the pattern: form.userId === currentUserId || currentUserId in ownerIds

Possibly related PRs

Poem

🐰 Multiple hearts now own the form,
No single keeper in the norm,
An array grows, responsible and true,
Shared ownership breaks the two-to-do!

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 206-ajustar-formularios

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ca9d442 and d337110.

📒 Files selected for processing (7)
  • package.json (1 hunks)
  • prisma/schema.prisma (1 hunks)
  • src/app/(authenticated)/forms/[id]/edit/page.tsx (1 hunks)
  • src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx (1 hunks)
  • src/components/forms/form-builder-with-save.tsx (5 hunks)
  • src/server/api/routers/form-response.ts (12 hunks)
  • src/server/api/routers/forms.ts (3 hunks)

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 and usage tips.

@rbxyz
rbxyz merged commit d148a87 into mainNov 4, 2025
7 of 9 checks passed
@rbxyz
rbxyz deleted the 206-ajustar-formularios branch November 6, 2025 17:00
Sign up for freeto 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.

Ajustar formulários

1 participant

@rbxyz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: adicionando mais de um dono de formulário - #207

Merged
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios
Nov 4, 2025
Merged

feat: adicionando mais de um dono de formulário#207
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios

Conversation

@rbxyz

@rbxyzrbxyz commented Nov 4, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Forms can now have multiple assigned owners/responsible users that can be managed during creation and editing.
  • Chores

    • Version updated to 1.5.4.

@rbxyzrbxyz linked an issue Nov 4, 2025 that may be closed by this pull request
@vercel

vercelBot commented Nov 4, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloReadyReadyPreviewCommentNov 4, 2025 4:47pm

@coderabbitai

coderabbitaiBot commented Nov 4, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR adds multi-owner support to forms by introducing an ownerIds array field to the Prisma Form model. Changes propagate through the API routers and UI components to support multiple form owners, updating authorization checks to treat ownership as either the original userId or inclusion in the ownerIds array across all affected routes.

Changes

Cohort / File(s)Change Summary
Version Update
package.json
Version field bumped from 1.5.3 to 1.5.4
Database Schema
prisma/schema.prisma
Added ownerIds: String[] field with default empty array to Form model
Form Server Routes
src/server/api/routers/forms.ts
Added ownerIds field to create (default []) and update (optional) input schemas; persisted in form create/update payloads
Form Response Routes
src/server/api/routers/form-response.ts
Extended ownership checks across multiple routes to treat user as owner if either form.userId matches or user is in form.ownerIds; updated selects to include ownerIds for authorization validation
Form Builder Component
src/components/forms/form-builder-with-save.tsx
Added initialOwnerIds prop and state initialization; new UI section "Responsáveis do Formulário" with UserSearch control to select owners; passes ownerIds through create/update payloads
Page Components
src/app/(authenticated)/forms/[id]/edit/page.tsx, src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx
Added initialOwnerIds prop passing in edit page; updated ownership authorization logic in response detail page to check against both userId and ownerIds

Sequence Diagram

sequenceDiagram
participant User as Creator/Editor
participant UI as Form Builder
participant API as Form API
participant DB as Database
User->>UI: Select multiple owners
UI->>UI: Update ownerIds state
Note over UI: ownerIds array bound to UserSearch
User->>UI: Save form
UI->>API: Create/Update with ownerIds payload
API->>API: Validate input schema (ownerIds: string[])
API->>DB: Persist form with ownerIds
DB-->>API: Form saved
API->>API: Authorization check:<br/>isOwner = userId === currentUser<br/>OR currentUser ∈ ownerIds
API-->>UI: Success response
Note over DB: Form model now includes<br/>ownerIds: String[] array
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • src/server/api/routers/form-response.ts: Multiple routes modified with authorization logic; verify ownership checks are correctly applied across all routes (sendChatMessage, updateStatus, getById, update, getChat, listUserResponses, listByForm) and that ownerIds includes are consistent
  • src/server/api/routers/forms.ts: Ensure conditional merge logic for ownerIds update (ternary operator) properly handles undefined/empty cases
  • src/components/forms/form-builder-with-save.tsx: Verify UserSearch component integration and state propagation through create/edit flows
  • Authorization logic consistency: Confirm all ownership checks consistently use the pattern: form.userId === currentUserId || currentUserId in ownerIds

Possibly related PRs

Poem

🐰 Multiple hearts now own the form,
No single keeper in the norm,
An array grows, responsible and true,
Shared ownership breaks the two-to-do!

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 206-ajustar-formularios

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ca9d442 and d337110.

📒 Files selected for processing (7)
  • package.json (1 hunks)
  • prisma/schema.prisma (1 hunks)
  • src/app/(authenticated)/forms/[id]/edit/page.tsx (1 hunks)
  • src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx (1 hunks)
  • src/components/forms/form-builder-with-save.tsx (5 hunks)
  • src/server/api/routers/form-response.ts (12 hunks)
  • src/server/api/routers/forms.ts (3 hunks)

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 and usage tips.

@rbxyz
rbxyz merged commit d148a87 into mainNov 4, 2025
7 of 9 checks passed
@rbxyz
rbxyz deleted the 206-ajustar-formularios branch November 6, 2025 17:00
Sign up for freeto 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.

Ajustar formulários

1 participant

@rbxyz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: adicionando mais de um dono de formulário - #207

Merged
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios
Nov 4, 2025
Merged

feat: adicionando mais de um dono de formulário#207
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios

Conversation

@rbxyz

@rbxyzrbxyz commented Nov 4, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Forms can now have multiple assigned owners/responsible users that can be managed during creation and editing.
  • Chores

    • Version updated to 1.5.4.

@rbxyzrbxyz linked an issue Nov 4, 2025 that may be closed by this pull request
@vercel

vercelBot commented Nov 4, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloReadyReadyPreviewCommentNov 4, 2025 4:47pm

@coderabbitai

coderabbitaiBot commented Nov 4, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR adds multi-owner support to forms by introducing an ownerIds array field to the Prisma Form model. Changes propagate through the API routers and UI components to support multiple form owners, updating authorization checks to treat ownership as either the original userId or inclusion in the ownerIds array across all affected routes.

Changes

Cohort / File(s)Change Summary
Version Update
package.json
Version field bumped from 1.5.3 to 1.5.4
Database Schema
prisma/schema.prisma
Added ownerIds: String[] field with default empty array to Form model
Form Server Routes
src/server/api/routers/forms.ts
Added ownerIds field to create (default []) and update (optional) input schemas; persisted in form create/update payloads
Form Response Routes
src/server/api/routers/form-response.ts
Extended ownership checks across multiple routes to treat user as owner if either form.userId matches or user is in form.ownerIds; updated selects to include ownerIds for authorization validation
Form Builder Component
src/components/forms/form-builder-with-save.tsx
Added initialOwnerIds prop and state initialization; new UI section "Responsáveis do Formulário" with UserSearch control to select owners; passes ownerIds through create/update payloads
Page Components
src/app/(authenticated)/forms/[id]/edit/page.tsx, src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx
Added initialOwnerIds prop passing in edit page; updated ownership authorization logic in response detail page to check against both userId and ownerIds

Sequence Diagram

sequenceDiagram
participant User as Creator/Editor
participant UI as Form Builder
participant API as Form API
participant DB as Database
User->>UI: Select multiple owners
UI->>UI: Update ownerIds state
Note over UI: ownerIds array bound to UserSearch
User->>UI: Save form
UI->>API: Create/Update with ownerIds payload
API->>API: Validate input schema (ownerIds: string[])
API->>DB: Persist form with ownerIds
DB-->>API: Form saved
API->>API: Authorization check:<br/>isOwner = userId === currentUser<br/>OR currentUser ∈ ownerIds
API-->>UI: Success response
Note over DB: Form model now includes<br/>ownerIds: String[] array
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • src/server/api/routers/form-response.ts: Multiple routes modified with authorization logic; verify ownership checks are correctly applied across all routes (sendChatMessage, updateStatus, getById, update, getChat, listUserResponses, listByForm) and that ownerIds includes are consistent
  • src/server/api/routers/forms.ts: Ensure conditional merge logic for ownerIds update (ternary operator) properly handles undefined/empty cases
  • src/components/forms/form-builder-with-save.tsx: Verify UserSearch component integration and state propagation through create/edit flows
  • Authorization logic consistency: Confirm all ownership checks consistently use the pattern: form.userId === currentUserId || currentUserId in ownerIds

Possibly related PRs

Poem

🐰 Multiple hearts now own the form,
No single keeper in the norm,
An array grows, responsible and true,
Shared ownership breaks the two-to-do!

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 206-ajustar-formularios

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ca9d442 and d337110.

📒 Files selected for processing (7)
  • package.json (1 hunks)
  • prisma/schema.prisma (1 hunks)
  • src/app/(authenticated)/forms/[id]/edit/page.tsx (1 hunks)
  • src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx (1 hunks)
  • src/components/forms/form-builder-with-save.tsx (5 hunks)
  • src/server/api/routers/form-response.ts (12 hunks)
  • src/server/api/routers/forms.ts (3 hunks)

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 and usage tips.

@rbxyz
rbxyz merged commit d148a87 into mainNov 4, 2025
7 of 9 checks passed
@rbxyz
rbxyz deleted the 206-ajustar-formularios branch November 6, 2025 17:00
Sign up for freeto 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.

Ajustar formulários

1 participant

@rbxyz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat: adicionando mais de um dono de formulário - #207

Merged
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios
Nov 4, 2025
Merged

feat: adicionando mais de um dono de formulário#207
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios

Conversation

@rbxyz

@rbxyzrbxyz commented Nov 4, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Forms can now have multiple assigned owners/responsible users that can be managed during creation and editing.
  • Chores

    • Version updated to 1.5.4.

@rbxyzrbxyz linked an issue Nov 4, 2025 that may be closed by this pull request
@vercel

vercelBot commented Nov 4, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloReadyReadyPreviewCommentNov 4, 2025 4:47pm

@coderabbitai

coderabbitaiBot commented Nov 4, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR adds multi-owner support to forms by introducing an ownerIds array field to the Prisma Form model. Changes propagate through the API routers and UI components to support multiple form owners, updating authorization checks to treat ownership as either the original userId or inclusion in the ownerIds array across all affected routes.

Changes

Cohort / File(s)Change Summary
Version Update
package.json
Version field bumped from 1.5.3 to 1.5.4
Database Schema
prisma/schema.prisma
Added ownerIds: String[] field with default empty array to Form model
Form Server Routes
src/server/api/routers/forms.ts
Added ownerIds field to create (default []) and update (optional) input schemas; persisted in form create/update payloads
Form Response Routes
src/server/api/routers/form-response.ts
Extended ownership checks across multiple routes to treat user as owner if either form.userId matches or user is in form.ownerIds; updated selects to include ownerIds for authorization validation
Form Builder Component
src/components/forms/form-builder-with-save.tsx
Added initialOwnerIds prop and state initialization; new UI section "Responsáveis do Formulário" with UserSearch control to select owners; passes ownerIds through create/update payloads
Page Components
src/app/(authenticated)/forms/[id]/edit/page.tsx, src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx
Added initialOwnerIds prop passing in edit page; updated ownership authorization logic in response detail page to check against both userId and ownerIds

Sequence Diagram

sequenceDiagram
participant User as Creator/Editor
participant UI as Form Builder
participant API as Form API
participant DB as Database
User->>UI: Select multiple owners
UI->>UI: Update ownerIds state
Note over UI: ownerIds array bound to UserSearch
User->>UI: Save form
UI->>API: Create/Update with ownerIds payload
API->>API: Validate input schema (ownerIds: string[])
API->>DB: Persist form with ownerIds
DB-->>API: Form saved
API->>API: Authorization check:<br/>isOwner = userId === currentUser<br/>OR currentUser ∈ ownerIds
API-->>UI: Success response
Note over DB: Form model now includes<br/>ownerIds: String[] array
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • src/server/api/routers/form-response.ts: Multiple routes modified with authorization logic; verify ownership checks are correctly applied across all routes (sendChatMessage, updateStatus, getById, update, getChat, listUserResponses, listByForm) and that ownerIds includes are consistent
  • src/server/api/routers/forms.ts: Ensure conditional merge logic for ownerIds update (ternary operator) properly handles undefined/empty cases
  • src/components/forms/form-builder-with-save.tsx: Verify UserSearch component integration and state propagation through create/edit flows
  • Authorization logic consistency: Confirm all ownership checks consistently use the pattern: form.userId === currentUserId || currentUserId in ownerIds

Possibly related PRs

Poem

🐰 Multiple hearts now own the form,
No single keeper in the norm,
An array grows, responsible and true,
Shared ownership breaks the two-to-do!

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 206-ajustar-formularios

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ca9d442 and d337110.

📒 Files selected for processing (7)
  • package.json (1 hunks)
  • prisma/schema.prisma (1 hunks)
  • src/app/(authenticated)/forms/[id]/edit/page.tsx (1 hunks)
  • src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx (1 hunks)
  • src/components/forms/form-builder-with-save.tsx (5 hunks)
  • src/server/api/routers/form-response.ts (12 hunks)
  • src/server/api/routers/forms.ts (3 hunks)

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 and usage tips.

@rbxyz
rbxyz merged commit d148a87 into mainNov 4, 2025
7 of 9 checks passed
@rbxyz
rbxyz deleted the 206-ajustar-formularios branch November 6, 2025 17:00
Sign up for freeto 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.

Ajustar formulários

1 participant

@rbxyz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: adicionando mais de um dono de formulário - #207

Merged
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios
Nov 4, 2025
Merged

feat: adicionando mais de um dono de formulário#207
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios

Conversation

@rbxyz

@rbxyzrbxyz commented Nov 4, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Forms can now have multiple assigned owners/responsible users that can be managed during creation and editing.
  • Chores

    • Version updated to 1.5.4.

@rbxyzrbxyz linked an issue Nov 4, 2025 that may be closed by this pull request
@vercel

vercelBot commented Nov 4, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloReadyReadyPreviewCommentNov 4, 2025 4:47pm

@coderabbitai

coderabbitaiBot commented Nov 4, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR adds multi-owner support to forms by introducing an ownerIds array field to the Prisma Form model. Changes propagate through the API routers and UI components to support multiple form owners, updating authorization checks to treat ownership as either the original userId or inclusion in the ownerIds array across all affected routes.

Changes

Cohort / File(s)Change Summary
Version Update
package.json
Version field bumped from 1.5.3 to 1.5.4
Database Schema
prisma/schema.prisma
Added ownerIds: String[] field with default empty array to Form model
Form Server Routes
src/server/api/routers/forms.ts
Added ownerIds field to create (default []) and update (optional) input schemas; persisted in form create/update payloads
Form Response Routes
src/server/api/routers/form-response.ts
Extended ownership checks across multiple routes to treat user as owner if either form.userId matches or user is in form.ownerIds; updated selects to include ownerIds for authorization validation
Form Builder Component
src/components/forms/form-builder-with-save.tsx
Added initialOwnerIds prop and state initialization; new UI section "Responsáveis do Formulário" with UserSearch control to select owners; passes ownerIds through create/update payloads
Page Components
src/app/(authenticated)/forms/[id]/edit/page.tsx, src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx
Added initialOwnerIds prop passing in edit page; updated ownership authorization logic in response detail page to check against both userId and ownerIds

Sequence Diagram

sequenceDiagram
participant User as Creator/Editor
participant UI as Form Builder
participant API as Form API
participant DB as Database
User->>UI: Select multiple owners
UI->>UI: Update ownerIds state
Note over UI: ownerIds array bound to UserSearch
User->>UI: Save form
UI->>API: Create/Update with ownerIds payload
API->>API: Validate input schema (ownerIds: string[])
API->>DB: Persist form with ownerIds
DB-->>API: Form saved
API->>API: Authorization check:<br/>isOwner = userId === currentUser<br/>OR currentUser ∈ ownerIds
API-->>UI: Success response
Note over DB: Form model now includes<br/>ownerIds: String[] array
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • src/server/api/routers/form-response.ts: Multiple routes modified with authorization logic; verify ownership checks are correctly applied across all routes (sendChatMessage, updateStatus, getById, update, getChat, listUserResponses, listByForm) and that ownerIds includes are consistent
  • src/server/api/routers/forms.ts: Ensure conditional merge logic for ownerIds update (ternary operator) properly handles undefined/empty cases
  • src/components/forms/form-builder-with-save.tsx: Verify UserSearch component integration and state propagation through create/edit flows
  • Authorization logic consistency: Confirm all ownership checks consistently use the pattern: form.userId === currentUserId || currentUserId in ownerIds

Possibly related PRs

Poem

🐰 Multiple hearts now own the form,
No single keeper in the norm,
An array grows, responsible and true,
Shared ownership breaks the two-to-do!

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 206-ajustar-formularios

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ca9d442 and d337110.

📒 Files selected for processing (7)
  • package.json (1 hunks)
  • prisma/schema.prisma (1 hunks)
  • src/app/(authenticated)/forms/[id]/edit/page.tsx (1 hunks)
  • src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx (1 hunks)
  • src/components/forms/form-builder-with-save.tsx (5 hunks)
  • src/server/api/routers/form-response.ts (12 hunks)
  • src/server/api/routers/forms.ts (3 hunks)

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 and usage tips.

@rbxyz
rbxyz merged commit d148a87 into mainNov 4, 2025
7 of 9 checks passed
@rbxyz
rbxyz deleted the 206-ajustar-formularios branch November 6, 2025 17:00
Sign up for freeto 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.

Ajustar formulários

1 participant

@rbxyz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: adicionando mais de um dono de formulário - #207

Merged
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios
Nov 4, 2025
Merged

feat: adicionando mais de um dono de formulário#207
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios

Conversation

@rbxyz

@rbxyzrbxyz commented Nov 4, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Forms can now have multiple assigned owners/responsible users that can be managed during creation and editing.
  • Chores

    • Version updated to 1.5.4.

@rbxyzrbxyz linked an issue Nov 4, 2025 that may be closed by this pull request
@vercel

vercelBot commented Nov 4, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloReadyReadyPreviewCommentNov 4, 2025 4:47pm

@coderabbitai

coderabbitaiBot commented Nov 4, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR adds multi-owner support to forms by introducing an ownerIds array field to the Prisma Form model. Changes propagate through the API routers and UI components to support multiple form owners, updating authorization checks to treat ownership as either the original userId or inclusion in the ownerIds array across all affected routes.

Changes

Cohort / File(s)Change Summary
Version Update
package.json
Version field bumped from 1.5.3 to 1.5.4
Database Schema
prisma/schema.prisma
Added ownerIds: String[] field with default empty array to Form model
Form Server Routes
src/server/api/routers/forms.ts
Added ownerIds field to create (default []) and update (optional) input schemas; persisted in form create/update payloads
Form Response Routes
src/server/api/routers/form-response.ts
Extended ownership checks across multiple routes to treat user as owner if either form.userId matches or user is in form.ownerIds; updated selects to include ownerIds for authorization validation
Form Builder Component
src/components/forms/form-builder-with-save.tsx
Added initialOwnerIds prop and state initialization; new UI section "Responsáveis do Formulário" with UserSearch control to select owners; passes ownerIds through create/update payloads
Page Components
src/app/(authenticated)/forms/[id]/edit/page.tsx, src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx
Added initialOwnerIds prop passing in edit page; updated ownership authorization logic in response detail page to check against both userId and ownerIds

Sequence Diagram

sequenceDiagram
participant User as Creator/Editor
participant UI as Form Builder
participant API as Form API
participant DB as Database
User->>UI: Select multiple owners
UI->>UI: Update ownerIds state
Note over UI: ownerIds array bound to UserSearch
User->>UI: Save form
UI->>API: Create/Update with ownerIds payload
API->>API: Validate input schema (ownerIds: string[])
API->>DB: Persist form with ownerIds
DB-->>API: Form saved
API->>API: Authorization check:<br/>isOwner = userId === currentUser<br/>OR currentUser ∈ ownerIds
API-->>UI: Success response
Note over DB: Form model now includes<br/>ownerIds: String[] array
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • src/server/api/routers/form-response.ts: Multiple routes modified with authorization logic; verify ownership checks are correctly applied across all routes (sendChatMessage, updateStatus, getById, update, getChat, listUserResponses, listByForm) and that ownerIds includes are consistent
  • src/server/api/routers/forms.ts: Ensure conditional merge logic for ownerIds update (ternary operator) properly handles undefined/empty cases
  • src/components/forms/form-builder-with-save.tsx: Verify UserSearch component integration and state propagation through create/edit flows
  • Authorization logic consistency: Confirm all ownership checks consistently use the pattern: form.userId === currentUserId || currentUserId in ownerIds

Possibly related PRs

Poem

🐰 Multiple hearts now own the form,
No single keeper in the norm,
An array grows, responsible and true,
Shared ownership breaks the two-to-do!

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 206-ajustar-formularios

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ca9d442 and d337110.

📒 Files selected for processing (7)
  • package.json (1 hunks)
  • prisma/schema.prisma (1 hunks)
  • src/app/(authenticated)/forms/[id]/edit/page.tsx (1 hunks)
  • src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx (1 hunks)
  • src/components/forms/form-builder-with-save.tsx (5 hunks)
  • src/server/api/routers/form-response.ts (12 hunks)
  • src/server/api/routers/forms.ts (3 hunks)

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 and usage tips.

@rbxyz
rbxyz merged commit d148a87 into mainNov 4, 2025
7 of 9 checks passed
@rbxyz
rbxyz deleted the 206-ajustar-formularios branch November 6, 2025 17:00
Sign up for freeto 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.

Ajustar formulários

1 participant

@rbxyz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat: adicionando mais de um dono de formulário - #207

Merged
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios
Nov 4, 2025
Merged

feat: adicionando mais de um dono de formulário#207
rbxyz merged 1 commit into
mainfrom
206-ajustar-formularios

Conversation

@rbxyz

@rbxyzrbxyz commented Nov 4, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Forms can now have multiple assigned owners/responsible users that can be managed during creation and editing.
  • Chores

    • Version updated to 1.5.4.

@rbxyzrbxyz linked an issue Nov 4, 2025 that may be closed by this pull request
@vercel

vercelBot commented Nov 4, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloReadyReadyPreviewCommentNov 4, 2025 4:47pm

@coderabbitai

coderabbitaiBot commented Nov 4, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR adds multi-owner support to forms by introducing an ownerIds array field to the Prisma Form model. Changes propagate through the API routers and UI components to support multiple form owners, updating authorization checks to treat ownership as either the original userId or inclusion in the ownerIds array across all affected routes.

Changes

Cohort / File(s)Change Summary
Version Update
package.json
Version field bumped from 1.5.3 to 1.5.4
Database Schema
prisma/schema.prisma
Added ownerIds: String[] field with default empty array to Form model
Form Server Routes
src/server/api/routers/forms.ts
Added ownerIds field to create (default []) and update (optional) input schemas; persisted in form create/update payloads
Form Response Routes
src/server/api/routers/form-response.ts
Extended ownership checks across multiple routes to treat user as owner if either form.userId matches or user is in form.ownerIds; updated selects to include ownerIds for authorization validation
Form Builder Component
src/components/forms/form-builder-with-save.tsx
Added initialOwnerIds prop and state initialization; new UI section "Responsáveis do Formulário" with UserSearch control to select owners; passes ownerIds through create/update payloads
Page Components
src/app/(authenticated)/forms/[id]/edit/page.tsx, src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx
Added initialOwnerIds prop passing in edit page; updated ownership authorization logic in response detail page to check against both userId and ownerIds

Sequence Diagram

sequenceDiagram
participant User as Creator/Editor
participant UI as Form Builder
participant API as Form API
participant DB as Database
User->>UI: Select multiple owners
UI->>UI: Update ownerIds state
Note over UI: ownerIds array bound to UserSearch
User->>UI: Save form
UI->>API: Create/Update with ownerIds payload
API->>API: Validate input schema (ownerIds: string[])
API->>DB: Persist form with ownerIds
DB-->>API: Form saved
API->>API: Authorization check:<br/>isOwner = userId === currentUser<br/>OR currentUser ∈ ownerIds
API-->>UI: Success response
Note over DB: Form model now includes<br/>ownerIds: String[] array
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • src/server/api/routers/form-response.ts: Multiple routes modified with authorization logic; verify ownership checks are correctly applied across all routes (sendChatMessage, updateStatus, getById, update, getChat, listUserResponses, listByForm) and that ownerIds includes are consistent
  • src/server/api/routers/forms.ts: Ensure conditional merge logic for ownerIds update (ternary operator) properly handles undefined/empty cases
  • src/components/forms/form-builder-with-save.tsx: Verify UserSearch component integration and state propagation through create/edit flows
  • Authorization logic consistency: Confirm all ownership checks consistently use the pattern: form.userId === currentUserId || currentUserId in ownerIds

Possibly related PRs

Poem

🐰 Multiple hearts now own the form,
No single keeper in the norm,
An array grows, responsible and true,
Shared ownership breaks the two-to-do!

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 206-ajustar-formularios

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ca9d442 and d337110.

📒 Files selected for processing (7)
  • package.json (1 hunks)
  • prisma/schema.prisma (1 hunks)
  • src/app/(authenticated)/forms/[id]/edit/page.tsx (1 hunks)
  • src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx (1 hunks)
  • src/components/forms/form-builder-with-save.tsx (5 hunks)
  • src/server/api/routers/form-response.ts (12 hunks)
  • src/server/api/routers/forms.ts (3 hunks)

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 and usage tips.

@rbxyz
rbxyz merged commit d148a87 into mainNov 4, 2025
7 of 9 checks passed
@rbxyz
rbxyz deleted the 206-ajustar-formularios branch November 6, 2025 17:00
Sign up for freeto 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.

Ajustar formulários

1 participant

@rbxyz