feat: adicionando CRUD das News + ajuste de view - #111

Merged
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news
Sep 22, 2025
Merged

feat: adicionando CRUD das News + ajuste de view#111
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 22, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Added an Admin “Gerenciar News” section with full news management: create/edit, search, filtering, image upload, per-item actions, and statistics (access-restricted).
    • Posts now track views and last viewed time; view count increments when items become visible.
  • Bug Fixes

    • Stronger permission checks for editing/deleting posts, with clear “Acesso Negado” when lacking rights.
    • Improved content formatting (normalized line breaks) and more consistent image sizing/display in feeds.
  • Documentation

    • Updated documentation footer timestamp to “Última atualização: Setembro 2025.”

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

vercelBot commented Sep 22, 2025

Copy link
Copy Markdown

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

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 22, 2025 6:31pm

@coderabbitai

coderabbitaiBot commented Sep 22, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR updates documentation, extends the Prisma schema (post view tracking and Enterprise enum), adds an admin News management page, enhances the content feed with view counting and line-break handling, adds an admin route, and expands the post API with permission checks, admin listing, and a view-increment endpoint.

Changes

Cohort / File(s)Summary of changes
Documentation
docs/README.md
Updated footer timestamp to “Última atualização: Setembro 2025”.
Database Schema (Prisma)
prisma/schema.prisma
Added Post.viewCount (Int, default 0) and Post.lastViewedAt (DateTime?); extended Enterprise enum with Box_Filial and Cristallux_Filial.
Admin News Page (Client)
src/app/(authenticated)/admin/news/page.tsx
Replaced default Page with client-side NewsManagementPage; added CRUD UI, dialogs, image upload, search/filtering, statistics, access control, and line-break normalization utility.
Content Feed Enhancements
src/components/content-feed.tsx
Normalized line breaks; introduced intersection observer to trigger one-time view increment mutation; adjusted rendering (plain text layout, image sizing); updated placeholders and save behavior.
Admin Routes Config
src/const/admin-routes.ts
Added new admin route entry for “/admin/news” with Newspaper icon and requiresBasicAdmin: true.
Post API Router
src/server/api/routers/post.ts
Added role checks to update/delete; added admin-only listAll; added incrementView endpoint updating viewCount and lastViewedAt; imported RolesConfig.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant U as User
participant CF as ContentFeed (client)
participant IO as IntersectionObserver
participant API as post.incrementView
participant DB as Prisma/Post
U->>CF: Open feed
CF->>IO: Observe PostItem visibility
IO-->>CF: PostItem becomes visible (first time)
CF->>API: mutate({ id })
API->>DB: update viewCount += 1, lastViewedAt = now
DB-->>API: Updated post
API-->>CF: Success
note over CF: Marks view recorded to prevent repeats
Loading
sequenceDiagram
autonumber
participant Admin as Admin/User
participant Page as NewsManagementPage
participant APIU as post.update
participant APID as post.delete
participant ACL as RolesConfig checks
participant DB as Prisma/Post
Admin->>Page: Edit/Delete action
Page->>APIU: update(post) or\nAPID: delete({id})
APIU->>DB: find post
APID->>DB: find post
DB-->>APIU: post|null
DB-->>APID: post|null
alt Not found
APIU-->>Page: NOT_FOUND
APID-->>Page: NOT_FOUND
else Found
APIU->>ACL: is author OR admin?
APID->>ACL: is author OR admin?
alt Forbidden
APIU-->>Page: FORBIDDEN
APID-->>Page: FORBIDDEN
else Allowed
APIU->>DB: update post
APID->>DB: delete post + cleanup image
DB-->>APIU: updated
DB-->>APID: deleted
APIU-->>Page: OK
APID-->>Page: OK
end
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

  • ajustes módulo News #110 — Implements News module fixes: line-break normalization, image handling, admin CRUD page with permissions, and new endpoints including view increments.

Possibly related PRs

Poem

I thump my paws on newsroom floors,
Count views like stars through burrow doors. ✨
New routes mapped, permissions tight,
Posts hop safe by admin light.
Line breaks tidy, images neat—
September’s news is whisker-sweet. 🐇🗞️

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 110-ajustes-modulo-news

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36081bd and 791974e.

📒 Files selected for processing (6)
  • docs/README.md (1 hunks)
  • prisma/schema.prisma (2 hunks)
  • src/app/(authenticated)/admin/news/page.tsx (1 hunks)
  • src/components/content-feed.tsx (10 hunks)
  • src/const/admin-routes.ts (2 hunks)
  • src/server/api/routers/post.ts (4 hunks)

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

❤️ Share

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

@rbxyz
rbxyz merged commit b54a858 into mainSep 22, 2025
4 of 5 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.

ajustes módulo News

1 participant

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

