342 lojinha pré cadastro - #344

Merged
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro
Feb 26, 2026

Hidden character warning

The head ref may contain hidden characters: "342-lojinha---pr\u00e9-cadastro"
Merged

342 lojinha pré cadastro#344
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 26, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Order details now display pre-registration customer information (full name, CPF, RG, email, phone, address) when available.
    • Pre-registration customer data is included in order notification emails.
  • Documentation

    • Updated LGPD compliance documentation with clarified data processing details and responsibilities.
    • Refined terminology for UI elements in system documentation.

@rbxyzrbxyz self-assigned this Feb 26, 2026
@vercel

vercelBot commented Feb 26, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 26, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds support for displaying and propagating Lojinha pre-registration customer data (name, CPF, address, phone, etc.) throughout the order management system. Changes include documentation updates clarifying LGPD data handling, UI enhancements to display pre-registration details in the order modal, email notification template expansions, and backend router modifications to expose and pass lojinha fields to notification flows.

Changes

Cohort / File(s)Summary
Documentation
docs/05-Modulos/lgpd.md, docs/05-Modulos/shop.md
Added explanatory content aligning LGPD with employment contract clauses and clarified that pre-registration (pré-cadastro) data is visible to order requesters and in notification emails. Standardized UI terminology ("Dialog" → "janela", "toast" → "notificação").
Order Details UI
src/components/admin/products/order-details-modal.tsx
Added new collapsible section "Dados do pré-cadastro (Lojinha)" rendering customer pre-registration fields (name, CPF masked, RG, email, phone, address). Improved name display logic to prefer lojinha_full_name over email fallback and adjusted layout spacing with flex wrapper.
Profile Modal
src/components/ui/complete-profile-modal.tsx
Updated matrícula input label text to clarify its use in time-tracking systems ("utilizada no seu ponto").
Email Templates
src/lib/mail/html-mock.ts
Introduced LojinhaClientData type and extended email mock functions (mockEmailNotificacaoPedidoProduto, mockEmailPedidoProduto) to conditionally render a new "Dados do Cliente (pré-cadastro Lojinha)" section with formatted address and contact information.
Order Router & Notifications
src/server/api/routers/product-order.ts
Expanded user projection across create, createMultiple, and listKanban operations to include lojinha_\* fields (name, CPF, address, neighborhood, CEP, RG, email, phone). Constructed dadosClienteLojinha and dadosClienteLojinhaMultiple objects from these fields and passed them to email notification templates for enriched customer data rendering.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Poem

🐰 A lojinha's secrets, now on display,
Pre-registration whispers in emails each day,
CPF masked, addresses neat,
Customer data, complete and sweet,
From modal to message, the rabbit's ballet! 📧✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title '342 lojinha pré cadastro' clearly identifies the main change: adding lojinha pre-registration functionality throughout the codebase, including documentation updates, UI components, email templates, and API router expansions.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 342-lojinha---pré-cadastro

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (3)
src/components/ui/complete-profile-modal.tsx (1)

33-35: Pre-existing issue: Duplicate entry in setores array.

Lines 33-34 contain a duplicate entry for "COMERCIAL" with the same value and label. This appears to be a pre-existing issue not introduced by this PR, but worth noting for future cleanup.

