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