feat: adicionando CRUD das News + ajuste de view - #111

Merged
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news
Sep 22, 2025
Merged

feat: adicionando CRUD das News + ajuste de view#111
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 22, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Added an Admin “Gerenciar News” section with full news management: create/edit, search, filtering, image upload, per-item actions, and statistics (access-restricted).
    • Posts now track views and last viewed time; view count increments when items become visible.
  • Bug Fixes

    • Stronger permission checks for editing/deleting posts, with clear “Acesso Negado” when lacking rights.
    • Improved content formatting (normalized line breaks) and more consistent image sizing/display in feeds.
  • Documentation

    • Updated documentation footer timestamp to “Última atualização: Setembro 2025.”

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

vercelBot commented Sep 22, 2025

Copy link
Copy Markdown

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

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 22, 2025 6:31pm

@coderabbitai

coderabbitaiBot commented Sep 22, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR updates documentation, extends the Prisma schema (post view tracking and Enterprise enum), adds an admin News management page, enhances the content feed with view counting and line-break handling, adds an admin route, and expands the post API with permission checks, admin listing, and a view-increment endpoint.

Changes

Cohort / File(s)Summary of changes
Documentation
docs/README.md
Updated footer timestamp to “Última atualização: Setembro 2025”.
Database Schema (Prisma)
prisma/schema.prisma
Added Post.viewCount (Int, default 0) and Post.lastViewedAt (DateTime?); extended Enterprise enum with Box_Filial and Cristallux_Filial.
Admin News Page (Client)
src/app/(authenticated)/admin/news/page.tsx
Replaced default Page with client-side NewsManagementPage; added CRUD UI, dialogs, image upload, search/filtering, statistics, access control, and line-break normalization utility.
Content Feed Enhancements
src/components/content-feed.tsx
Normalized line breaks; introduced intersection observer to trigger one-time view increment mutation; adjusted rendering (plain text layout, image sizing); updated placeholders and save behavior.
Admin Routes Config
src/const/admin-routes.ts
Added new admin route entry for “/admin/news” with Newspaper icon and requiresBasicAdmin: true.
Post API Router
src/server/api/routers/post.ts
Added role checks to update/delete; added admin-only listAll; added incrementView endpoint updating viewCount and lastViewedAt; imported RolesConfig.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant U as User
participant CF as ContentFeed (client)
participant IO as IntersectionObserver
participant API as post.incrementView
participant DB as Prisma/Post
U->>CF: Open feed
CF->>IO: Observe PostItem visibility
IO-->>CF: PostItem becomes visible (first time)
CF->>API: mutate({ id })
API->>DB: update viewCount += 1, lastViewedAt = now
DB-->>API: Updated post
API-->>CF: Success
note over CF: Marks view recorded to prevent repeats
Loading
sequenceDiagram
autonumber
participant Admin as Admin/User
participant Page as NewsManagementPage
participant APIU as post.update
participant APID as post.delete
participant ACL as RolesConfig checks
participant DB as Prisma/Post
Admin->>Page: Edit/Delete action
Page->>APIU: update(post) or\nAPID: delete({id})
APIU->>DB: find post
APID->>DB: find post
DB-->>APIU: post|null
DB-->>APID: post|null
alt Not found
APIU-->>Page: NOT_FOUND
APID-->>Page: NOT_FOUND
else Found
APIU->>ACL: is author OR admin?
APID->>ACL: is author OR admin?
alt Forbidden
APIU-->>Page: FORBIDDEN
APID-->>Page: FORBIDDEN
else Allowed
APIU->>DB: update post
APID->>DB: delete post + cleanup image
DB-->>APIU: updated
DB-->>APID: deleted
APIU-->>Page: OK
APID-->>Page: OK
end
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

  • ajustes módulo News #110 — Implements News module fixes: line-break normalization, image handling, admin CRUD page with permissions, and new endpoints including view increments.

Possibly related PRs

Poem

I thump my paws on newsroom floors,
Count views like stars through burrow doors. ✨
New routes mapped, permissions tight,
Posts hop safe by admin light.
Line breaks tidy, images neat—
September’s news is whisker-sweet. 🐇🗞️

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 110-ajustes-modulo-news

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36081bd and 791974e.

📒 Files selected for processing (6)
  • docs/README.md (1 hunks)
  • prisma/schema.prisma (2 hunks)
  • src/app/(authenticated)/admin/news/page.tsx (1 hunks)
  • src/components/content-feed.tsx (10 hunks)
  • src/const/admin-routes.ts (2 hunks)
  • src/server/api/routers/post.ts (4 hunks)

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

❤️ Share

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

@rbxyz
rbxyz merged commit b54a858 into mainSep 22, 2025
4 of 5 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.

ajustes módulo News

1 participant

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