♻️ Proposed fix to remove duplicate
 const setores = [
{ value: "ADMINISTRATIVO", label: "Administrativo" },
{ value: "COMERCIAL", label: "Comercial" },
- { value: "COMERCIAL", label: "Comercial" },
{ value: "FINANCEIRO", label: "Financeiro" },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/ui/complete-profile-modal.tsx` around lines 33 - 35, The
setores array in src/components/ui/complete-profile-modal.tsx contains a
duplicated entry ({ value: "COMERCIAL", label: "Comercial" }) — remove the
redundant object so each sector appears only once; locate the setores array
definition in complete-profile-modal.tsx and delete the duplicate element (keep
a single "COMERCIAL" entry) ensuring array order and any downstream references
to setores remain unchanged.
src/server/api/routers/product-order.ts (1)

270-286: Consider extracting the dadosClienteLojinha construction to a helper function.

The same pattern for building dadosClienteLojinha is repeated for single orders (lines 270-273) and multiple orders (lines 546-549). Extracting this to a helper function would reduce duplication and improve maintainability.

♻️ Proposed helper function
// At the top of the file or in a shared utilityfunctionbuildLojinhaClientData(user: {lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}|undefined|null): LojinhaClientData|null{if(!user)returnnullconstfields=[user.lojinha_full_name,user.lojinha_cpf,user.lojinha_address,user.lojinha_neighborhood,user.lojinha_cep,user.lojinha_rg,user.lojinha_email,user.lojinha_phone,]if(!fields.some(Boolean))returnnullreturn{lojinha_full_name: user.lojinha_full_name,lojinha_cpf: user.lojinha_cpf,lojinha_address: user.lojinha_address,lojinha_neighborhood: user.lojinha_neighborhood,lojinha_cep: user.lojinha_cep,lojinha_rg: user.lojinha_rg,lojinha_email: user.lojinha_email,lojinha_phone: user.lojinha_phone,}}// Usage:constdadosClienteLojinha=buildLojinhaClientData(order.user)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/server/api/routers/product-order.ts` around lines 270 - 286, Extract the
repeated construction of dadosClienteLojinha into a helper function (e.g.
buildLojinhaClientData) that accepts order.user (or a nullable user object) and
returns the LojinhaClientData object or null; replace the inline
array+some(Boolean) check and object literal in both single-order and
multi-order branches with a call to buildLojinhaClientData(order.user), and
update usages passed to mockEmailNotificacaoPedidoProduto (and any other
callers) to use the helper to remove duplication and centralize the
null/field-check logic.
src/components/admin/products/order-details-modal.tsx (1)

301-310: Consider extracting the lojinha user type to avoid inline type assertions.

The inline type assertion is repeated here and at line 277. Once Prisma types are regenerated to include the new lojinha_* fields in the user select, consider removing these assertions. Alternatively, define a local type or extend the ProductOrderWithRelations type to include these fields explicitly.

♻️ Example type extraction
// At the top of the file, after the existing type definitionstypeLojinhaUserFields={lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}// Then use it in the componentconstu=order.userastypeoforder.user&LojinhaUserFields
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/admin/products/order-details-modal.tsx` around lines 301 -
310, The inline type assertion for order.user is duplicated and should be
extracted into a reusable type to avoid repetition and prepare for Prisma type
regeneration: create a local type alias (e.g., LojinhaUserFields) that declares
lojinha_full_name, lojinha_cpf, lojinha_address, lojinha_neighborhood,
lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as optional string|null
and then replace the inline assertion in the component by combining the existing
user type with that alias (for example using an intersection with typeof
order.user or by extending ProductOrderWithRelations' user type) so both
occurrences (the one at order.user and the earlier one around line 277)
reference the single LojinhaUserFields type.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/components/admin/products/order-details-modal.tsx`:
- Around line 301-310: The inline type assertion for order.user is duplicated
and should be extracted into a reusable type to avoid repetition and prepare for
Prisma type regeneration: create a local type alias (e.g., LojinhaUserFields)
that declares lojinha_full_name, lojinha_cpf, lojinha_address,
lojinha_neighborhood, lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as
optional string|null and then replace the inline assertion in the component by
combining the existing user type with that alias (for example using an
intersection with typeof order.user or by extending ProductOrderWithRelations'
user type) so both occurrences (the one at order.user and the earlier one around
line 277) reference the single LojinhaUserFields type.
In `@src/components/ui/complete-profile-modal.tsx`:
- Around line 33-35: The setores array in
src/components/ui/complete-profile-modal.tsx contains a duplicated entry ({
value: "COMERCIAL", label: "Comercial" }) — remove the redundant object so each
sector appears only once; locate the setores array definition in
complete-profile-modal.tsx and delete the duplicate element (keep a single
"COMERCIAL" entry) ensuring array order and any downstream references to setores
remain unchanged.
In `@src/server/api/routers/product-order.ts`:
- Around line 270-286: Extract the repeated construction of dadosClienteLojinha
into a helper function (e.g. buildLojinhaClientData) that accepts order.user (or
a nullable user object) and returns the LojinhaClientData object or null;
replace the inline array+some(Boolean) check and object literal in both
single-order and multi-order branches with a call to
buildLojinhaClientData(order.user), and update usages passed to
mockEmailNotificacaoPedidoProduto (and any other callers) to use the helper to
remove duplication and centralize the null/field-check logic.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36c73c8 and 39f3cd0.

📒 Files selected for processing (6)
  • docs/05-Modulos/lgpd.md
  • docs/05-Modulos/shop.md
  • src/components/admin/products/order-details-modal.tsx
  • src/components/ui/complete-profile-modal.tsx
  • src/lib/mail/html-mock.ts
  • src/server/api/routers/product-order.ts

@GRHInvDev
GRHInvDev merged commit 2670a7e into mainFeb 26, 2026
7 of 9 checks passed
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.

2 participants

@rbxyz@GRHInvDev
, '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

342 lojinha pré cadastro - #344

Merged
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro
Feb 26, 2026

Hidden character warning

The head ref may contain hidden characters: "342-lojinha---pr\u00e9-cadastro"
Merged

342 lojinha pré cadastro#344
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 26, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Order details now display pre-registration customer information (full name, CPF, RG, email, phone, address) when available.
    • Pre-registration customer data is included in order notification emails.
  • Documentation

    • Updated LGPD compliance documentation with clarified data processing details and responsibilities.
    • Refined terminology for UI elements in system documentation.

@rbxyzrbxyz self-assigned this Feb 26, 2026
@vercel

vercelBot commented Feb 26, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 26, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds support for displaying and propagating Lojinha pre-registration customer data (name, CPF, address, phone, etc.) throughout the order management system. Changes include documentation updates clarifying LGPD data handling, UI enhancements to display pre-registration details in the order modal, email notification template expansions, and backend router modifications to expose and pass lojinha fields to notification flows.

Changes

Cohort / File(s)Summary
Documentation
docs/05-Modulos/lgpd.md, docs/05-Modulos/shop.md
Added explanatory content aligning LGPD with employment contract clauses and clarified that pre-registration (pré-cadastro) data is visible to order requesters and in notification emails. Standardized UI terminology ("Dialog" → "janela", "toast" → "notificação").
Order Details UI
src/components/admin/products/order-details-modal.tsx
Added new collapsible section "Dados do pré-cadastro (Lojinha)" rendering customer pre-registration fields (name, CPF masked, RG, email, phone, address). Improved name display logic to prefer lojinha_full_name over email fallback and adjusted layout spacing with flex wrapper.
Profile Modal
src/components/ui/complete-profile-modal.tsx
Updated matrícula input label text to clarify its use in time-tracking systems ("utilizada no seu ponto").
Email Templates
src/lib/mail/html-mock.ts
Introduced LojinhaClientData type and extended email mock functions (mockEmailNotificacaoPedidoProduto, mockEmailPedidoProduto) to conditionally render a new "Dados do Cliente (pré-cadastro Lojinha)" section with formatted address and contact information.
Order Router & Notifications
src/server/api/routers/product-order.ts
Expanded user projection across create, createMultiple, and listKanban operations to include lojinha_\* fields (name, CPF, address, neighborhood, CEP, RG, email, phone). Constructed dadosClienteLojinha and dadosClienteLojinhaMultiple objects from these fields and passed them to email notification templates for enriched customer data rendering.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Poem

🐰 A lojinha's secrets, now on display,
Pre-registration whispers in emails each day,
CPF masked, addresses neat,
Customer data, complete and sweet,
From modal to message, the rabbit's ballet! 📧✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title '342 lojinha pré cadastro' clearly identifies the main change: adding lojinha pre-registration functionality throughout the codebase, including documentation updates, UI components, email templates, and API router expansions.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 342-lojinha---pré-cadastro

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (3)
src/components/ui/complete-profile-modal.tsx (1)

33-35: Pre-existing issue: Duplicate entry in setores array.

Lines 33-34 contain a duplicate entry for "COMERCIAL" with the same value and label. This appears to be a pre-existing issue not introduced by this PR, but worth noting for future cleanup.

♻️ Proposed fix to remove duplicate
 const setores = [
{ value: "ADMINISTRATIVO", label: "Administrativo" },
{ value: "COMERCIAL", label: "Comercial" },
- { value: "COMERCIAL", label: "Comercial" },
{ value: "FINANCEIRO", label: "Financeiro" },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/ui/complete-profile-modal.tsx` around lines 33 - 35, The
setores array in src/components/ui/complete-profile-modal.tsx contains a
duplicated entry ({ value: "COMERCIAL", label: "Comercial" }) — remove the
redundant object so each sector appears only once; locate the setores array
definition in complete-profile-modal.tsx and delete the duplicate element (keep
a single "COMERCIAL" entry) ensuring array order and any downstream references
to setores remain unchanged.
src/server/api/routers/product-order.ts (1)

270-286: Consider extracting the dadosClienteLojinha construction to a helper function.

The same pattern for building dadosClienteLojinha is repeated for single orders (lines 270-273) and multiple orders (lines 546-549). Extracting this to a helper function would reduce duplication and improve maintainability.

♻️ Proposed helper function
// At the top of the file or in a shared utilityfunctionbuildLojinhaClientData(user: {lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}|undefined|null): LojinhaClientData|null{if(!user)returnnullconstfields=[user.lojinha_full_name,user.lojinha_cpf,user.lojinha_address,user.lojinha_neighborhood,user.lojinha_cep,user.lojinha_rg,user.lojinha_email,user.lojinha_phone,]if(!fields.some(Boolean))returnnullreturn{lojinha_full_name: user.lojinha_full_name,lojinha_cpf: user.lojinha_cpf,lojinha_address: user.lojinha_address,lojinha_neighborhood: user.lojinha_neighborhood,lojinha_cep: user.lojinha_cep,lojinha_rg: user.lojinha_rg,lojinha_email: user.lojinha_email,lojinha_phone: user.lojinha_phone,}}// Usage:constdadosClienteLojinha=buildLojinhaClientData(order.user)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/server/api/routers/product-order.ts` around lines 270 - 286, Extract the
repeated construction of dadosClienteLojinha into a helper function (e.g.
buildLojinhaClientData) that accepts order.user (or a nullable user object) and
returns the LojinhaClientData object or null; replace the inline
array+some(Boolean) check and object literal in both single-order and
multi-order branches with a call to buildLojinhaClientData(order.user), and
update usages passed to mockEmailNotificacaoPedidoProduto (and any other
callers) to use the helper to remove duplication and centralize the
null/field-check logic.
src/components/admin/products/order-details-modal.tsx (1)

301-310: Consider extracting the lojinha user type to avoid inline type assertions.

The inline type assertion is repeated here and at line 277. Once Prisma types are regenerated to include the new lojinha_* fields in the user select, consider removing these assertions. Alternatively, define a local type or extend the ProductOrderWithRelations type to include these fields explicitly.

♻️ Example type extraction
// At the top of the file, after the existing type definitionstypeLojinhaUserFields={lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}// Then use it in the componentconstu=order.userastypeoforder.user&LojinhaUserFields
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/admin/products/order-details-modal.tsx` around lines 301 -
310, The inline type assertion for order.user is duplicated and should be
extracted into a reusable type to avoid repetition and prepare for Prisma type
regeneration: create a local type alias (e.g., LojinhaUserFields) that declares
lojinha_full_name, lojinha_cpf, lojinha_address, lojinha_neighborhood,
lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as optional string|null
and then replace the inline assertion in the component by combining the existing
user type with that alias (for example using an intersection with typeof
order.user or by extending ProductOrderWithRelations' user type) so both
occurrences (the one at order.user and the earlier one around line 277)
reference the single LojinhaUserFields type.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/components/admin/products/order-details-modal.tsx`:
- Around line 301-310: The inline type assertion for order.user is duplicated
and should be extracted into a reusable type to avoid repetition and prepare for
Prisma type regeneration: create a local type alias (e.g., LojinhaUserFields)
that declares lojinha_full_name, lojinha_cpf, lojinha_address,
lojinha_neighborhood, lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as
optional string|null and then replace the inline assertion in the component by
combining the existing user type with that alias (for example using an
intersection with typeof order.user or by extending ProductOrderWithRelations'
user type) so both occurrences (the one at order.user and the earlier one around
line 277) reference the single LojinhaUserFields type.
In `@src/components/ui/complete-profile-modal.tsx`:
- Around line 33-35: The setores array in
src/components/ui/complete-profile-modal.tsx contains a duplicated entry ({
value: "COMERCIAL", label: "Comercial" }) — remove the redundant object so each
sector appears only once; locate the setores array definition in
complete-profile-modal.tsx and delete the duplicate element (keep a single
"COMERCIAL" entry) ensuring array order and any downstream references to setores
remain unchanged.
In `@src/server/api/routers/product-order.ts`:
- Around line 270-286: Extract the repeated construction of dadosClienteLojinha
into a helper function (e.g. buildLojinhaClientData) that accepts order.user (or
a nullable user object) and returns the LojinhaClientData object or null;
replace the inline array+some(Boolean) check and object literal in both
single-order and multi-order branches with a call to
buildLojinhaClientData(order.user), and update usages passed to
mockEmailNotificacaoPedidoProduto (and any other callers) to use the helper to
remove duplication and centralize the null/field-check logic.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36c73c8 and 39f3cd0.

📒 Files selected for processing (6)
  • docs/05-Modulos/lgpd.md
  • docs/05-Modulos/shop.md
  • src/components/admin/products/order-details-modal.tsx
  • src/components/ui/complete-profile-modal.tsx
  • src/lib/mail/html-mock.ts
  • src/server/api/routers/product-order.ts

@GRHInvDev
GRHInvDev merged commit 2670a7e into mainFeb 26, 2026
7 of 9 checks passed
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.

2 participants

@rbxyz@GRHInvDev
, '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

342 lojinha pré cadastro - #344

Merged
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro
Feb 26, 2026

Hidden character warning

The head ref may contain hidden characters: "342-lojinha---pr\u00e9-cadastro"
Merged

342 lojinha pré cadastro#344
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 26, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Order details now display pre-registration customer information (full name, CPF, RG, email, phone, address) when available.
    • Pre-registration customer data is included in order notification emails.
  • Documentation

    • Updated LGPD compliance documentation with clarified data processing details and responsibilities.
    • Refined terminology for UI elements in system documentation.

@rbxyzrbxyz self-assigned this Feb 26, 2026
@vercel

vercelBot commented Feb 26, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 26, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds support for displaying and propagating Lojinha pre-registration customer data (name, CPF, address, phone, etc.) throughout the order management system. Changes include documentation updates clarifying LGPD data handling, UI enhancements to display pre-registration details in the order modal, email notification template expansions, and backend router modifications to expose and pass lojinha fields to notification flows.

Changes

Cohort / File(s)Summary
Documentation
docs/05-Modulos/lgpd.md, docs/05-Modulos/shop.md
Added explanatory content aligning LGPD with employment contract clauses and clarified that pre-registration (pré-cadastro) data is visible to order requesters and in notification emails. Standardized UI terminology ("Dialog" → "janela", "toast" → "notificação").
Order Details UI
src/components/admin/products/order-details-modal.tsx
Added new collapsible section "Dados do pré-cadastro (Lojinha)" rendering customer pre-registration fields (name, CPF masked, RG, email, phone, address). Improved name display logic to prefer lojinha_full_name over email fallback and adjusted layout spacing with flex wrapper.
Profile Modal
src/components/ui/complete-profile-modal.tsx
Updated matrícula input label text to clarify its use in time-tracking systems ("utilizada no seu ponto").
Email Templates
src/lib/mail/html-mock.ts
Introduced LojinhaClientData type and extended email mock functions (mockEmailNotificacaoPedidoProduto, mockEmailPedidoProduto) to conditionally render a new "Dados do Cliente (pré-cadastro Lojinha)" section with formatted address and contact information.
Order Router & Notifications
src/server/api/routers/product-order.ts
Expanded user projection across create, createMultiple, and listKanban operations to include lojinha_\* fields (name, CPF, address, neighborhood, CEP, RG, email, phone). Constructed dadosClienteLojinha and dadosClienteLojinhaMultiple objects from these fields and passed them to email notification templates for enriched customer data rendering.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Poem

🐰 A lojinha's secrets, now on display,
Pre-registration whispers in emails each day,
CPF masked, addresses neat,
Customer data, complete and sweet,
From modal to message, the rabbit's ballet! 📧✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title '342 lojinha pré cadastro' clearly identifies the main change: adding lojinha pre-registration functionality throughout the codebase, including documentation updates, UI components, email templates, and API router expansions.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 342-lojinha---pré-cadastro

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (3)
src/components/ui/complete-profile-modal.tsx (1)

33-35: Pre-existing issue: Duplicate entry in setores array.

Lines 33-34 contain a duplicate entry for "COMERCIAL" with the same value and label. This appears to be a pre-existing issue not introduced by this PR, but worth noting for future cleanup.

♻️ Proposed fix to remove duplicate
 const setores = [
{ value: "ADMINISTRATIVO", label: "Administrativo" },
{ value: "COMERCIAL", label: "Comercial" },
- { value: "COMERCIAL", label: "Comercial" },
{ value: "FINANCEIRO", label: "Financeiro" },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/ui/complete-profile-modal.tsx` around lines 33 - 35, The
setores array in src/components/ui/complete-profile-modal.tsx contains a
duplicated entry ({ value: "COMERCIAL", label: "Comercial" }) — remove the
redundant object so each sector appears only once; locate the setores array
definition in complete-profile-modal.tsx and delete the duplicate element (keep
a single "COMERCIAL" entry) ensuring array order and any downstream references
to setores remain unchanged.
src/server/api/routers/product-order.ts (1)

270-286: Consider extracting the dadosClienteLojinha construction to a helper function.

The same pattern for building dadosClienteLojinha is repeated for single orders (lines 270-273) and multiple orders (lines 546-549). Extracting this to a helper function would reduce duplication and improve maintainability.

♻️ Proposed helper function
// At the top of the file or in a shared utilityfunctionbuildLojinhaClientData(user: {lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}|undefined|null): LojinhaClientData|null{if(!user)returnnullconstfields=[user.lojinha_full_name,user.lojinha_cpf,user.lojinha_address,user.lojinha_neighborhood,user.lojinha_cep,user.lojinha_rg,user.lojinha_email,user.lojinha_phone,]if(!fields.some(Boolean))returnnullreturn{lojinha_full_name: user.lojinha_full_name,lojinha_cpf: user.lojinha_cpf,lojinha_address: user.lojinha_address,lojinha_neighborhood: user.lojinha_neighborhood,lojinha_cep: user.lojinha_cep,lojinha_rg: user.lojinha_rg,lojinha_email: user.lojinha_email,lojinha_phone: user.lojinha_phone,}}// Usage:constdadosClienteLojinha=buildLojinhaClientData(order.user)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/server/api/routers/product-order.ts` around lines 270 - 286, Extract the
repeated construction of dadosClienteLojinha into a helper function (e.g.
buildLojinhaClientData) that accepts order.user (or a nullable user object) and
returns the LojinhaClientData object or null; replace the inline
array+some(Boolean) check and object literal in both single-order and
multi-order branches with a call to buildLojinhaClientData(order.user), and
update usages passed to mockEmailNotificacaoPedidoProduto (and any other
callers) to use the helper to remove duplication and centralize the
null/field-check logic.
src/components/admin/products/order-details-modal.tsx (1)

301-310: Consider extracting the lojinha user type to avoid inline type assertions.

The inline type assertion is repeated here and at line 277. Once Prisma types are regenerated to include the new lojinha_* fields in the user select, consider removing these assertions. Alternatively, define a local type or extend the ProductOrderWithRelations type to include these fields explicitly.

♻️ Example type extraction
// At the top of the file, after the existing type definitionstypeLojinhaUserFields={lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}// Then use it in the componentconstu=order.userastypeoforder.user&LojinhaUserFields
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/admin/products/order-details-modal.tsx` around lines 301 -
310, The inline type assertion for order.user is duplicated and should be
extracted into a reusable type to avoid repetition and prepare for Prisma type
regeneration: create a local type alias (e.g., LojinhaUserFields) that declares
lojinha_full_name, lojinha_cpf, lojinha_address, lojinha_neighborhood,
lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as optional string|null
and then replace the inline assertion in the component by combining the existing
user type with that alias (for example using an intersection with typeof
order.user or by extending ProductOrderWithRelations' user type) so both
occurrences (the one at order.user and the earlier one around line 277)
reference the single LojinhaUserFields type.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/components/admin/products/order-details-modal.tsx`:
- Around line 301-310: The inline type assertion for order.user is duplicated
and should be extracted into a reusable type to avoid repetition and prepare for
Prisma type regeneration: create a local type alias (e.g., LojinhaUserFields)
that declares lojinha_full_name, lojinha_cpf, lojinha_address,
lojinha_neighborhood, lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as
optional string|null and then replace the inline assertion in the component by
combining the existing user type with that alias (for example using an
intersection with typeof order.user or by extending ProductOrderWithRelations'
user type) so both occurrences (the one at order.user and the earlier one around
line 277) reference the single LojinhaUserFields type.
In `@src/components/ui/complete-profile-modal.tsx`:
- Around line 33-35: The setores array in
src/components/ui/complete-profile-modal.tsx contains a duplicated entry ({
value: "COMERCIAL", label: "Comercial" }) — remove the redundant object so each
sector appears only once; locate the setores array definition in
complete-profile-modal.tsx and delete the duplicate element (keep a single
"COMERCIAL" entry) ensuring array order and any downstream references to setores
remain unchanged.
In `@src/server/api/routers/product-order.ts`:
- Around line 270-286: Extract the repeated construction of dadosClienteLojinha
into a helper function (e.g. buildLojinhaClientData) that accepts order.user (or
a nullable user object) and returns the LojinhaClientData object or null;
replace the inline array+some(Boolean) check and object literal in both
single-order and multi-order branches with a call to
buildLojinhaClientData(order.user), and update usages passed to
mockEmailNotificacaoPedidoProduto (and any other callers) to use the helper to
remove duplication and centralize the null/field-check logic.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36c73c8 and 39f3cd0.

📒 Files selected for processing (6)
  • docs/05-Modulos/lgpd.md
  • docs/05-Modulos/shop.md
  • src/components/admin/products/order-details-modal.tsx
  • src/components/ui/complete-profile-modal.tsx
  • src/lib/mail/html-mock.ts
  • src/server/api/routers/product-order.ts

@GRHInvDev
GRHInvDev merged commit 2670a7e into mainFeb 26, 2026
7 of 9 checks passed
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.

2 participants

@rbxyz@GRHInvDev
, '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

342 lojinha pré cadastro - #344

Merged
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro
Feb 26, 2026

Hidden character warning

The head ref may contain hidden characters: "342-lojinha---pr\u00e9-cadastro"
Merged

342 lojinha pré cadastro#344
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 26, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Order details now display pre-registration customer information (full name, CPF, RG, email, phone, address) when available.
    • Pre-registration customer data is included in order notification emails.
  • Documentation

    • Updated LGPD compliance documentation with clarified data processing details and responsibilities.
    • Refined terminology for UI elements in system documentation.

@rbxyzrbxyz self-assigned this Feb 26, 2026
@vercel

vercelBot commented Feb 26, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 26, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds support for displaying and propagating Lojinha pre-registration customer data (name, CPF, address, phone, etc.) throughout the order management system. Changes include documentation updates clarifying LGPD data handling, UI enhancements to display pre-registration details in the order modal, email notification template expansions, and backend router modifications to expose and pass lojinha fields to notification flows.

Changes

Cohort / File(s)Summary
Documentation
docs/05-Modulos/lgpd.md, docs/05-Modulos/shop.md
Added explanatory content aligning LGPD with employment contract clauses and clarified that pre-registration (pré-cadastro) data is visible to order requesters and in notification emails. Standardized UI terminology ("Dialog" → "janela", "toast" → "notificação").
Order Details UI
src/components/admin/products/order-details-modal.tsx
Added new collapsible section "Dados do pré-cadastro (Lojinha)" rendering customer pre-registration fields (name, CPF masked, RG, email, phone, address). Improved name display logic to prefer lojinha_full_name over email fallback and adjusted layout spacing with flex wrapper.
Profile Modal
src/components/ui/complete-profile-modal.tsx
Updated matrícula input label text to clarify its use in time-tracking systems ("utilizada no seu ponto").
Email Templates
src/lib/mail/html-mock.ts
Introduced LojinhaClientData type and extended email mock functions (mockEmailNotificacaoPedidoProduto, mockEmailPedidoProduto) to conditionally render a new "Dados do Cliente (pré-cadastro Lojinha)" section with formatted address and contact information.
Order Router & Notifications
src/server/api/routers/product-order.ts
Expanded user projection across create, createMultiple, and listKanban operations to include lojinha_\* fields (name, CPF, address, neighborhood, CEP, RG, email, phone). Constructed dadosClienteLojinha and dadosClienteLojinhaMultiple objects from these fields and passed them to email notification templates for enriched customer data rendering.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Poem

🐰 A lojinha's secrets, now on display,
Pre-registration whispers in emails each day,
CPF masked, addresses neat,
Customer data, complete and sweet,
From modal to message, the rabbit's ballet! 📧✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title '342 lojinha pré cadastro' clearly identifies the main change: adding lojinha pre-registration functionality throughout the codebase, including documentation updates, UI components, email templates, and API router expansions.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 342-lojinha---pré-cadastro

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (3)
src/components/ui/complete-profile-modal.tsx (1)

33-35: Pre-existing issue: Duplicate entry in setores array.

Lines 33-34 contain a duplicate entry for "COMERCIAL" with the same value and label. This appears to be a pre-existing issue not introduced by this PR, but worth noting for future cleanup.

♻️ Proposed fix to remove duplicate
 const setores = [
{ value: "ADMINISTRATIVO", label: "Administrativo" },
{ value: "COMERCIAL", label: "Comercial" },
- { value: "COMERCIAL", label: "Comercial" },
{ value: "FINANCEIRO", label: "Financeiro" },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/ui/complete-profile-modal.tsx` around lines 33 - 35, The
setores array in src/components/ui/complete-profile-modal.tsx contains a
duplicated entry ({ value: "COMERCIAL", label: "Comercial" }) — remove the
redundant object so each sector appears only once; locate the setores array
definition in complete-profile-modal.tsx and delete the duplicate element (keep
a single "COMERCIAL" entry) ensuring array order and any downstream references
to setores remain unchanged.
src/server/api/routers/product-order.ts (1)

270-286: Consider extracting the dadosClienteLojinha construction to a helper function.

The same pattern for building dadosClienteLojinha is repeated for single orders (lines 270-273) and multiple orders (lines 546-549). Extracting this to a helper function would reduce duplication and improve maintainability.

♻️ Proposed helper function
// At the top of the file or in a shared utilityfunctionbuildLojinhaClientData(user: {lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}|undefined|null): LojinhaClientData|null{if(!user)returnnullconstfields=[user.lojinha_full_name,user.lojinha_cpf,user.lojinha_address,user.lojinha_neighborhood,user.lojinha_cep,user.lojinha_rg,user.lojinha_email,user.lojinha_phone,]if(!fields.some(Boolean))returnnullreturn{lojinha_full_name: user.lojinha_full_name,lojinha_cpf: user.lojinha_cpf,lojinha_address: user.lojinha_address,lojinha_neighborhood: user.lojinha_neighborhood,lojinha_cep: user.lojinha_cep,lojinha_rg: user.lojinha_rg,lojinha_email: user.lojinha_email,lojinha_phone: user.lojinha_phone,}}// Usage:constdadosClienteLojinha=buildLojinhaClientData(order.user)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/server/api/routers/product-order.ts` around lines 270 - 286, Extract the
repeated construction of dadosClienteLojinha into a helper function (e.g.
buildLojinhaClientData) that accepts order.user (or a nullable user object) and
returns the LojinhaClientData object or null; replace the inline
array+some(Boolean) check and object literal in both single-order and
multi-order branches with a call to buildLojinhaClientData(order.user), and
update usages passed to mockEmailNotificacaoPedidoProduto (and any other
callers) to use the helper to remove duplication and centralize the
null/field-check logic.
src/components/admin/products/order-details-modal.tsx (1)

301-310: Consider extracting the lojinha user type to avoid inline type assertions.

The inline type assertion is repeated here and at line 277. Once Prisma types are regenerated to include the new lojinha_* fields in the user select, consider removing these assertions. Alternatively, define a local type or extend the ProductOrderWithRelations type to include these fields explicitly.

♻️ Example type extraction
// At the top of the file, after the existing type definitionstypeLojinhaUserFields={lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}// Then use it in the componentconstu=order.userastypeoforder.user&LojinhaUserFields
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/admin/products/order-details-modal.tsx` around lines 301 -
310, The inline type assertion for order.user is duplicated and should be
extracted into a reusable type to avoid repetition and prepare for Prisma type
regeneration: create a local type alias (e.g., LojinhaUserFields) that declares
lojinha_full_name, lojinha_cpf, lojinha_address, lojinha_neighborhood,
lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as optional string|null
and then replace the inline assertion in the component by combining the existing
user type with that alias (for example using an intersection with typeof
order.user or by extending ProductOrderWithRelations' user type) so both
occurrences (the one at order.user and the earlier one around line 277)
reference the single LojinhaUserFields type.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/components/admin/products/order-details-modal.tsx`:
- Around line 301-310: The inline type assertion for order.user is duplicated
and should be extracted into a reusable type to avoid repetition and prepare for
Prisma type regeneration: create a local type alias (e.g., LojinhaUserFields)
that declares lojinha_full_name, lojinha_cpf, lojinha_address,
lojinha_neighborhood, lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as
optional string|null and then replace the inline assertion in the component by
combining the existing user type with that alias (for example using an
intersection with typeof order.user or by extending ProductOrderWithRelations'
user type) so both occurrences (the one at order.user and the earlier one around
line 277) reference the single LojinhaUserFields type.
In `@src/components/ui/complete-profile-modal.tsx`:
- Around line 33-35: The setores array in
src/components/ui/complete-profile-modal.tsx contains a duplicated entry ({
value: "COMERCIAL", label: "Comercial" }) — remove the redundant object so each
sector appears only once; locate the setores array definition in
complete-profile-modal.tsx and delete the duplicate element (keep a single
"COMERCIAL" entry) ensuring array order and any downstream references to setores
remain unchanged.
In `@src/server/api/routers/product-order.ts`:
- Around line 270-286: Extract the repeated construction of dadosClienteLojinha
into a helper function (e.g. buildLojinhaClientData) that accepts order.user (or
a nullable user object) and returns the LojinhaClientData object or null;
replace the inline array+some(Boolean) check and object literal in both
single-order and multi-order branches with a call to
buildLojinhaClientData(order.user), and update usages passed to
mockEmailNotificacaoPedidoProduto (and any other callers) to use the helper to
remove duplication and centralize the null/field-check logic.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36c73c8 and 39f3cd0.

📒 Files selected for processing (6)
  • docs/05-Modulos/lgpd.md
  • docs/05-Modulos/shop.md
  • src/components/admin/products/order-details-modal.tsx
  • src/components/ui/complete-profile-modal.tsx
  • src/lib/mail/html-mock.ts
  • src/server/api/routers/product-order.ts

@GRHInvDev
GRHInvDev merged commit 2670a7e into mainFeb 26, 2026
7 of 9 checks passed
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.

2 participants

@rbxyz@GRHInvDev
, '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

342 lojinha pré cadastro - #344

Merged
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro
Feb 26, 2026

Hidden character warning

The head ref may contain hidden characters: "342-lojinha---pr\u00e9-cadastro"
Merged

342 lojinha pré cadastro#344
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 26, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Order details now display pre-registration customer information (full name, CPF, RG, email, phone, address) when available.
    • Pre-registration customer data is included in order notification emails.
  • Documentation

    • Updated LGPD compliance documentation with clarified data processing details and responsibilities.
    • Refined terminology for UI elements in system documentation.

@rbxyzrbxyz self-assigned this Feb 26, 2026
@vercel

vercelBot commented Feb 26, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 26, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds support for displaying and propagating Lojinha pre-registration customer data (name, CPF, address, phone, etc.) throughout the order management system. Changes include documentation updates clarifying LGPD data handling, UI enhancements to display pre-registration details in the order modal, email notification template expansions, and backend router modifications to expose and pass lojinha fields to notification flows.

Changes

Cohort / File(s)Summary
Documentation
docs/05-Modulos/lgpd.md, docs/05-Modulos/shop.md
Added explanatory content aligning LGPD with employment contract clauses and clarified that pre-registration (pré-cadastro) data is visible to order requesters and in notification emails. Standardized UI terminology ("Dialog" → "janela", "toast" → "notificação").
Order Details UI
src/components/admin/products/order-details-modal.tsx
Added new collapsible section "Dados do pré-cadastro (Lojinha)" rendering customer pre-registration fields (name, CPF masked, RG, email, phone, address). Improved name display logic to prefer lojinha_full_name over email fallback and adjusted layout spacing with flex wrapper.
Profile Modal
src/components/ui/complete-profile-modal.tsx
Updated matrícula input label text to clarify its use in time-tracking systems ("utilizada no seu ponto").
Email Templates
src/lib/mail/html-mock.ts
Introduced LojinhaClientData type and extended email mock functions (mockEmailNotificacaoPedidoProduto, mockEmailPedidoProduto) to conditionally render a new "Dados do Cliente (pré-cadastro Lojinha)" section with formatted address and contact information.
Order Router & Notifications
src/server/api/routers/product-order.ts
Expanded user projection across create, createMultiple, and listKanban operations to include lojinha_\* fields (name, CPF, address, neighborhood, CEP, RG, email, phone). Constructed dadosClienteLojinha and dadosClienteLojinhaMultiple objects from these fields and passed them to email notification templates for enriched customer data rendering.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Poem

🐰 A lojinha's secrets, now on display,
Pre-registration whispers in emails each day,
CPF masked, addresses neat,
Customer data, complete and sweet,
From modal to message, the rabbit's ballet! 📧✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title '342 lojinha pré cadastro' clearly identifies the main change: adding lojinha pre-registration functionality throughout the codebase, including documentation updates, UI components, email templates, and API router expansions.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 342-lojinha---pré-cadastro

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (3)
src/components/ui/complete-profile-modal.tsx (1)

33-35: Pre-existing issue: Duplicate entry in setores array.

Lines 33-34 contain a duplicate entry for "COMERCIAL" with the same value and label. This appears to be a pre-existing issue not introduced by this PR, but worth noting for future cleanup.

♻️ Proposed fix to remove duplicate
 const setores = [
{ value: "ADMINISTRATIVO", label: "Administrativo" },
{ value: "COMERCIAL", label: "Comercial" },
- { value: "COMERCIAL", label: "Comercial" },
{ value: "FINANCEIRO", label: "Financeiro" },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/ui/complete-profile-modal.tsx` around lines 33 - 35, The
setores array in src/components/ui/complete-profile-modal.tsx contains a
duplicated entry ({ value: "COMERCIAL", label: "Comercial" }) — remove the
redundant object so each sector appears only once; locate the setores array
definition in complete-profile-modal.tsx and delete the duplicate element (keep
a single "COMERCIAL" entry) ensuring array order and any downstream references
to setores remain unchanged.
src/server/api/routers/product-order.ts (1)

270-286: Consider extracting the dadosClienteLojinha construction to a helper function.

The same pattern for building dadosClienteLojinha is repeated for single orders (lines 270-273) and multiple orders (lines 546-549). Extracting this to a helper function would reduce duplication and improve maintainability.

♻️ Proposed helper function
// At the top of the file or in a shared utilityfunctionbuildLojinhaClientData(user: {lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}|undefined|null): LojinhaClientData|null{if(!user)returnnullconstfields=[user.lojinha_full_name,user.lojinha_cpf,user.lojinha_address,user.lojinha_neighborhood,user.lojinha_cep,user.lojinha_rg,user.lojinha_email,user.lojinha_phone,]if(!fields.some(Boolean))returnnullreturn{lojinha_full_name: user.lojinha_full_name,lojinha_cpf: user.lojinha_cpf,lojinha_address: user.lojinha_address,lojinha_neighborhood: user.lojinha_neighborhood,lojinha_cep: user.lojinha_cep,lojinha_rg: user.lojinha_rg,lojinha_email: user.lojinha_email,lojinha_phone: user.lojinha_phone,}}// Usage:constdadosClienteLojinha=buildLojinhaClientData(order.user)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/server/api/routers/product-order.ts` around lines 270 - 286, Extract the
repeated construction of dadosClienteLojinha into a helper function (e.g.
buildLojinhaClientData) that accepts order.user (or a nullable user object) and
returns the LojinhaClientData object or null; replace the inline
array+some(Boolean) check and object literal in both single-order and
multi-order branches with a call to buildLojinhaClientData(order.user), and
update usages passed to mockEmailNotificacaoPedidoProduto (and any other
callers) to use the helper to remove duplication and centralize the
null/field-check logic.
src/components/admin/products/order-details-modal.tsx (1)

301-310: Consider extracting the lojinha user type to avoid inline type assertions.

The inline type assertion is repeated here and at line 277. Once Prisma types are regenerated to include the new lojinha_* fields in the user select, consider removing these assertions. Alternatively, define a local type or extend the ProductOrderWithRelations type to include these fields explicitly.

♻️ Example type extraction
// At the top of the file, after the existing type definitionstypeLojinhaUserFields={lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}// Then use it in the componentconstu=order.userastypeoforder.user&LojinhaUserFields
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/admin/products/order-details-modal.tsx` around lines 301 -
310, The inline type assertion for order.user is duplicated and should be
extracted into a reusable type to avoid repetition and prepare for Prisma type
regeneration: create a local type alias (e.g., LojinhaUserFields) that declares
lojinha_full_name, lojinha_cpf, lojinha_address, lojinha_neighborhood,
lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as optional string|null
and then replace the inline assertion in the component by combining the existing
user type with that alias (for example using an intersection with typeof
order.user or by extending ProductOrderWithRelations' user type) so both
occurrences (the one at order.user and the earlier one around line 277)
reference the single LojinhaUserFields type.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/components/admin/products/order-details-modal.tsx`:
- Around line 301-310: The inline type assertion for order.user is duplicated
and should be extracted into a reusable type to avoid repetition and prepare for
Prisma type regeneration: create a local type alias (e.g., LojinhaUserFields)
that declares lojinha_full_name, lojinha_cpf, lojinha_address,
lojinha_neighborhood, lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as
optional string|null and then replace the inline assertion in the component by
combining the existing user type with that alias (for example using an
intersection with typeof order.user or by extending ProductOrderWithRelations'
user type) so both occurrences (the one at order.user and the earlier one around
line 277) reference the single LojinhaUserFields type.
In `@src/components/ui/complete-profile-modal.tsx`:
- Around line 33-35: The setores array in
src/components/ui/complete-profile-modal.tsx contains a duplicated entry ({
value: "COMERCIAL", label: "Comercial" }) — remove the redundant object so each
sector appears only once; locate the setores array definition in
complete-profile-modal.tsx and delete the duplicate element (keep a single
"COMERCIAL" entry) ensuring array order and any downstream references to setores
remain unchanged.
In `@src/server/api/routers/product-order.ts`:
- Around line 270-286: Extract the repeated construction of dadosClienteLojinha
into a helper function (e.g. buildLojinhaClientData) that accepts order.user (or
a nullable user object) and returns the LojinhaClientData object or null;
replace the inline array+some(Boolean) check and object literal in both
single-order and multi-order branches with a call to
buildLojinhaClientData(order.user), and update usages passed to
mockEmailNotificacaoPedidoProduto (and any other callers) to use the helper to
remove duplication and centralize the null/field-check logic.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36c73c8 and 39f3cd0.

📒 Files selected for processing (6)
  • docs/05-Modulos/lgpd.md
  • docs/05-Modulos/shop.md
  • src/components/admin/products/order-details-modal.tsx
  • src/components/ui/complete-profile-modal.tsx
  • src/lib/mail/html-mock.ts
  • src/server/api/routers/product-order.ts

@GRHInvDev
GRHInvDev merged commit 2670a7e into mainFeb 26, 2026
7 of 9 checks passed
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.

2 participants

@rbxyz@GRHInvDev
, '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

342 lojinha pré cadastro - #344

Merged
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro
Feb 26, 2026

Hidden character warning

The head ref may contain hidden characters: "342-lojinha---pr\u00e9-cadastro"
Merged

342 lojinha pré cadastro#344
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 26, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Order details now display pre-registration customer information (full name, CPF, RG, email, phone, address) when available.
    • Pre-registration customer data is included in order notification emails.
  • Documentation

    • Updated LGPD compliance documentation with clarified data processing details and responsibilities.
    • Refined terminology for UI elements in system documentation.

@rbxyzrbxyz self-assigned this Feb 26, 2026
@vercel

vercelBot commented Feb 26, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 26, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds support for displaying and propagating Lojinha pre-registration customer data (name, CPF, address, phone, etc.) throughout the order management system. Changes include documentation updates clarifying LGPD data handling, UI enhancements to display pre-registration details in the order modal, email notification template expansions, and backend router modifications to expose and pass lojinha fields to notification flows.

Changes

Cohort / File(s)Summary
Documentation
docs/05-Modulos/lgpd.md, docs/05-Modulos/shop.md
Added explanatory content aligning LGPD with employment contract clauses and clarified that pre-registration (pré-cadastro) data is visible to order requesters and in notification emails. Standardized UI terminology ("Dialog" → "janela", "toast" → "notificação").
Order Details UI
src/components/admin/products/order-details-modal.tsx
Added new collapsible section "Dados do pré-cadastro (Lojinha)" rendering customer pre-registration fields (name, CPF masked, RG, email, phone, address). Improved name display logic to prefer lojinha_full_name over email fallback and adjusted layout spacing with flex wrapper.
Profile Modal
src/components/ui/complete-profile-modal.tsx
Updated matrícula input label text to clarify its use in time-tracking systems ("utilizada no seu ponto").
Email Templates
src/lib/mail/html-mock.ts
Introduced LojinhaClientData type and extended email mock functions (mockEmailNotificacaoPedidoProduto, mockEmailPedidoProduto) to conditionally render a new "Dados do Cliente (pré-cadastro Lojinha)" section with formatted address and contact information.
Order Router & Notifications
src/server/api/routers/product-order.ts
Expanded user projection across create, createMultiple, and listKanban operations to include lojinha_\* fields (name, CPF, address, neighborhood, CEP, RG, email, phone). Constructed dadosClienteLojinha and dadosClienteLojinhaMultiple objects from these fields and passed them to email notification templates for enriched customer data rendering.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Poem

🐰 A lojinha's secrets, now on display,
Pre-registration whispers in emails each day,
CPF masked, addresses neat,
Customer data, complete and sweet,
From modal to message, the rabbit's ballet! 📧✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title '342 lojinha pré cadastro' clearly identifies the main change: adding lojinha pre-registration functionality throughout the codebase, including documentation updates, UI components, email templates, and API router expansions.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 342-lojinha---pré-cadastro

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (3)
src/components/ui/complete-profile-modal.tsx (1)

33-35: Pre-existing issue: Duplicate entry in setores array.

Lines 33-34 contain a duplicate entry for "COMERCIAL" with the same value and label. This appears to be a pre-existing issue not introduced by this PR, but worth noting for future cleanup.

♻️ Proposed fix to remove duplicate
 const setores = [
{ value: "ADMINISTRATIVO", label: "Administrativo" },
{ value: "COMERCIAL", label: "Comercial" },
- { value: "COMERCIAL", label: "Comercial" },
{ value: "FINANCEIRO", label: "Financeiro" },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/ui/complete-profile-modal.tsx` around lines 33 - 35, The
setores array in src/components/ui/complete-profile-modal.tsx contains a
duplicated entry ({ value: "COMERCIAL", label: "Comercial" }) — remove the
redundant object so each sector appears only once; locate the setores array
definition in complete-profile-modal.tsx and delete the duplicate element (keep
a single "COMERCIAL" entry) ensuring array order and any downstream references
to setores remain unchanged.
src/server/api/routers/product-order.ts (1)

270-286: Consider extracting the dadosClienteLojinha construction to a helper function.

The same pattern for building dadosClienteLojinha is repeated for single orders (lines 270-273) and multiple orders (lines 546-549). Extracting this to a helper function would reduce duplication and improve maintainability.

♻️ Proposed helper function
// At the top of the file or in a shared utilityfunctionbuildLojinhaClientData(user: {lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}|undefined|null): LojinhaClientData|null{if(!user)returnnullconstfields=[user.lojinha_full_name,user.lojinha_cpf,user.lojinha_address,user.lojinha_neighborhood,user.lojinha_cep,user.lojinha_rg,user.lojinha_email,user.lojinha_phone,]if(!fields.some(Boolean))returnnullreturn{lojinha_full_name: user.lojinha_full_name,lojinha_cpf: user.lojinha_cpf,lojinha_address: user.lojinha_address,lojinha_neighborhood: user.lojinha_neighborhood,lojinha_cep: user.lojinha_cep,lojinha_rg: user.lojinha_rg,lojinha_email: user.lojinha_email,lojinha_phone: user.lojinha_phone,}}// Usage:constdadosClienteLojinha=buildLojinhaClientData(order.user)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/server/api/routers/product-order.ts` around lines 270 - 286, Extract the
repeated construction of dadosClienteLojinha into a helper function (e.g.
buildLojinhaClientData) that accepts order.user (or a nullable user object) and
returns the LojinhaClientData object or null; replace the inline
array+some(Boolean) check and object literal in both single-order and
multi-order branches with a call to buildLojinhaClientData(order.user), and
update usages passed to mockEmailNotificacaoPedidoProduto (and any other
callers) to use the helper to remove duplication and centralize the
null/field-check logic.
src/components/admin/products/order-details-modal.tsx (1)

301-310: Consider extracting the lojinha user type to avoid inline type assertions.

The inline type assertion is repeated here and at line 277. Once Prisma types are regenerated to include the new lojinha_* fields in the user select, consider removing these assertions. Alternatively, define a local type or extend the ProductOrderWithRelations type to include these fields explicitly.

♻️ Example type extraction
// At the top of the file, after the existing type definitionstypeLojinhaUserFields={lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}// Then use it in the componentconstu=order.userastypeoforder.user&LojinhaUserFields
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/admin/products/order-details-modal.tsx` around lines 301 -
310, The inline type assertion for order.user is duplicated and should be
extracted into a reusable type to avoid repetition and prepare for Prisma type
regeneration: create a local type alias (e.g., LojinhaUserFields) that declares
lojinha_full_name, lojinha_cpf, lojinha_address, lojinha_neighborhood,
lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as optional string|null
and then replace the inline assertion in the component by combining the existing
user type with that alias (for example using an intersection with typeof
order.user or by extending ProductOrderWithRelations' user type) so both
occurrences (the one at order.user and the earlier one around line 277)
reference the single LojinhaUserFields type.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/components/admin/products/order-details-modal.tsx`:
- Around line 301-310: The inline type assertion for order.user is duplicated
and should be extracted into a reusable type to avoid repetition and prepare for
Prisma type regeneration: create a local type alias (e.g., LojinhaUserFields)
that declares lojinha_full_name, lojinha_cpf, lojinha_address,
lojinha_neighborhood, lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as
optional string|null and then replace the inline assertion in the component by
combining the existing user type with that alias (for example using an
intersection with typeof order.user or by extending ProductOrderWithRelations'
user type) so both occurrences (the one at order.user and the earlier one around
line 277) reference the single LojinhaUserFields type.
In `@src/components/ui/complete-profile-modal.tsx`:
- Around line 33-35: The setores array in
src/components/ui/complete-profile-modal.tsx contains a duplicated entry ({
value: "COMERCIAL", label: "Comercial" }) — remove the redundant object so each
sector appears only once; locate the setores array definition in
complete-profile-modal.tsx and delete the duplicate element (keep a single
"COMERCIAL" entry) ensuring array order and any downstream references to setores
remain unchanged.
In `@src/server/api/routers/product-order.ts`:
- Around line 270-286: Extract the repeated construction of dadosClienteLojinha
into a helper function (e.g. buildLojinhaClientData) that accepts order.user (or
a nullable user object) and returns the LojinhaClientData object or null;
replace the inline array+some(Boolean) check and object literal in both
single-order and multi-order branches with a call to
buildLojinhaClientData(order.user), and update usages passed to
mockEmailNotificacaoPedidoProduto (and any other callers) to use the helper to
remove duplication and centralize the null/field-check logic.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36c73c8 and 39f3cd0.

📒 Files selected for processing (6)
  • docs/05-Modulos/lgpd.md
  • docs/05-Modulos/shop.md
  • src/components/admin/products/order-details-modal.tsx
  • src/components/ui/complete-profile-modal.tsx
  • src/lib/mail/html-mock.ts
  • src/server/api/routers/product-order.ts

@GRHInvDev
GRHInvDev merged commit 2670a7e into mainFeb 26, 2026
7 of 9 checks passed
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.

2 participants

@rbxyz@GRHInvDev
, '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

342 lojinha pré cadastro - #344

Merged
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro
Feb 26, 2026

Hidden character warning

The head ref may contain hidden characters: "342-lojinha---pr\u00e9-cadastro"
Merged

342 lojinha pré cadastro#344
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 26, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Order details now display pre-registration customer information (full name, CPF, RG, email, phone, address) when available.
    • Pre-registration customer data is included in order notification emails.
  • Documentation

    • Updated LGPD compliance documentation with clarified data processing details and responsibilities.
    • Refined terminology for UI elements in system documentation.

@rbxyzrbxyz self-assigned this Feb 26, 2026
@vercel

vercelBot commented Feb 26, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 26, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds support for displaying and propagating Lojinha pre-registration customer data (name, CPF, address, phone, etc.) throughout the order management system. Changes include documentation updates clarifying LGPD data handling, UI enhancements to display pre-registration details in the order modal, email notification template expansions, and backend router modifications to expose and pass lojinha fields to notification flows.

Changes

Cohort / File(s)Summary
Documentation
docs/05-Modulos/lgpd.md, docs/05-Modulos/shop.md
Added explanatory content aligning LGPD with employment contract clauses and clarified that pre-registration (pré-cadastro) data is visible to order requesters and in notification emails. Standardized UI terminology ("Dialog" → "janela", "toast" → "notificação").
Order Details UI
src/components/admin/products/order-details-modal.tsx
Added new collapsible section "Dados do pré-cadastro (Lojinha)" rendering customer pre-registration fields (name, CPF masked, RG, email, phone, address). Improved name display logic to prefer lojinha_full_name over email fallback and adjusted layout spacing with flex wrapper.
Profile Modal
src/components/ui/complete-profile-modal.tsx
Updated matrícula input label text to clarify its use in time-tracking systems ("utilizada no seu ponto").
Email Templates
src/lib/mail/html-mock.ts
Introduced LojinhaClientData type and extended email mock functions (mockEmailNotificacaoPedidoProduto, mockEmailPedidoProduto) to conditionally render a new "Dados do Cliente (pré-cadastro Lojinha)" section with formatted address and contact information.
Order Router & Notifications
src/server/api/routers/product-order.ts
Expanded user projection across create, createMultiple, and listKanban operations to include lojinha_\* fields (name, CPF, address, neighborhood, CEP, RG, email, phone). Constructed dadosClienteLojinha and dadosClienteLojinhaMultiple objects from these fields and passed them to email notification templates for enriched customer data rendering.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Poem

🐰 A lojinha's secrets, now on display,
Pre-registration whispers in emails each day,
CPF masked, addresses neat,
Customer data, complete and sweet,
From modal to message, the rabbit's ballet! 📧✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title '342 lojinha pré cadastro' clearly identifies the main change: adding lojinha pre-registration functionality throughout the codebase, including documentation updates, UI components, email templates, and API router expansions.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 342-lojinha---pré-cadastro

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (3)
src/components/ui/complete-profile-modal.tsx (1)

33-35: Pre-existing issue: Duplicate entry in setores array.

Lines 33-34 contain a duplicate entry for "COMERCIAL" with the same value and label. This appears to be a pre-existing issue not introduced by this PR, but worth noting for future cleanup.

♻️ Proposed fix to remove duplicate
 const setores = [
{ value: "ADMINISTRATIVO", label: "Administrativo" },
{ value: "COMERCIAL", label: "Comercial" },
- { value: "COMERCIAL", label: "Comercial" },
{ value: "FINANCEIRO", label: "Financeiro" },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/ui/complete-profile-modal.tsx` around lines 33 - 35, The
setores array in src/components/ui/complete-profile-modal.tsx contains a
duplicated entry ({ value: "COMERCIAL", label: "Comercial" }) — remove the
redundant object so each sector appears only once; locate the setores array
definition in complete-profile-modal.tsx and delete the duplicate element (keep
a single "COMERCIAL" entry) ensuring array order and any downstream references
to setores remain unchanged.
src/server/api/routers/product-order.ts (1)

270-286: Consider extracting the dadosClienteLojinha construction to a helper function.

The same pattern for building dadosClienteLojinha is repeated for single orders (lines 270-273) and multiple orders (lines 546-549). Extracting this to a helper function would reduce duplication and improve maintainability.

♻️ Proposed helper function
// At the top of the file or in a shared utilityfunctionbuildLojinhaClientData(user: {lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}|undefined|null): LojinhaClientData|null{if(!user)returnnullconstfields=[user.lojinha_full_name,user.lojinha_cpf,user.lojinha_address,user.lojinha_neighborhood,user.lojinha_cep,user.lojinha_rg,user.lojinha_email,user.lojinha_phone,]if(!fields.some(Boolean))returnnullreturn{lojinha_full_name: user.lojinha_full_name,lojinha_cpf: user.lojinha_cpf,lojinha_address: user.lojinha_address,lojinha_neighborhood: user.lojinha_neighborhood,lojinha_cep: user.lojinha_cep,lojinha_rg: user.lojinha_rg,lojinha_email: user.lojinha_email,lojinha_phone: user.lojinha_phone,}}// Usage:constdadosClienteLojinha=buildLojinhaClientData(order.user)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/server/api/routers/product-order.ts` around lines 270 - 286, Extract the
repeated construction of dadosClienteLojinha into a helper function (e.g.
buildLojinhaClientData) that accepts order.user (or a nullable user object) and
returns the LojinhaClientData object or null; replace the inline
array+some(Boolean) check and object literal in both single-order and
multi-order branches with a call to buildLojinhaClientData(order.user), and
update usages passed to mockEmailNotificacaoPedidoProduto (and any other
callers) to use the helper to remove duplication and centralize the
null/field-check logic.
src/components/admin/products/order-details-modal.tsx (1)

301-310: Consider extracting the lojinha user type to avoid inline type assertions.

The inline type assertion is repeated here and at line 277. Once Prisma types are regenerated to include the new lojinha_* fields in the user select, consider removing these assertions. Alternatively, define a local type or extend the ProductOrderWithRelations type to include these fields explicitly.

♻️ Example type extraction
// At the top of the file, after the existing type definitionstypeLojinhaUserFields={lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}// Then use it in the componentconstu=order.userastypeoforder.user&LojinhaUserFields
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/admin/products/order-details-modal.tsx` around lines 301 -
310, The inline type assertion for order.user is duplicated and should be
extracted into a reusable type to avoid repetition and prepare for Prisma type
regeneration: create a local type alias (e.g., LojinhaUserFields) that declares
lojinha_full_name, lojinha_cpf, lojinha_address, lojinha_neighborhood,
lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as optional string|null
and then replace the inline assertion in the component by combining the existing
user type with that alias (for example using an intersection with typeof
order.user or by extending ProductOrderWithRelations' user type) so both
occurrences (the one at order.user and the earlier one around line 277)
reference the single LojinhaUserFields type.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/components/admin/products/order-details-modal.tsx`:
- Around line 301-310: The inline type assertion for order.user is duplicated
and should be extracted into a reusable type to avoid repetition and prepare for
Prisma type regeneration: create a local type alias (e.g., LojinhaUserFields)
that declares lojinha_full_name, lojinha_cpf, lojinha_address,
lojinha_neighborhood, lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as
optional string|null and then replace the inline assertion in the component by
combining the existing user type with that alias (for example using an
intersection with typeof order.user or by extending ProductOrderWithRelations'
user type) so both occurrences (the one at order.user and the earlier one around
line 277) reference the single LojinhaUserFields type.
In `@src/components/ui/complete-profile-modal.tsx`:
- Around line 33-35: The setores array in
src/components/ui/complete-profile-modal.tsx contains a duplicated entry ({
value: "COMERCIAL", label: "Comercial" }) — remove the redundant object so each
sector appears only once; locate the setores array definition in
complete-profile-modal.tsx and delete the duplicate element (keep a single
"COMERCIAL" entry) ensuring array order and any downstream references to setores
remain unchanged.
In `@src/server/api/routers/product-order.ts`:
- Around line 270-286: Extract the repeated construction of dadosClienteLojinha
into a helper function (e.g. buildLojinhaClientData) that accepts order.user (or
a nullable user object) and returns the LojinhaClientData object or null;
replace the inline array+some(Boolean) check and object literal in both
single-order and multi-order branches with a call to
buildLojinhaClientData(order.user), and update usages passed to
mockEmailNotificacaoPedidoProduto (and any other callers) to use the helper to
remove duplication and centralize the null/field-check logic.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36c73c8 and 39f3cd0.

📒 Files selected for processing (6)
  • docs/05-Modulos/lgpd.md
  • docs/05-Modulos/shop.md
  • src/components/admin/products/order-details-modal.tsx
  • src/components/ui/complete-profile-modal.tsx
  • src/lib/mail/html-mock.ts
  • src/server/api/routers/product-order.ts

@GRHInvDev
GRHInvDev merged commit 2670a7e into mainFeb 26, 2026
7 of 9 checks passed
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.

2 participants

@rbxyz@GRHInvDev
, '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

342 lojinha pré cadastro - #344

Merged
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro
Feb 26, 2026

Hidden character warning

The head ref may contain hidden characters: "342-lojinha---pr\u00e9-cadastro"
Merged

342 lojinha pré cadastro#344
GRHInvDev merged 2 commits into
mainfrom
342-lojinha---pré-cadastro

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 26, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Order details now display pre-registration customer information (full name, CPF, RG, email, phone, address) when available.
    • Pre-registration customer data is included in order notification emails.
  • Documentation

    • Updated LGPD compliance documentation with clarified data processing details and responsibilities.
    • Refined terminology for UI elements in system documentation.

@rbxyzrbxyz self-assigned this Feb 26, 2026
@vercel

vercelBot commented Feb 26, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 26, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds support for displaying and propagating Lojinha pre-registration customer data (name, CPF, address, phone, etc.) throughout the order management system. Changes include documentation updates clarifying LGPD data handling, UI enhancements to display pre-registration details in the order modal, email notification template expansions, and backend router modifications to expose and pass lojinha fields to notification flows.

Changes

Cohort / File(s)Summary
Documentation
docs/05-Modulos/lgpd.md, docs/05-Modulos/shop.md
Added explanatory content aligning LGPD with employment contract clauses and clarified that pre-registration (pré-cadastro) data is visible to order requesters and in notification emails. Standardized UI terminology ("Dialog" → "janela", "toast" → "notificação").
Order Details UI
src/components/admin/products/order-details-modal.tsx
Added new collapsible section "Dados do pré-cadastro (Lojinha)" rendering customer pre-registration fields (name, CPF masked, RG, email, phone, address). Improved name display logic to prefer lojinha_full_name over email fallback and adjusted layout spacing with flex wrapper.
Profile Modal
src/components/ui/complete-profile-modal.tsx
Updated matrícula input label text to clarify its use in time-tracking systems ("utilizada no seu ponto").
Email Templates
src/lib/mail/html-mock.ts
Introduced LojinhaClientData type and extended email mock functions (mockEmailNotificacaoPedidoProduto, mockEmailPedidoProduto) to conditionally render a new "Dados do Cliente (pré-cadastro Lojinha)" section with formatted address and contact information.
Order Router & Notifications
src/server/api/routers/product-order.ts
Expanded user projection across create, createMultiple, and listKanban operations to include lojinha_\* fields (name, CPF, address, neighborhood, CEP, RG, email, phone). Constructed dadosClienteLojinha and dadosClienteLojinhaMultiple objects from these fields and passed them to email notification templates for enriched customer data rendering.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Poem

🐰 A lojinha's secrets, now on display,
Pre-registration whispers in emails each day,
CPF masked, addresses neat,
Customer data, complete and sweet,
From modal to message, the rabbit's ballet! 📧✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title '342 lojinha pré cadastro' clearly identifies the main change: adding lojinha pre-registration functionality throughout the codebase, including documentation updates, UI components, email templates, and API router expansions.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 342-lojinha---pré-cadastro

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (3)
src/components/ui/complete-profile-modal.tsx (1)

33-35: Pre-existing issue: Duplicate entry in setores array.

Lines 33-34 contain a duplicate entry for "COMERCIAL" with the same value and label. This appears to be a pre-existing issue not introduced by this PR, but worth noting for future cleanup.

♻️ Proposed fix to remove duplicate
 const setores = [
{ value: "ADMINISTRATIVO", label: "Administrativo" },
{ value: "COMERCIAL", label: "Comercial" },
- { value: "COMERCIAL", label: "Comercial" },
{ value: "FINANCEIRO", label: "Financeiro" },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/ui/complete-profile-modal.tsx` around lines 33 - 35, The
setores array in src/components/ui/complete-profile-modal.tsx contains a
duplicated entry ({ value: "COMERCIAL", label: "Comercial" }) — remove the
redundant object so each sector appears only once; locate the setores array
definition in complete-profile-modal.tsx and delete the duplicate element (keep
a single "COMERCIAL" entry) ensuring array order and any downstream references
to setores remain unchanged.
src/server/api/routers/product-order.ts (1)

270-286: Consider extracting the dadosClienteLojinha construction to a helper function.

The same pattern for building dadosClienteLojinha is repeated for single orders (lines 270-273) and multiple orders (lines 546-549). Extracting this to a helper function would reduce duplication and improve maintainability.

♻️ Proposed helper function
// At the top of the file or in a shared utilityfunctionbuildLojinhaClientData(user: {lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}|undefined|null): LojinhaClientData|null{if(!user)returnnullconstfields=[user.lojinha_full_name,user.lojinha_cpf,user.lojinha_address,user.lojinha_neighborhood,user.lojinha_cep,user.lojinha_rg,user.lojinha_email,user.lojinha_phone,]if(!fields.some(Boolean))returnnullreturn{lojinha_full_name: user.lojinha_full_name,lojinha_cpf: user.lojinha_cpf,lojinha_address: user.lojinha_address,lojinha_neighborhood: user.lojinha_neighborhood,lojinha_cep: user.lojinha_cep,lojinha_rg: user.lojinha_rg,lojinha_email: user.lojinha_email,lojinha_phone: user.lojinha_phone,}}// Usage:constdadosClienteLojinha=buildLojinhaClientData(order.user)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/server/api/routers/product-order.ts` around lines 270 - 286, Extract the
repeated construction of dadosClienteLojinha into a helper function (e.g.
buildLojinhaClientData) that accepts order.user (or a nullable user object) and
returns the LojinhaClientData object or null; replace the inline
array+some(Boolean) check and object literal in both single-order and
multi-order branches with a call to buildLojinhaClientData(order.user), and
update usages passed to mockEmailNotificacaoPedidoProduto (and any other
callers) to use the helper to remove duplication and centralize the
null/field-check logic.
src/components/admin/products/order-details-modal.tsx (1)

301-310: Consider extracting the lojinha user type to avoid inline type assertions.

The inline type assertion is repeated here and at line 277. Once Prisma types are regenerated to include the new lojinha_* fields in the user select, consider removing these assertions. Alternatively, define a local type or extend the ProductOrderWithRelations type to include these fields explicitly.

♻️ Example type extraction
// At the top of the file, after the existing type definitionstypeLojinhaUserFields={lojinha_full_name?: string|nulllojinha_cpf?: string|nulllojinha_address?: string|nulllojinha_neighborhood?: string|nulllojinha_cep?: string|nulllojinha_rg?: string|nulllojinha_email?: string|nulllojinha_phone?: string|null}// Then use it in the componentconstu=order.userastypeoforder.user&LojinhaUserFields
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/admin/products/order-details-modal.tsx` around lines 301 -
310, The inline type assertion for order.user is duplicated and should be
extracted into a reusable type to avoid repetition and prepare for Prisma type
regeneration: create a local type alias (e.g., LojinhaUserFields) that declares
lojinha_full_name, lojinha_cpf, lojinha_address, lojinha_neighborhood,
lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as optional string|null
and then replace the inline assertion in the component by combining the existing
user type with that alias (for example using an intersection with typeof
order.user or by extending ProductOrderWithRelations' user type) so both
occurrences (the one at order.user and the earlier one around line 277)
reference the single LojinhaUserFields type.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/components/admin/products/order-details-modal.tsx`:
- Around line 301-310: The inline type assertion for order.user is duplicated
and should be extracted into a reusable type to avoid repetition and prepare for
Prisma type regeneration: create a local type alias (e.g., LojinhaUserFields)
that declares lojinha_full_name, lojinha_cpf, lojinha_address,
lojinha_neighborhood, lojinha_cep, lojinha_rg, lojinha_email, lojinha_phone as
optional string|null and then replace the inline assertion in the component by
combining the existing user type with that alias (for example using an
intersection with typeof order.user or by extending ProductOrderWithRelations'
user type) so both occurrences (the one at order.user and the earlier one around
line 277) reference the single LojinhaUserFields type.
In `@src/components/ui/complete-profile-modal.tsx`:
- Around line 33-35: The setores array in
src/components/ui/complete-profile-modal.tsx contains a duplicated entry ({
value: "COMERCIAL", label: "Comercial" }) — remove the redundant object so each
sector appears only once; locate the setores array definition in
complete-profile-modal.tsx and delete the duplicate element (keep a single
"COMERCIAL" entry) ensuring array order and any downstream references to setores
remain unchanged.
In `@src/server/api/routers/product-order.ts`:
- Around line 270-286: Extract the repeated construction of dadosClienteLojinha
into a helper function (e.g. buildLojinhaClientData) that accepts order.user (or
a nullable user object) and returns the LojinhaClientData object or null;
replace the inline array+some(Boolean) check and object literal in both
single-order and multi-order branches with a call to
buildLojinhaClientData(order.user), and update usages passed to
mockEmailNotificacaoPedidoProduto (and any other callers) to use the helper to
remove duplication and centralize the null/field-check logic.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36c73c8 and 39f3cd0.

📒 Files selected for processing (6)
  • docs/05-Modulos/lgpd.md
  • docs/05-Modulos/shop.md
  • src/components/admin/products/order-details-modal.tsx
  • src/components/ui/complete-profile-modal.tsx
  • src/lib/mail/html-mock.ts
  • src/server/api/routers/product-order.ts

@GRHInvDev
GRHInvDev merged commit 2670a7e into mainFeb 26, 2026
7 of 9 checks passed
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.

2 participants

@rbxyz@GRHInvDev