post/[id]: move function to new file to avoid invalid-segment-export
This commit is contained in:
parent
b848aa9e40
commit
604f5d64d0
3 changed files with 68 additions and 67 deletions
66
src/app/(posts)/post/[id]/get-post.tsx
Normal file
66
src/app/(posts)/post/[id]/get-post.tsx
Normal file
|
@ -0,0 +1,66 @@
|
|||
import { getPostById } from "@lib/server/prisma"
|
||||
import { getCurrentUser } from "@lib/server/session"
|
||||
import { notFound, redirect } from "next/navigation"
|
||||
import { cache } from "react"
|
||||
|
||||
export const getPost = cache(async (id: string) => {
|
||||
const post = await getPostById(id, {
|
||||
select: {
|
||||
visibility: true,
|
||||
authorId: true,
|
||||
title: true,
|
||||
description: true,
|
||||
id: true,
|
||||
createdAt: true,
|
||||
expiresAt: true,
|
||||
parentId: true,
|
||||
author: {
|
||||
select: {
|
||||
displayName: true,
|
||||
image: true
|
||||
}
|
||||
},
|
||||
files: {
|
||||
select: {
|
||||
id: true,
|
||||
content: true,
|
||||
updatedAt: true,
|
||||
title: true,
|
||||
html: true
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if (!post) {
|
||||
return notFound()
|
||||
}
|
||||
|
||||
if (post.expiresAt && new Date(post.expiresAt) < new Date()) {
|
||||
return redirect("/expired")
|
||||
}
|
||||
|
||||
if (post.visibility === "public" || post.visibility === "unlisted") {
|
||||
return { post }
|
||||
}
|
||||
|
||||
if (post.visibility === "private") {
|
||||
const user = await getCurrentUser()
|
||||
if (user?.id === post.authorId || user?.role === "admin") {
|
||||
return { post }
|
||||
}
|
||||
return redirect("/new")
|
||||
}
|
||||
|
||||
if (post.visibility === "protected") {
|
||||
return {
|
||||
post: {
|
||||
visibility: "protected",
|
||||
authorId: post.authorId,
|
||||
id: post.id
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return { post }
|
||||
})
|
|
@ -4,7 +4,7 @@ import { title } from "process"
|
|||
import { PostButtons } from "./components/header/post-buttons"
|
||||
import styles from "./layout.module.css"
|
||||
import { PostTitle } from "./components/header/title"
|
||||
import { getPost } from "./page"
|
||||
import { getPost } from "./get-post"
|
||||
|
||||
export default async function PostLayout({
|
||||
children,
|
||||
|
|
|
@ -1,71 +1,6 @@
|
|||
import VisibilityControl from "@components/badges/visibility-control"
|
||||
import { getPostById } from "@lib/server/prisma"
|
||||
import { getCurrentUser } from "@lib/server/session"
|
||||
import { notFound, redirect } from "next/navigation"
|
||||
import { cache } from "react"
|
||||
import PostFiles from "./components/post-files"
|
||||
|
||||
export const getPost = cache(async (id: string) => {
|
||||
const post = await getPostById(id, {
|
||||
select: {
|
||||
visibility: true,
|
||||
authorId: true,
|
||||
title: true,
|
||||
description: true,
|
||||
id: true,
|
||||
createdAt: true,
|
||||
expiresAt: true,
|
||||
parentId: true,
|
||||
author: {
|
||||
select: {
|
||||
displayName: true,
|
||||
image: true
|
||||
}
|
||||
},
|
||||
files: {
|
||||
select: {
|
||||
id: true,
|
||||
content: true,
|
||||
updatedAt: true,
|
||||
title: true,
|
||||
html: true
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if (!post) {
|
||||
return notFound()
|
||||
}
|
||||
|
||||
if (post.expiresAt && new Date(post.expiresAt) < new Date()) {
|
||||
return redirect("/expired")
|
||||
}
|
||||
|
||||
if (post.visibility === "public" || post.visibility === "unlisted") {
|
||||
return { post }
|
||||
}
|
||||
|
||||
if (post.visibility === "private") {
|
||||
const user = await getCurrentUser()
|
||||
if (user?.id === post.authorId || user.role === "admin") {
|
||||
return { post }
|
||||
}
|
||||
return redirect("/new")
|
||||
}
|
||||
|
||||
if (post.visibility === "protected") {
|
||||
return {
|
||||
post: {
|
||||
visibility: "protected",
|
||||
authorId: post.authorId,
|
||||
id: post.id
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return { post }
|
||||
})
|
||||
import { getPost } from "./get-post"
|
||||
|
||||
export default async function PostPage({
|
||||
params
|
||||
|
|
Loading…
Reference in a new issue