feat: adicionando CRUD das News + ajuste de view - #111

Merged
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news
Sep 22, 2025
Merged

feat: adicionando CRUD das News + ajuste de view#111
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 22, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Added an Admin “Gerenciar News” section with full news management: create/edit, search, filtering, image upload, per-item actions, and statistics (access-restricted).
    • Posts now track views and last viewed time; view count increments when items become visible.
  • Bug Fixes

    • Stronger permission checks for editing/deleting posts, with clear “Acesso Negado” when lacking rights.
    • Improved content formatting (normalized line breaks) and more consistent image sizing/display in feeds.
  • Documentation

    • Updated documentation footer timestamp to “Última atualização: Setembro 2025.”

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

vercelBot commented Sep 22, 2025

Copy link
Copy Markdown

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

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 22, 2025 6:31pm

@coderabbitai

coderabbitaiBot commented Sep 22, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR updates documentation, extends the Prisma schema (post view tracking and Enterprise enum), adds an admin News management page, enhances the content feed with view counting and line-break handling, adds an admin route, and expands the post API with permission checks, admin listing, and a view-increment endpoint.

Changes

Cohort / File(s)Summary of changes
Documentation
docs/README.md
Updated footer timestamp to “Última atualização: Setembro 2025”.
Database Schema (Prisma)
prisma/schema.prisma
Added Post.viewCount (Int, default 0) and Post.lastViewedAt (DateTime?); extended Enterprise enum with Box_Filial and Cristallux_Filial.
Admin News Page (Client)
src/app/(authenticated)/admin/news/page.tsx
Replaced default Page with client-side NewsManagementPage; added CRUD UI, dialogs, image upload, search/filtering, statistics, access control, and line-break normalization utility.
Content Feed Enhancements
src/components/content-feed.tsx
Normalized line breaks; introduced intersection observer to trigger one-time view increment mutation; adjusted rendering (plain text layout, image sizing); updated placeholders and save behavior.
Admin Routes Config
src/const/admin-routes.ts
Added new admin route entry for “/admin/news” with Newspaper icon and requiresBasicAdmin: true.
Post API Router
src/server/api/routers/post.ts
Added role checks to update/delete; added admin-only listAll; added incrementView endpoint updating viewCount and lastViewedAt; imported RolesConfig.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant U as User
participant CF as ContentFeed (client)
participant IO as IntersectionObserver
participant API as post.incrementView
participant DB as Prisma/Post
U->>CF: Open feed
CF->>IO: Observe PostItem visibility
IO-->>CF: PostItem becomes visible (first time)
CF->>API: mutate({ id })
API->>DB: update viewCount += 1, lastViewedAt = now
DB-->>API: Updated post
API-->>CF: Success
note over CF: Marks view recorded to prevent repeats
Loading
sequenceDiagram
autonumber
participant Admin as Admin/User
participant Page as NewsManagementPage
participant APIU as post.update
participant APID as post.delete
participant ACL as RolesConfig checks
participant DB as Prisma/Post
Admin->>Page: Edit/Delete action
Page->>APIU: update(post) or\nAPID: delete({id})
APIU->>DB: find post
APID->>DB: find post
DB-->>APIU: post|null
DB-->>APID: post|null
alt Not found
APIU-->>Page: NOT_FOUND
APID-->>Page: NOT_FOUND
else Found
APIU->>ACL: is author OR admin?
APID->>ACL: is author OR admin?
alt Forbidden
APIU-->>Page: FORBIDDEN
APID-->>Page: FORBIDDEN
else Allowed
APIU->>DB: update post
APID->>DB: delete post + cleanup image
DB-->>APIU: updated
DB-->>APID: deleted
APIU-->>Page: OK
APID-->>Page: OK
end
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

  • ajustes módulo News #110 — Implements News module fixes: line-break normalization, image handling, admin CRUD page with permissions, and new endpoints including view increments.

Possibly related PRs

Poem

I thump my paws on newsroom floors,
Count views like stars through burrow doors. ✨
New routes mapped, permissions tight,
Posts hop safe by admin light.
Line breaks tidy, images neat—
September’s news is whisker-sweet. 🐇🗞️

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 110-ajustes-modulo-news

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36081bd and 791974e.

📒 Files selected for processing (6)
  • docs/README.md (1 hunks)
  • prisma/schema.prisma (2 hunks)
  • src/app/(authenticated)/admin/news/page.tsx (1 hunks)
  • src/components/content-feed.tsx (10 hunks)
  • src/const/admin-routes.ts (2 hunks)
  • src/server/api/routers/post.ts (4 hunks)

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

❤️ Share

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

@rbxyz
rbxyz merged commit b54a858 into mainSep 22, 2025
4 of 5 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.

ajustes módulo News

1 participant

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

feat: adicionando CRUD das News + ajuste de view - #111

