Add folder structure
This commit is contained in:
2
src/app/api/auth/[...nextauth]/route.ts
Normal file
2
src/app/api/auth/[...nextauth]/route.ts
Normal file
@ -0,0 +1,2 @@
|
||||
import { handlers } from "@/auth"
|
||||
export const { GET, POST } = handlers
|
33
src/app/api/image/[...key]/route.ts
Normal file
33
src/app/api/image/[...key]/route.ts
Normal file
@ -0,0 +1,33 @@
|
||||
import { s3 } from "@/lib/s3";
|
||||
import { GetObjectCommand } from "@aws-sdk/client-s3";
|
||||
|
||||
export async function GET(req: Request, { params }: { params: { key: string[] } }) {
|
||||
const { key } = await params;
|
||||
const s3Key = key.join("/");
|
||||
|
||||
try {
|
||||
const command = new GetObjectCommand({
|
||||
Bucket: "gaertan",
|
||||
Key: s3Key,
|
||||
});
|
||||
|
||||
const response = await s3.send(command);
|
||||
|
||||
if (!response.Body) {
|
||||
return new Response("No body", { status: 500 });
|
||||
}
|
||||
|
||||
const contentType = response.ContentType ?? "application/octet-stream";
|
||||
|
||||
return new Response(response.Body as ReadableStream, {
|
||||
headers: {
|
||||
"Content-Type": contentType,
|
||||
"Cache-Control": "public, max-age=3600",
|
||||
"Content-Disposition": "inline", // use 'attachment' to force download
|
||||
},
|
||||
});
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
return new Response("Image not found", { status: 404 });
|
||||
}
|
||||
}
|
5
src/app/commissions/board/page.tsx
Normal file
5
src/app/commissions/board/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function CommissionsBoardPage() {
|
||||
return (
|
||||
<div>CommissionsBoardPage</div>
|
||||
);
|
||||
}
|
5
src/app/commissions/types/[id]/page.tsx
Normal file
5
src/app/commissions/types/[id]/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function CommissionsTypesEditPage() {
|
||||
return (
|
||||
<div>CommissionsTypesEditPage</div>
|
||||
);
|
||||
}
|
5
src/app/commissions/types/new/page.tsx
Normal file
5
src/app/commissions/types/new/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function CommissionsTypesNewPage() {
|
||||
return (
|
||||
<div>CommissionsTypesNewPage</div>
|
||||
);
|
||||
}
|
5
src/app/commissions/types/page.tsx
Normal file
5
src/app/commissions/types/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function CommissionsTypesPage() {
|
||||
return (
|
||||
<div>CommissionsTypesPage</div>
|
||||
);
|
||||
}
|
5
src/app/portfolio/categories/[id]/page.tsx
Normal file
5
src/app/portfolio/categories/[id]/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function PortfolioCategoriesEditPage() {
|
||||
return (
|
||||
<div>PortfolioCategoriesEditPage</div>
|
||||
);
|
||||
}
|
5
src/app/portfolio/categories/new/page.tsx
Normal file
5
src/app/portfolio/categories/new/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function PortfolioCategoriesNewPage() {
|
||||
return (
|
||||
<div>PortfolioCategoriesNewPage</div>
|
||||
);
|
||||
}
|
5
src/app/portfolio/categories/page.tsx
Normal file
5
src/app/portfolio/categories/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function PortfolioCategoriesPage() {
|
||||
return (
|
||||
<div>PortfolioCategoriesPage</div>
|
||||
);
|
||||
}
|
5
src/app/portfolio/images/[id]/page.tsx
Normal file
5
src/app/portfolio/images/[id]/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function PortfolioImagesEditPage() {
|
||||
return (
|
||||
<div>PortfolioImagesEditPage</div>
|
||||
);
|
||||
}
|
5
src/app/portfolio/images/new/page.tsx
Normal file
5
src/app/portfolio/images/new/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function PortfolioImagesNewPage() {
|
||||
return (
|
||||
<div>PortfolioImagesNewPage</div>
|
||||
);
|
||||
}
|
5
src/app/portfolio/images/page.tsx
Normal file
5
src/app/portfolio/images/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function PortfolioImagesPage() {
|
||||
return (
|
||||
<div>PortfolioImagesPage</div>
|
||||
);
|
||||
}
|
5
src/app/portfolio/tags/[id]/page.tsx
Normal file
5
src/app/portfolio/tags/[id]/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function PortfolioTagsEditPage() {
|
||||
return (
|
||||
<div>PortfolioTagsEditPage</div>
|
||||
);
|
||||
}
|
5
src/app/portfolio/tags/new/page.tsx
Normal file
5
src/app/portfolio/tags/new/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function PortfolioTagsNewPage() {
|
||||
return (
|
||||
<div>PortfolioTagsNewPage</div>
|
||||
);
|
||||
}
|
5
src/app/portfolio/tags/page.tsx
Normal file
5
src/app/portfolio/tags/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function PortfolioTagsPage() {
|
||||
return (
|
||||
<div>PortfolioTagsPage</div>
|
||||
);
|
||||
}
|
5
src/app/portfolio/types/[id]/page.tsx
Normal file
5
src/app/portfolio/types/[id]/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function PortfolioTypesEditPage() {
|
||||
return (
|
||||
<div>PortfolioTypesEditPage</div>
|
||||
);
|
||||
}
|
5
src/app/portfolio/types/new/page.tsx
Normal file
5
src/app/portfolio/types/new/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function PortfolioTypesNewPage() {
|
||||
return (
|
||||
<div>PortfolioTypesNewPage</div>
|
||||
);
|
||||
}
|
5
src/app/portfolio/types/page.tsx
Normal file
5
src/app/portfolio/types/page.tsx
Normal file
@ -0,0 +1,5 @@
|
||||
export default function PortfolioTypesPage() {
|
||||
return (
|
||||
<div>PortfolioTypesPage</div>
|
||||
);
|
||||
}
|
@ -16,32 +16,66 @@ export default function TopNav() {
|
||||
<NavigationMenuItem>
|
||||
<NavigationMenuTrigger>Portfolio</NavigationMenuTrigger>
|
||||
<NavigationMenuContent>
|
||||
<ul className="grid gap-2 p-4 w-48">
|
||||
<ul className="grid w-[300px] gap-4">
|
||||
<li>
|
||||
<NavigationMenuLink asChild>
|
||||
<Link href="/portfolio" className="block px-2 py-1 rounded hover:bg-muted">
|
||||
All Portfolio Images
|
||||
<Link href="/portfolio/images">
|
||||
<div className="text-sm leading-none font-medium">Images</div>
|
||||
<p className="text-muted-foreground line-clamp-2 text-sm leading-snug">
|
||||
</p>
|
||||
</Link>
|
||||
</NavigationMenuLink>
|
||||
</li>
|
||||
<li>
|
||||
<NavigationMenuLink asChild>
|
||||
<Link href="/portfolio/arttypes" className="block px-2 py-1 rounded hover:bg-muted">
|
||||
Art Types
|
||||
<Link href="/portfolio/types">
|
||||
<div className="text-sm leading-none font-medium">Types</div>
|
||||
<p className="text-muted-foreground line-clamp-2 text-sm leading-snug">
|
||||
</p>
|
||||
</Link>
|
||||
</NavigationMenuLink>
|
||||
</li>
|
||||
<li>
|
||||
<NavigationMenuLink asChild>
|
||||
<Link href="/portfolio/categories" className="block px-2 py-1 rounded hover:bg-muted">
|
||||
Categories
|
||||
<Link href="/portfolio/categories">
|
||||
<div className="text-sm leading-none font-medium">Categories</div>
|
||||
<p className="text-muted-foreground line-clamp-2 text-sm leading-snug">
|
||||
</p>
|
||||
</Link>
|
||||
</NavigationMenuLink>
|
||||
</li>
|
||||
<li>
|
||||
<NavigationMenuLink asChild>
|
||||
<Link href="/portfolio/tags" className="block px-2 py-1 rounded hover:bg-muted">
|
||||
Tags
|
||||
<Link href="/portfolio/tags">
|
||||
<div className="text-sm leading-none font-medium">Tags</div>
|
||||
<p className="text-muted-foreground line-clamp-2 text-sm leading-snug">
|
||||
</p>
|
||||
</Link>
|
||||
</NavigationMenuLink>
|
||||
</li>
|
||||
</ul>
|
||||
</NavigationMenuContent>
|
||||
</NavigationMenuItem>
|
||||
|
||||
<NavigationMenuItem>
|
||||
<NavigationMenuTrigger>Commissions</NavigationMenuTrigger>
|
||||
<NavigationMenuContent>
|
||||
<ul className="grid w-[300px] gap-4">
|
||||
<li>
|
||||
<NavigationMenuLink asChild>
|
||||
<Link href="/commissions/types">
|
||||
<div className="text-sm leading-none font-medium">Types</div>
|
||||
<p className="text-muted-foreground line-clamp-2 text-sm leading-snug">
|
||||
</p>
|
||||
</Link>
|
||||
</NavigationMenuLink>
|
||||
</li>
|
||||
<li>
|
||||
<NavigationMenuLink asChild>
|
||||
<Link href="/commissions/board">
|
||||
<div className="text-sm leading-none font-medium">Board</div>
|
||||
<p className="text-muted-foreground line-clamp-2 text-sm leading-snug">
|
||||
</p>
|
||||
</Link>
|
||||
</NavigationMenuLink>
|
||||
</li>
|
||||
@ -49,11 +83,6 @@ export default function TopNav() {
|
||||
</NavigationMenuContent>
|
||||
</NavigationMenuItem>
|
||||
|
||||
<NavigationMenuItem>
|
||||
<NavigationMenuLink asChild className={navigationMenuTriggerStyle()}>
|
||||
<Link href="/items/commissions/types">CommissionTypes</Link>
|
||||
</NavigationMenuLink>
|
||||
</NavigationMenuItem>
|
||||
<NavigationMenuItem>
|
||||
<NavigationMenuLink asChild className={navigationMenuTriggerStyle()}>
|
||||
<Link href="/items/commissions/tos">ToS</Link>
|
||||
|
Reference in New Issue
Block a user