Merged
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news
Sep 22, 2025
Merged

feat: adicionando CRUD das News + ajuste de view#111
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 22, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Added an Admin “Gerenciar News” section with full news management: create/edit, search, filtering, image upload, per-item actions, and statistics (access-restricted).
    • Posts now track views and last viewed time; view count increments when items become visible.
  • Bug Fixes

    • Stronger permission checks for editing/deleting posts, with clear “Acesso Negado” when lacking rights.
    • Improved content formatting (normalized line breaks) and more consistent image sizing/display in feeds.
  • Documentation

    • Updated documentation footer timestamp to “Última atualização: Setembro 2025.”

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

vercelBot commented Sep 22, 2025

Copy link
Copy Markdown

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

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 22, 2025 6:31pm

@coderabbitai

coderabbitaiBot commented Sep 22, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR updates documentation, extends the Prisma schema (post view tracking and Enterprise enum), adds an admin News management page, enhances the content feed with view counting and line-break handling, adds an admin route, and expands the post API with permission checks, admin listing, and a view-increment endpoint.

Changes

Cohort / File(s)Summary of changes
Documentation
docs/README.md
Updated footer timestamp to “Última atualização: Setembro 2025”.
Database Schema (Prisma)
prisma/schema.prisma
Added Post.viewCount (Int, default 0) and Post.lastViewedAt (DateTime?); extended Enterprise enum with Box_Filial and Cristallux_Filial.
Admin News Page (Client)
src/app/(authenticated)/admin/news/page.tsx
Replaced default Page with client-side NewsManagementPage; added CRUD UI, dialogs, image upload, search/filtering, statistics, access control, and line-break normalization utility.
Content Feed Enhancements
src/components/content-feed.tsx
Normalized line breaks; introduced intersection observer to trigger one-time view increment mutation; adjusted rendering (plain text layout, image sizing); updated placeholders and save behavior.
Admin Routes Config
src/const/admin-routes.ts
Added new admin route entry for “/admin/news” with Newspaper icon and requiresBasicAdmin: true.
Post API Router
src/server/api/routers/post.ts
Added role checks to update/delete; added admin-only listAll; added incrementView endpoint updating viewCount and lastViewedAt; imported RolesConfig.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant U as User
participant CF as ContentFeed (client)
participant IO as IntersectionObserver
participant API as post.incrementView
participant DB as Prisma/Post
U->>CF: Open feed
CF->>IO: Observe PostItem visibility
IO-->>CF: PostItem becomes visible (first time)
CF->>API: mutate({ id })
API->>DB: update viewCount += 1, lastViewedAt = now
DB-->>API: Updated post
API-->>CF: Success
note over CF: Marks view recorded to prevent repeats
Loading
sequenceDiagram
autonumber
participant Admin as Admin/User
participant Page as NewsManagementPage
participant APIU as post.update
participant APID as post.delete
participant ACL as RolesConfig checks
participant DB as Prisma/Post
Admin->>Page: Edit/Delete action
Page->>APIU: update(post) or\nAPID: delete({id})
APIU->>DB: find post
APID->>DB: find post
DB-->>APIU: post|null
DB-->>APID: post|null
alt Not found
APIU-->>Page: NOT_FOUND
APID-->>Page: NOT_FOUND
else Found
APIU->>ACL: is author OR admin?
APID->>ACL: is author OR admin?
alt Forbidden
APIU-->>Page: FORBIDDEN
APID-->>Page: FORBIDDEN
else Allowed
APIU->>DB: update post
APID->>DB: delete post + cleanup image
DB-->>APIU: updated
DB-->>APID: deleted
APIU-->>Page: OK
APID-->>Page: OK
end
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

  • ajustes módulo News #110 — Implements News module fixes: line-break normalization, image handling, admin CRUD page with permissions, and new endpoints including view increments.

Possibly related PRs

Poem

I thump my paws on newsroom floors,
Count views like stars through burrow doors. ✨
New routes mapped, permissions tight,
Posts hop safe by admin light.
Line breaks tidy, images neat—
September’s news is whisker-sweet. 🐇🗞️

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 110-ajustes-modulo-news

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36081bd and 791974e.

📒 Files selected for processing (6)
  • docs/README.md (1 hunks)
  • prisma/schema.prisma (2 hunks)
  • src/app/(authenticated)/admin/news/page.tsx (1 hunks)
  • src/components/content-feed.tsx (10 hunks)
  • src/const/admin-routes.ts (2 hunks)
  • src/server/api/routers/post.ts (4 hunks)

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

❤️ Share

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

@rbxyz
rbxyz merged commit b54a858 into mainSep 22, 2025
4 of 5 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.

ajustes módulo News

1 participant

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

feat: adicionando CRUD das News + ajuste de view - #111

Merged
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news
Sep 22, 2025
Merged

feat: adicionando CRUD das News + ajuste de view#111
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 22, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Added an Admin “Gerenciar News” section with full news management: create/edit, search, filtering, image upload, per-item actions, and statistics (access-restricted).
    • Posts now track views and last viewed time; view count increments when items become visible.
  • Bug Fixes

    • Stronger permission checks for editing/deleting posts, with clear “Acesso Negado” when lacking rights.
    • Improved content formatting (normalized line breaks) and more consistent image sizing/display in feeds.
  • Documentation

    • Updated documentation footer timestamp to “Última atualização: Setembro 2025.”

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

vercelBot commented Sep 22, 2025

Copy link
Copy Markdown

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

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 22, 2025 6:31pm

@coderabbitai

coderabbitaiBot commented Sep 22, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR updates documentation, extends the Prisma schema (post view tracking and Enterprise enum), adds an admin News management page, enhances the content feed with view counting and line-break handling, adds an admin route, and expands the post API with permission checks, admin listing, and a view-increment endpoint.

Changes

Cohort / File(s)Summary of changes
Documentation
docs/README.md
Updated footer timestamp to “Última atualização: Setembro 2025”.
Database Schema (Prisma)
prisma/schema.prisma
Added Post.viewCount (Int, default 0) and Post.lastViewedAt (DateTime?); extended Enterprise enum with Box_Filial and Cristallux_Filial.
Admin News Page (Client)
src/app/(authenticated)/admin/news/page.tsx
Replaced default Page with client-side NewsManagementPage; added CRUD UI, dialogs, image upload, search/filtering, statistics, access control, and line-break normalization utility.
Content Feed Enhancements
src/components/content-feed.tsx
Normalized line breaks; introduced intersection observer to trigger one-time view increment mutation; adjusted rendering (plain text layout, image sizing); updated placeholders and save behavior.
Admin Routes Config
src/const/admin-routes.ts
Added new admin route entry for “/admin/news” with Newspaper icon and requiresBasicAdmin: true.
Post API Router
src/server/api/routers/post.ts
Added role checks to update/delete; added admin-only listAll; added incrementView endpoint updating viewCount and lastViewedAt; imported RolesConfig.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant U as User
participant CF as ContentFeed (client)
participant IO as IntersectionObserver
participant API as post.incrementView
participant DB as Prisma/Post
U->>CF: Open feed
CF->>IO: Observe PostItem visibility
IO-->>CF: PostItem becomes visible (first time)
CF->>API: mutate({ id })
API->>DB: update viewCount += 1, lastViewedAt = now
DB-->>API: Updated post
API-->>CF: Success
note over CF: Marks view recorded to prevent repeats
Loading
sequenceDiagram
autonumber
participant Admin as Admin/User
participant Page as NewsManagementPage
participant APIU as post.update
participant APID as post.delete
participant ACL as RolesConfig checks
participant DB as Prisma/Post
Admin->>Page: Edit/Delete action
Page->>APIU: update(post) or\nAPID: delete({id})
APIU->>DB: find post
APID->>DB: find post
DB-->>APIU: post|null
DB-->>APID: post|null
alt Not found
APIU-->>Page: NOT_FOUND
APID-->>Page: NOT_FOUND
else Found
APIU->>ACL: is author OR admin?
APID->>ACL: is author OR admin?
alt Forbidden
APIU-->>Page: FORBIDDEN
APID-->>Page: FORBIDDEN
else Allowed
APIU->>DB: update post
APID->>DB: delete post + cleanup image
DB-->>APIU: updated
DB-->>APID: deleted
APIU-->>Page: OK
APID-->>Page: OK
end
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

  • ajustes módulo News #110 — Implements News module fixes: line-break normalization, image handling, admin CRUD page with permissions, and new endpoints including view increments.

Possibly related PRs

Poem

I thump my paws on newsroom floors,
Count views like stars through burrow doors. ✨
New routes mapped, permissions tight,
Posts hop safe by admin light.
Line breaks tidy, images neat—
September’s news is whisker-sweet. 🐇🗞️

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 110-ajustes-modulo-news

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36081bd and 791974e.

📒 Files selected for processing (6)
  • docs/README.md (1 hunks)
  • prisma/schema.prisma (2 hunks)
  • src/app/(authenticated)/admin/news/page.tsx (1 hunks)
  • src/components/content-feed.tsx (10 hunks)
  • src/const/admin-routes.ts (2 hunks)
  • src/server/api/routers/post.ts (4 hunks)

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

❤️ Share

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

@rbxyz
rbxyz merged commit b54a858 into mainSep 22, 2025
4 of 5 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.

ajustes módulo News

1 participant

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

feat: adicionando CRUD das News + ajuste de view - #111

Merged
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news
Sep 22, 2025
Merged

feat: adicionando CRUD das News + ajuste de view#111
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 22, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Added an Admin “Gerenciar News” section with full news management: create/edit, search, filtering, image upload, per-item actions, and statistics (access-restricted).
    • Posts now track views and last viewed time; view count increments when items become visible.
  • Bug Fixes

    • Stronger permission checks for editing/deleting posts, with clear “Acesso Negado” when lacking rights.
    • Improved content formatting (normalized line breaks) and more consistent image sizing/display in feeds.
  • Documentation

    • Updated documentation footer timestamp to “Última atualização: Setembro 2025.”

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

vercelBot commented Sep 22, 2025

Copy link
Copy Markdown

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

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 22, 2025 6:31pm

@coderabbitai

coderabbitaiBot commented Sep 22, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR updates documentation, extends the Prisma schema (post view tracking and Enterprise enum), adds an admin News management page, enhances the content feed with view counting and line-break handling, adds an admin route, and expands the post API with permission checks, admin listing, and a view-increment endpoint.

Changes

Cohort / File(s)Summary of changes
Documentation
docs/README.md
Updated footer timestamp to “Última atualização: Setembro 2025”.
Database Schema (Prisma)
prisma/schema.prisma
Added Post.viewCount (Int, default 0) and Post.lastViewedAt (DateTime?); extended Enterprise enum with Box_Filial and Cristallux_Filial.
Admin News Page (Client)
src/app/(authenticated)/admin/news/page.tsx
Replaced default Page with client-side NewsManagementPage; added CRUD UI, dialogs, image upload, search/filtering, statistics, access control, and line-break normalization utility.
Content Feed Enhancements
src/components/content-feed.tsx
Normalized line breaks; introduced intersection observer to trigger one-time view increment mutation; adjusted rendering (plain text layout, image sizing); updated placeholders and save behavior.
Admin Routes Config
src/const/admin-routes.ts
Added new admin route entry for “/admin/news” with Newspaper icon and requiresBasicAdmin: true.
Post API Router
src/server/api/routers/post.ts
Added role checks to update/delete; added admin-only listAll; added incrementView endpoint updating viewCount and lastViewedAt; imported RolesConfig.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant U as User
participant CF as ContentFeed (client)
participant IO as IntersectionObserver
participant API as post.incrementView
participant DB as Prisma/Post
U->>CF: Open feed
CF->>IO: Observe PostItem visibility
IO-->>CF: PostItem becomes visible (first time)
CF->>API: mutate({ id })
API->>DB: update viewCount += 1, lastViewedAt = now
DB-->>API: Updated post
API-->>CF: Success
note over CF: Marks view recorded to prevent repeats
Loading
sequenceDiagram
autonumber
participant Admin as Admin/User
participant Page as NewsManagementPage
participant APIU as post.update
participant APID as post.delete
participant ACL as RolesConfig checks
participant DB as Prisma/Post
Admin->>Page: Edit/Delete action
Page->>APIU: update(post) or\nAPID: delete({id})
APIU->>DB: find post
APID->>DB: find post
DB-->>APIU: post|null
DB-->>APID: post|null
alt Not found
APIU-->>Page: NOT_FOUND
APID-->>Page: NOT_FOUND
else Found
APIU->>ACL: is author OR admin?
APID->>ACL: is author OR admin?
alt Forbidden
APIU-->>Page: FORBIDDEN
APID-->>Page: FORBIDDEN
else Allowed
APIU->>DB: update post
APID->>DB: delete post + cleanup image
DB-->>APIU: updated
DB-->>APID: deleted
APIU-->>Page: OK
APID-->>Page: OK
end
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

  • ajustes módulo News #110 — Implements News module fixes: line-break normalization, image handling, admin CRUD page with permissions, and new endpoints including view increments.

Possibly related PRs

Poem

I thump my paws on newsroom floors,
Count views like stars through burrow doors. ✨
New routes mapped, permissions tight,
Posts hop safe by admin light.
Line breaks tidy, images neat—
September’s news is whisker-sweet. 🐇🗞️

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 110-ajustes-modulo-news

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36081bd and 791974e.

📒 Files selected for processing (6)
  • docs/README.md (1 hunks)
  • prisma/schema.prisma (2 hunks)
  • src/app/(authenticated)/admin/news/page.tsx (1 hunks)
  • src/components/content-feed.tsx (10 hunks)
  • src/const/admin-routes.ts (2 hunks)
  • src/server/api/routers/post.ts (4 hunks)

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

❤️ Share

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

@rbxyz
rbxyz merged commit b54a858 into mainSep 22, 2025
4 of 5 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.

ajustes módulo News

1 participant

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

feat: adicionando CRUD das News + ajuste de view - #111

Merged
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news
Sep 22, 2025
Merged

feat: adicionando CRUD das News + ajuste de view#111
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 22, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Added an Admin “Gerenciar News” section with full news management: create/edit, search, filtering, image upload, per-item actions, and statistics (access-restricted).
    • Posts now track views and last viewed time; view count increments when items become visible.
  • Bug Fixes

    • Stronger permission checks for editing/deleting posts, with clear “Acesso Negado” when lacking rights.
    • Improved content formatting (normalized line breaks) and more consistent image sizing/display in feeds.
  • Documentation

    • Updated documentation footer timestamp to “Última atualização: Setembro 2025.”

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

vercelBot commented Sep 22, 2025

Copy link
Copy Markdown

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

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 22, 2025 6:31pm

@coderabbitai

coderabbitaiBot commented Sep 22, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR updates documentation, extends the Prisma schema (post view tracking and Enterprise enum), adds an admin News management page, enhances the content feed with view counting and line-break handling, adds an admin route, and expands the post API with permission checks, admin listing, and a view-increment endpoint.

Changes

Cohort / File(s)Summary of changes
Documentation
docs/README.md
Updated footer timestamp to “Última atualização: Setembro 2025”.
Database Schema (Prisma)
prisma/schema.prisma
Added Post.viewCount (Int, default 0) and Post.lastViewedAt (DateTime?); extended Enterprise enum with Box_Filial and Cristallux_Filial.
Admin News Page (Client)
src/app/(authenticated)/admin/news/page.tsx
Replaced default Page with client-side NewsManagementPage; added CRUD UI, dialogs, image upload, search/filtering, statistics, access control, and line-break normalization utility.
Content Feed Enhancements
src/components/content-feed.tsx
Normalized line breaks; introduced intersection observer to trigger one-time view increment mutation; adjusted rendering (plain text layout, image sizing); updated placeholders and save behavior.
Admin Routes Config
src/const/admin-routes.ts
Added new admin route entry for “/admin/news” with Newspaper icon and requiresBasicAdmin: true.
Post API Router
src/server/api/routers/post.ts
Added role checks to update/delete; added admin-only listAll; added incrementView endpoint updating viewCount and lastViewedAt; imported RolesConfig.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant U as User
participant CF as ContentFeed (client)
participant IO as IntersectionObserver
participant API as post.incrementView
participant DB as Prisma/Post
U->>CF: Open feed
CF->>IO: Observe PostItem visibility
IO-->>CF: PostItem becomes visible (first time)
CF->>API: mutate({ id })
API->>DB: update viewCount += 1, lastViewedAt = now
DB-->>API: Updated post
API-->>CF: Success
note over CF: Marks view recorded to prevent repeats
Loading
sequenceDiagram
autonumber
participant Admin as Admin/User
participant Page as NewsManagementPage
participant APIU as post.update
participant APID as post.delete
participant ACL as RolesConfig checks
participant DB as Prisma/Post
Admin->>Page: Edit/Delete action
Page->>APIU: update(post) or\nAPID: delete({id})
APIU->>DB: find post
APID->>DB: find post
DB-->>APIU: post|null
DB-->>APID: post|null
alt Not found
APIU-->>Page: NOT_FOUND
APID-->>Page: NOT_FOUND
else Found
APIU->>ACL: is author OR admin?
APID->>ACL: is author OR admin?
alt Forbidden
APIU-->>Page: FORBIDDEN
APID-->>Page: FORBIDDEN
else Allowed
APIU->>DB: update post
APID->>DB: delete post + cleanup image
DB-->>APIU: updated
DB-->>APID: deleted
APIU-->>Page: OK
APID-->>Page: OK
end
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

  • ajustes módulo News #110 — Implements News module fixes: line-break normalization, image handling, admin CRUD page with permissions, and new endpoints including view increments.

Possibly related PRs

Poem

I thump my paws on newsroom floors,
Count views like stars through burrow doors. ✨
New routes mapped, permissions tight,
Posts hop safe by admin light.
Line breaks tidy, images neat—
September’s news is whisker-sweet. 🐇🗞️

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 110-ajustes-modulo-news

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36081bd and 791974e.

📒 Files selected for processing (6)
  • docs/README.md (1 hunks)
  • prisma/schema.prisma (2 hunks)
  • src/app/(authenticated)/admin/news/page.tsx (1 hunks)
  • src/components/content-feed.tsx (10 hunks)
  • src/const/admin-routes.ts (2 hunks)
  • src/server/api/routers/post.ts (4 hunks)

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

❤️ Share

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

@rbxyz
rbxyz merged commit b54a858 into mainSep 22, 2025
4 of 5 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.

ajustes módulo News

1 participant

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

feat: adicionando CRUD das News + ajuste de view - #111

Merged
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news
Sep 22, 2025
Merged

feat: adicionando CRUD das News + ajuste de view#111
rbxyz merged 1 commit into
mainfrom
110-ajustes-modulo-news

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 22, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Added an Admin “Gerenciar News” section with full news management: create/edit, search, filtering, image upload, per-item actions, and statistics (access-restricted).
    • Posts now track views and last viewed time; view count increments when items become visible.
  • Bug Fixes

    • Stronger permission checks for editing/deleting posts, with clear “Acesso Negado” when lacking rights.
    • Improved content formatting (normalized line breaks) and more consistent image sizing/display in feeds.
  • Documentation

    • Updated documentation footer timestamp to “Última atualização: Setembro 2025.”

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

vercelBot commented Sep 22, 2025

Copy link
Copy Markdown

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

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 22, 2025 6:31pm

@coderabbitai

coderabbitaiBot commented Sep 22, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR updates documentation, extends the Prisma schema (post view tracking and Enterprise enum), adds an admin News management page, enhances the content feed with view counting and line-break handling, adds an admin route, and expands the post API with permission checks, admin listing, and a view-increment endpoint.

Changes

Cohort / File(s)Summary of changes
Documentation
docs/README.md
Updated footer timestamp to “Última atualização: Setembro 2025”.
Database Schema (Prisma)
prisma/schema.prisma
Added Post.viewCount (Int, default 0) and Post.lastViewedAt (DateTime?); extended Enterprise enum with Box_Filial and Cristallux_Filial.
Admin News Page (Client)
src/app/(authenticated)/admin/news/page.tsx
Replaced default Page with client-side NewsManagementPage; added CRUD UI, dialogs, image upload, search/filtering, statistics, access control, and line-break normalization utility.
Content Feed Enhancements
src/components/content-feed.tsx
Normalized line breaks; introduced intersection observer to trigger one-time view increment mutation; adjusted rendering (plain text layout, image sizing); updated placeholders and save behavior.
Admin Routes Config
src/const/admin-routes.ts
Added new admin route entry for “/admin/news” with Newspaper icon and requiresBasicAdmin: true.
Post API Router
src/server/api/routers/post.ts
Added role checks to update/delete; added admin-only listAll; added incrementView endpoint updating viewCount and lastViewedAt; imported RolesConfig.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant U as User
participant CF as ContentFeed (client)
participant IO as IntersectionObserver
participant API as post.incrementView
participant DB as Prisma/Post
U->>CF: Open feed
CF->>IO: Observe PostItem visibility
IO-->>CF: PostItem becomes visible (first time)
CF->>API: mutate({ id })
API->>DB: update viewCount += 1, lastViewedAt = now
DB-->>API: Updated post
API-->>CF: Success
note over CF: Marks view recorded to prevent repeats
Loading
sequenceDiagram
autonumber
participant Admin as Admin/User
participant Page as NewsManagementPage
participant APIU as post.update
participant APID as post.delete
participant ACL as RolesConfig checks
participant DB as Prisma/Post
Admin->>Page: Edit/Delete action
Page->>APIU: update(post) or\nAPID: delete({id})
APIU->>DB: find post
APID->>DB: find post
DB-->>APIU: post|null
DB-->>APID: post|null
alt Not found
APIU-->>Page: NOT_FOUND
APID-->>Page: NOT_FOUND
else Found
APIU->>ACL: is author OR admin?
APID->>ACL: is author OR admin?
alt Forbidden
APIU-->>Page: FORBIDDEN
APID-->>Page: FORBIDDEN
else Allowed
APIU->>DB: update post
APID->>DB: delete post + cleanup image
DB-->>APIU: updated
DB-->>APID: deleted
APIU-->>Page: OK
APID-->>Page: OK
end
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

  • ajustes módulo News #110 — Implements News module fixes: line-break normalization, image handling, admin CRUD page with permissions, and new endpoints including view increments.

Possibly related PRs

Poem

I thump my paws on newsroom floors,
Count views like stars through burrow doors. ✨
New routes mapped, permissions tight,
Posts hop safe by admin light.
Line breaks tidy, images neat—
September’s news is whisker-sweet. 🐇🗞️

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 110-ajustes-modulo-news

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36081bd and 791974e.

📒 Files selected for processing (6)
  • docs/README.md (1 hunks)
  • prisma/schema.prisma (2 hunks)
  • src/app/(authenticated)/admin/news/page.tsx (1 hunks)
  • src/components/content-feed.tsx (10 hunks)
  • src/const/admin-routes.ts (2 hunks)
  • src/server/api/routers/post.ts (4 hunks)

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

❤️ Share

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

@rbxyz
rbxyz merged commit b54a858 into mainSep 22, 2025
4 of 5 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.

ajustes módulo News

1 participant

@rbxyz