mirror of
https://github.com/D4M13N-D3V/neroshitron.git
synced 2025-03-14 10:05:04 +00:00
fix:supabase+tags+changed data models+seeded data
This commit is contained in:
parent
82efd1f10e
commit
a48488a128
@ -1,3 +1,2 @@
|
||||
NEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54323
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE
|
||||
NEXT_PUBLIC_
|
||||
NEXT_PUBLIC_SUPABASE_URL=http://localhost:54321
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE
|
2
.env
2
.env
@ -1,2 +1,2 @@
|
||||
NEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54323
|
||||
NEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54321
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0
|
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@ -5,6 +5,6 @@
|
||||
"deno.lint": true,
|
||||
"deno.unstable": true,
|
||||
"[typescript]": {
|
||||
"editor.defaultFormatter": "denoland.vscode-deno"
|
||||
"editor.defaultFormatter": "vscode.typescript-language-features"
|
||||
}
|
||||
}
|
||||
|
23
README.md
23
README.md
@ -7,7 +7,6 @@
|
||||
- https://nextjs.org/docs
|
||||
- https://supabase.com/docs/
|
||||
- https://owncast.online/docs/
|
||||
- https://docs.npmjs.com/downloading-and-installing-node-js-and-npm
|
||||
- https://docs.docker.com/engine/install/
|
||||
|
||||
# Running Backend
|
||||
@ -17,34 +16,30 @@ You will need docker installed.
|
||||
You will need supabase CLI.
|
||||
- https://docs.docker.com/engine/install/
|
||||
|
||||
You need npm and nodejs installed. See documentation at start of document.
|
||||
- https://docs.npmjs.com/downloading-and-installing-node-js-and-npm
|
||||
|
||||
1) Open your terminal and navigate to the root of the git repository.
|
||||
2) Make sure that docker and docker compose are installed.
|
||||
3) Run `docker-compose --env-file ./docker.env up` which will start up OwnCast.
|
||||
4) Run `supabase start`
|
||||
5) Open your terminal and navigate to the root folder of the git repository.
|
||||
6) Run the command `npm update`.
|
||||
7) Once the depedencies are pulled and installed you can run the command `npm run dev` to run the application in development mode.
|
||||
8) Open http://localhost:3000/
|
||||
|
||||
### Updating the database
|
||||
Run `supabase db reset`. This will wipe data.
|
||||
https://supabase.com/docs/guides/cli/local-development?queryGroups=access-method&access-method=kong#database-migrations
|
||||
|
||||
## inbucket
|
||||
http://localhost:54324/monitor
|
||||
http://localhost:54324su/monitor
|
||||
This is where all mail being sent shows up from the application for developers.
|
||||
|
||||
## OwnCast
|
||||
http://localhost:8080/
|
||||
Configuration is done through the Owncast administration page located on your server under /admin. The login username is admin and the password is your stream key, the default being abc123.
|
||||
|
||||
# Running UI
|
||||
You need npm and nodejs installed. See documentation at start of document.
|
||||
1) Open your terminal and navigate to the root folder of the git repository.
|
||||
2) Run the command `npm update`.
|
||||
3) Once the depedencies are pulled and installed you can run the command `npm run dev` to run the application in development mode.
|
||||
4) Open http://localhost:3000/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# React Components
|
||||
@ -89,5 +84,5 @@ The `GalleryThumbnail` component is a React component used to display a thumbnai
|
||||
### Usage
|
||||
This will render a thumbnail for the gallery with the ID of "1". When the thumbnail is clicked, it will log the gallery ID to the console.
|
||||
```tsx
|
||||
<GalleryThumbnail id="1" onSelect={(id) => console.log(id)} />
|
||||
<GalleryThumbnail id="1" onSelect={(id) => //console.log(id)} />
|
||||
```
|
||||
|
@ -8,11 +8,16 @@ export async function GET(
|
||||
const galleryId = params.id;
|
||||
const supabase = createClient();
|
||||
|
||||
const { data: gallery, error: galleryError } = await supabase
|
||||
.from('galleries')
|
||||
.select('*')
|
||||
.eq('name', galleryId)
|
||||
.single();
|
||||
// List all files in the galleryId path
|
||||
let { data: files, error } = await supabase.storage.from('galleries').list(galleryId);
|
||||
let { data: files, error } = await supabase.storage.from('galleries').list(gallery.name);
|
||||
|
||||
if (files==null || error) {
|
||||
console.error('Error listing files:', error);
|
||||
//console.error('Error listing files:', error);
|
||||
return NextResponse.error();
|
||||
}
|
||||
|
||||
|
@ -17,22 +17,22 @@ export async function GET(
|
||||
request: Request,
|
||||
{ params }: { params: { id: string } }
|
||||
) {
|
||||
const galleryId = params.id;
|
||||
const supabase = createClient();
|
||||
|
||||
const galleryId = params.id.toLowerCase().replace(/\s+/g, '_'); const supabase = createClient();
|
||||
const user = await supabase.auth.getUser();
|
||||
|
||||
|
||||
const { data: gallery, error: galleryError } = await supabase
|
||||
.from('galleries')
|
||||
.select('*')
|
||||
.eq('id', galleryId)
|
||||
.eq('name', params.id)
|
||||
.single();
|
||||
|
||||
// List all files in the galleryId path
|
||||
// List all files in the params.id path
|
||||
let { data: files, error } = await supabase.storage.from('galleries').list(galleryId);
|
||||
|
||||
if (files==null || error) {
|
||||
console.error('Error listing files:', error);
|
||||
//console.error('Error listing files:', error);
|
||||
return NextResponse.error();
|
||||
}
|
||||
|
||||
@ -43,7 +43,7 @@ export async function GET(
|
||||
let { data: blobdata, error } = await supabase.storage.from('galleries').download(galleryId+"/"+file.name);
|
||||
|
||||
if (error || blobdata==null) {
|
||||
console.error('Error downloading file:', error);
|
||||
//console.error('Error downloading file:', error);
|
||||
continue;
|
||||
}
|
||||
let blobBuffer = Buffer.from(await blobdata.arrayBuffer());
|
||||
|
@ -1,6 +1,5 @@
|
||||
import { NextResponse } from "next/server";
|
||||
import { createClient } from "@/utils/supabase/server";
|
||||
|
||||
import sharp from 'sharp';
|
||||
|
||||
|
||||
@ -13,63 +12,66 @@ async function blurImage(blob: Buffer): Promise<Buffer> {
|
||||
|
||||
return blurredImage;
|
||||
}
|
||||
|
||||
export async function GET(
|
||||
request: Request,
|
||||
{ params }: { params: { id: string } }
|
||||
) {
|
||||
const galleryId= params.id // 312
|
||||
request: Request,
|
||||
{ params }: { params: { id: string } }
|
||||
) {
|
||||
const galleryId = params.id.toLowerCase().replace(/\s+/g, '_');
|
||||
const supabase = createClient();
|
||||
const user = await supabase.auth.getUser();
|
||||
|
||||
|
||||
const { data: gallery, error: galleryError } = await supabase
|
||||
.from('galleries')
|
||||
.select('*')
|
||||
.eq('id', galleryId)
|
||||
.eq('name', params.id)
|
||||
.single();
|
||||
let userId = user.data.user?.id;
|
||||
let { data: subscription, error: rolesError } = await supabase
|
||||
|
||||
let { data: files, error } = await supabase.storage.from('galleries').list(galleryId);
|
||||
if (files == null || files?.length == 0) {
|
||||
|
||||
return NextResponse.error();
|
||||
}
|
||||
|
||||
// Loop through each file, download it, convert it to base64, and add the data URL to the array
|
||||
let { data: blobdata, error: fileError } = await supabase.storage.from('galleries').download(galleryId + "/" + files[0].name);
|
||||
|
||||
if (fileError || blobdata == null) {
|
||||
//console.error('Error downloading file:', error);
|
||||
return NextResponse.error();
|
||||
}
|
||||
let blobBuffer = Buffer.from(await blobdata.arrayBuffer());
|
||||
|
||||
let userId = user.data.user?.id;
|
||||
let { data: subscription, error: rolesError } = await supabase
|
||||
.from('user_subscriptions')
|
||||
.select('*')
|
||||
.eq('user_id', userId)
|
||||
.single();
|
||||
switch (gallery.tier) {
|
||||
case "Tier 3":
|
||||
if (subscription?.subscription != "Tier 3") {
|
||||
blobBuffer = await blurImage(blobBuffer);
|
||||
}
|
||||
break;
|
||||
case "Tier 2":
|
||||
if (subscription?.subscription != "Tier 3" && subscription?.subscription != "Tier 2") {
|
||||
blobBuffer = await blurImage(blobBuffer);
|
||||
}
|
||||
break;
|
||||
case "Tier 1":
|
||||
if (subscription?.subscription != "Tier 3" && subscription?.subscription != "Tier 2" && subscription?.subscription != "Tier 1") {
|
||||
blobBuffer = await blurImage(blobBuffer);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
const contentType = files[0].name.endsWith('.png') ? 'image/png' : 'image/jpeg';
|
||||
const dataUrl = `data:${contentType};base64,${blobBuffer.toString('base64')}`;
|
||||
|
||||
// Extract galleryId from the route value
|
||||
var blob = null;
|
||||
var contentType = "image/jpeg"
|
||||
let { data: blobdata, error } = await supabase.storage.from('galleries').download(galleryId+'/1.jpeg')
|
||||
blob = blobdata;
|
||||
if (error) {
|
||||
contentType = "image/png"
|
||||
let { data: blobdata, error } = await supabase.storage.from('galleries').download(galleryId+'/1.png')
|
||||
console.log(error)
|
||||
blob = blobdata;
|
||||
}
|
||||
if(blob != null){
|
||||
let blobBuffer = Buffer.from(await blob.arrayBuffer());
|
||||
switch(gallery.tier){
|
||||
case "Tier 3":
|
||||
if(subscription?.subscription!="Tier 3"){
|
||||
blobBuffer = await blurImage(blobBuffer);
|
||||
}
|
||||
break;
|
||||
case "Tier 2":
|
||||
if(subscription?.subscription!="Tier 3" && subscription?.subscription!="Tier 2"){
|
||||
blobBuffer = await blurImage(blobBuffer);
|
||||
}
|
||||
break;
|
||||
case "Tier 1":
|
||||
if(subscription?.subscription!="Tier 3" && subscription?.subscription!="Tier 2" && subscription?.subscription!="Tier 1"){
|
||||
blobBuffer = await blurImage(blobBuffer);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if(gallery.nsfw){
|
||||
blobBuffer = await blurImage(blobBuffer);
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
const dataUrl = `data:${contentType};base64,${blobBuffer.toString('base64')}`;
|
||||
return new Response(dataUrl);
|
||||
}
|
||||
return NextResponse.error();
|
||||
|
||||
// Return a JSON response with the array of URLs
|
||||
return new Response(dataUrl);
|
||||
}
|
@ -7,34 +7,32 @@ export async function POST(request: Request) {
|
||||
const url = new URL(request.url);
|
||||
const search = url.searchParams.get("search");
|
||||
const data = await request.json();
|
||||
const tags = data.tags;
|
||||
const tags = data.tags as string[];
|
||||
if(tags.length === 0){
|
||||
let { data: galleries, error } = await supabase
|
||||
.from('galleries')
|
||||
.select('*')
|
||||
.ilike('name', `%${search}%`)
|
||||
.ilike('description', `%${search}%`);
|
||||
|
||||
//console.log(error)
|
||||
return NextResponse.json(galleries);
|
||||
}
|
||||
else{
|
||||
// Rest of the code...
|
||||
console.log(tags)
|
||||
let { data: galleries, error } = await supabase
|
||||
.from('galleries')
|
||||
.select('*')
|
||||
.contains('tags', tags)
|
||||
.contains('tags', tags) // Fix: Use contains instead of overlaps
|
||||
.ilike('name', `%${search}%`)
|
||||
.ilike('description', `%${search}%`)
|
||||
.order('created_at', { ascending: false });
|
||||
//console.log(error)
|
||||
|
||||
return NextResponse.json(galleries);
|
||||
return NextResponse.json(galleries);
|
||||
}
|
||||
}
|
||||
|
||||
// const tagsResponse = await fetch(`/api/galleries/tags?search=${search}`);
|
||||
// const tagsData = await tagsResponse.json();
|
||||
// const galleriesWithTagData = galleriesData.map((gallery: any) => {
|
||||
// const tags = tagsData.filter((tag: any) => gallery.tags.includes(tag.id));
|
||||
// const tags = tagsData.filter((tag: any) => gallery.tags.includes(tag.name));
|
||||
// return { ...gallery, tags };
|
||||
// });
|
@ -54,7 +54,7 @@ function PageComponent() {
|
||||
},
|
||||
body: JSON.stringify({ tags:selectedTags })
|
||||
});
|
||||
console.log(galleriesResponse)
|
||||
//console.log(galleriesResponse)
|
||||
const galleriesData = await galleriesResponse.json();
|
||||
const tagsResponse = await fetch(`/api/galleries/tags`);
|
||||
const tagsData = await tagsResponse.json();
|
||||
@ -74,95 +74,92 @@ function PageComponent() {
|
||||
} else {
|
||||
setSelectedTags([...selectedTags, tag]);
|
||||
}
|
||||
console.log(selectedTags)
|
||||
//console.log(selectedTags)
|
||||
};
|
||||
|
||||
return (
|
||||
user ? (
|
||||
<div className="w-full h-full flex justify-center ">
|
||||
<div className="flex-1 w-full h-full flex flex-col gap-20">
|
||||
<>
|
||||
<div className="absolute pl-8 w-2/4 left-1/2 h-full overflow-hidden z-20 animate-in animate-duration-3000 animate-ease-out">
|
||||
<section className="neroshi-blue-900 h-50 p-8 pt-20 opacity-30 hover:opacity-100">
|
||||
<div className="container mx-auto py-8">
|
||||
<input
|
||||
className="w-full text-neroshi-blue-950 h-16 px-3 rounded mb-8 focus:outline-none focus:shadow-outline text-xl px-8 shadow-lg"
|
||||
type="search"
|
||||
placeholder="Search..."
|
||||
onChange={(e) => setSearch(e.target.value)}
|
||||
/>
|
||||
<nav className="grid grid-cols-4 gap-4">
|
||||
{tags.map((tag, index) => (
|
||||
<a
|
||||
key={index}
|
||||
className={`rounded-lg no-underline text-white py-3 px-4 font-medium text-center ${
|
||||
selectedTags.includes(tag.id) ? 'bg-neroshi-blue-950 hover:bg-neroshi-blue-900' : 'bg-neroshi-blue-800 hover:bg-neroshi-blue-700'
|
||||
}`}
|
||||
href="#"
|
||||
onClick={() => handleTagClick(tag.id)}
|
||||
>
|
||||
{tag.name}
|
||||
</a>
|
||||
))}
|
||||
</nav>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div className="absolute w-full h-full overflow-hidden z-0 animate-fade-left animate-fade-left animate-once animate-duration-[2000ms] animate-normal animate-fill-forwards">
|
||||
<img
|
||||
src="gallery_girl.png"
|
||||
className="float-right object-cover h-screen w-3/6 opacity-50 overflow-hidden"
|
||||
alt="Background"
|
||||
|
||||
<div className="w-full h-full flex justify-center ">
|
||||
<div className="flex-1 w-full h-full flex flex-col gap-20">
|
||||
<>
|
||||
<div className="absolute pl-8 w-2/4 left-1/2 h-full overflow-hidden z-20 animate-in animate-duration-3000 animate-ease-out">
|
||||
<section className="neroshi-blue-900 h-50 p-8 pt-20 opacity-30 hover:opacity-100">
|
||||
<div className="container mx-auto py-8">
|
||||
<input
|
||||
className="w-full text-neroshi-blue-950 h-16 px-3 rounded mb-8 focus:outline-none focus:shadow-outline text-xl px-8 shadow-lg"
|
||||
type="search"
|
||||
placeholder="Search..."
|
||||
onChange={(e) => setSearch(e.target.value)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="absolute items-center w-2/4 h-full ml-10 z-0 overflow-hidden animate-in animate-ease-out">
|
||||
<div className="grid grid-cols-3 gap-y-52 gap-x-5 h-full overflow-y-auto no-scrollbar pt-20">
|
||||
{galleries && galleries.map((gallery, index) => (
|
||||
<GalleryThumbnail
|
||||
key={gallery.id}
|
||||
id={gallery.id}
|
||||
title={gallery.name}
|
||||
tags = {gallery.tags}
|
||||
columns={gallery.columns}
|
||||
subscription={gallery.tier as string}
|
||||
onSelect={selectGallery}
|
||||
nsfw={gallery.nsfw}
|
||||
></GalleryThumbnail>
|
||||
<nav className="grid grid-cols-4 gap-4">
|
||||
{tags.map((tag, index) => (
|
||||
<a
|
||||
key={index}
|
||||
className={`rounded-lg no-underline text-white py-3 px-4 font-medium text-center ${
|
||||
selectedTags.includes(tag.name) ? 'bg-neroshi-blue-950 hover:bg-neroshi-blue-900' : 'bg-neroshi-blue-800 hover:bg-neroshi-blue-700'
|
||||
}`}
|
||||
href="#"
|
||||
onClick={() => handleTagClick(tag.name)}
|
||||
>
|
||||
{tag.name}
|
||||
</a>
|
||||
))}
|
||||
<div className="pt-10"></div>
|
||||
<div className="pt-10"></div>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</>
|
||||
</section>
|
||||
</div>
|
||||
{isOpen ? (
|
||||
<>
|
||||
<div
|
||||
className={`fixed inset-0 transition-opacity z-30 ${
|
||||
isOpen ? "animate-in" : "fade-out"
|
||||
}`}
|
||||
aria-hidden="true"
|
||||
>
|
||||
<div
|
||||
className="absolute inset-0 bg-neroshi-blue-900 opacity-70 z-30"
|
||||
onClick={() => setIsOpen(false)}
|
||||
></div>
|
||||
<div className="absolute inset-0 overflow-y-auto overflow-x-hidden no-scrollbar pt-2 w-full p-20 z-30">
|
||||
<Gallery
|
||||
id={selectedGallery as string}
|
||||
columns={galleryColumns}
|
||||
closeMenu={() => closeGallery()}
|
||||
></Gallery>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
) : null}
|
||||
</div>
|
||||
) : (
|
||||
<h1>loading</h1>
|
||||
)
|
||||
|
||||
<div className="absolute w-full h-full overflow-hidden z-0 animate-fade-left animate-fade-left animate-once animate-duration-[2000ms] animate-normal animate-fill-forwards">
|
||||
<img
|
||||
src="gallery_girl.png"
|
||||
className="float-right object-cover h-screen w-3/6 opacity-50 overflow-hidden"
|
||||
alt="Background"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="absolute items-center w-2/4 h-full ml-10 z-0 overflow-hidden animate-in animate-ease-out">
|
||||
<div className="grid grid-cols-3 gap-y-52 gap-x-5 h-full overflow-y-auto no-scrollbar pt-20">
|
||||
{galleries && galleries.map((gallery, index) => (
|
||||
<GalleryThumbnail
|
||||
key={gallery.id}
|
||||
id={gallery.name}
|
||||
title={gallery.name}
|
||||
tags = {gallery.tags}
|
||||
columns={gallery.columns}
|
||||
subscription={gallery.tier as string}
|
||||
onSelect={selectGallery}
|
||||
nsfw={gallery.nsfw}
|
||||
></GalleryThumbnail>
|
||||
))}
|
||||
<div className="pt-10"></div>
|
||||
<div className="pt-10"></div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
</div>
|
||||
{isOpen ? (
|
||||
<>
|
||||
<div
|
||||
className={`fixed inset-0 transition-opacity z-30 ${
|
||||
isOpen ? "animate-in" : "fade-out"
|
||||
}`}
|
||||
aria-hidden="true"
|
||||
>
|
||||
<div
|
||||
className="absolute inset-0 bg-neroshi-blue-900 opacity-70 z-30"
|
||||
onClick={() => setIsOpen(false)}
|
||||
></div>
|
||||
<div className="absolute inset-0 overflow-y-auto overflow-x-hidden no-scrollbar pt-2 w-full p-20 z-30">
|
||||
<Gallery
|
||||
id={selectedGallery as string}
|
||||
columns={galleryColumns}
|
||||
closeMenu={() => closeGallery()}
|
||||
></Gallery>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
) : null}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -30,8 +30,8 @@ export default async function Login({
|
||||
password,
|
||||
});
|
||||
|
||||
//console.log(error);
|
||||
if (error) {
|
||||
console.log(data);
|
||||
return redirect("/login?message=Could not authenticate user");
|
||||
}
|
||||
|
||||
@ -54,6 +54,7 @@ export default async function Login({
|
||||
},
|
||||
});
|
||||
|
||||
//console.log(error);
|
||||
if (error) {
|
||||
return redirect("/login?message=Could not authenticate user");
|
||||
}
|
||||
|
@ -130,7 +130,7 @@ const Gallery = ({ id, columns, closeMenu }: GalleryProps) => {
|
||||
|
||||
const open = () => {
|
||||
if (selectedImage === null) return;
|
||||
console.log(selectedImage)
|
||||
//console.log(selectedImage)
|
||||
let base64Image = selectedImage.split(';base64,').pop();
|
||||
if (!base64Image) return;
|
||||
let blob = new Blob([Uint8Array.from(atob(base64Image), c => c.charCodeAt(0))], { type: 'image/jpeg' }); // adjust the type as needed
|
||||
|
@ -25,9 +25,9 @@ const GalleryThumbnail = ({ id, columns, onSelect, title,nsfw, subscription, tag
|
||||
|
||||
const getData = async () => {
|
||||
setIsLoading(true);
|
||||
const thumbnailResponse = await fetch('/api/galleries/' + galleryId + '/thumbnail');
|
||||
const thumbnailResponse = await fetch('/api/galleries/' + title + '/thumbnail');
|
||||
const thumbnailUrl = await thumbnailResponse.text();
|
||||
const imagesCountResponse = await fetch('/api/galleries/' + galleryId + '/images/count');
|
||||
const imagesCountResponse = await fetch('/api/galleries/' + title + '/images/count');
|
||||
const imageCount = await imagesCountResponse.json() as number;
|
||||
setImageCount(imageCount);
|
||||
setThumbnailUrl(thumbnailUrl);
|
||||
|
@ -22,6 +22,11 @@ SET row_security = off;
|
||||
-- Data for Name: audit_log_entries; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin
|
||||
--
|
||||
|
||||
INSERT INTO "auth"."audit_log_entries" ("instance_id", "id", "payload", "created_at", "ip_address") VALUES
|
||||
('00000000-0000-0000-0000-000000000000', 'd337a17f-a756-46eb-a0e8-8ef80fd0510d', '{"action":"user_signedup","actor_id":"893c7701-d5df-4415-80bd-1ec089764400","actor_username":"damienostler1@outlook.com","actor_via_sso":false,"log_type":"team","traits":{"provider":"email"}}', '2024-05-27 14:10:29.638476+00', ''),
|
||||
('00000000-0000-0000-0000-000000000000', 'd3e71df0-114a-4490-aeeb-6f92c45bad74', '{"action":"login","actor_id":"893c7701-d5df-4415-80bd-1ec089764400","actor_username":"damienostler1@outlook.com","actor_via_sso":false,"log_type":"account","traits":{"provider":"email"}}', '2024-05-27 14:10:29.64088+00', ''),
|
||||
('00000000-0000-0000-0000-000000000000', '1eab1cf3-5656-42c2-9e0b-796222de0c55', '{"action":"logout","actor_id":"893c7701-d5df-4415-80bd-1ec089764400","actor_username":"damienostler1@outlook.com","actor_via_sso":false,"log_type":"account"}', '2024-05-27 14:15:04.733941+00', ''),
|
||||
('00000000-0000-0000-0000-000000000000', '410c5c63-cba5-442a-a6bb-157acc0bd370', '{"action":"login","actor_id":"893c7701-d5df-4415-80bd-1ec089764400","actor_username":"damienostler1@outlook.com","actor_via_sso":false,"log_type":"account","traits":{"provider":"email"}}', '2024-05-27 14:34:43.53365+00', '');
|
||||
|
||||
|
||||
--
|
||||
@ -34,12 +39,16 @@ SET row_security = off;
|
||||
-- Data for Name: users; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin
|
||||
--
|
||||
|
||||
INSERT INTO "auth"."users" ("instance_id", "id", "aud", "role", "email", "encrypted_password", "email_confirmed_at", "invited_at", "confirmation_token", "confirmation_sent_at", "recovery_token", "recovery_sent_at", "email_change_token_new", "email_change", "email_change_sent_at", "last_sign_in_at", "raw_app_meta_data", "raw_user_meta_data", "is_super_admin", "created_at", "updated_at", "phone", "phone_confirmed_at", "phone_change", "phone_change_token", "phone_change_sent_at", "email_change_token_current", "email_change_confirm_status", "banned_until", "reauthentication_token", "reauthentication_sent_at", "is_sso_user", "deleted_at", "is_anonymous") VALUES
|
||||
('00000000-0000-0000-0000-000000000000', '893c7701-d5df-4415-80bd-1ec089764400', 'authenticated', 'authenticated', 'damienostler1@outlook.com', '$2a$10$ISYdoWsKL7gxfRz7c5IKDOTsmcjNpGgg9OOApYLMOvtOoNTo4HGM6', '2024-05-27 14:10:29.639017+00', NULL, '', NULL, '', NULL, '', '', NULL, '2024-05-27 14:34:43.534227+00', '{"provider": "email", "providers": ["email"]}', '{"sub": "893c7701-d5df-4415-80bd-1ec089764400", "email": "damienostler1@outlook.com", "email_verified": false, "phone_verified": false}', NULL, '2024-05-27 14:10:29.634157+00', '2024-05-27 14:34:43.535377+00', NULL, NULL, '', '', NULL, '', 0, NULL, '', NULL, false, NULL, false);
|
||||
|
||||
|
||||
--
|
||||
-- Data for Name: identities; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin
|
||||
--
|
||||
|
||||
INSERT INTO "auth"."identities" ("provider_id", "user_id", "identity_data", "provider", "last_sign_in_at", "created_at", "updated_at", "id") VALUES
|
||||
('893c7701-d5df-4415-80bd-1ec089764400', '893c7701-d5df-4415-80bd-1ec089764400', '{"sub": "893c7701-d5df-4415-80bd-1ec089764400", "email": "damienostler1@outlook.com", "email_verified": false, "phone_verified": false}', 'email', '2024-05-27 14:10:29.636992+00', '2024-05-27 14:10:29.637013+00', '2024-05-27 14:10:29.637013+00', 'b823bde7-9eae-4e1f-8253-75f12f0f06f2');
|
||||
|
||||
|
||||
--
|
||||
@ -52,12 +61,16 @@ SET row_security = off;
|
||||
-- Data for Name: sessions; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin
|
||||
--
|
||||
|
||||
INSERT INTO "auth"."sessions" ("id", "user_id", "created_at", "updated_at", "factor_id", "aal", "not_after", "refreshed_at", "user_agent", "ip", "tag") VALUES
|
||||
('3499fcf0-59da-493f-ae3b-617ef41b4404', '893c7701-d5df-4415-80bd-1ec089764400', '2024-05-27 14:34:43.534268+00', '2024-05-27 14:34:43.534268+00', NULL, 'aal1', NULL, NULL, 'node', '192.168.65.1', NULL);
|
||||
|
||||
|
||||
--
|
||||
-- Data for Name: mfa_amr_claims; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin
|
||||
--
|
||||
|
||||
INSERT INTO "auth"."mfa_amr_claims" ("session_id", "created_at", "updated_at", "authentication_method", "id") VALUES
|
||||
('3499fcf0-59da-493f-ae3b-617ef41b4404', '2024-05-27 14:34:43.535548+00', '2024-05-27 14:34:43.535548+00', 'password', 'dcc35216-f906-4501-812d-f2ed2704ab8e');
|
||||
|
||||
|
||||
--
|
||||
@ -76,6 +89,8 @@ SET row_security = off;
|
||||
-- Data for Name: refresh_tokens; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin
|
||||
--
|
||||
|
||||
INSERT INTO "auth"."refresh_tokens" ("instance_id", "id", "token", "user_id", "revoked", "created_at", "updated_at", "parent", "session_id") VALUES
|
||||
('00000000-0000-0000-0000-000000000000', 2, 'HsInil2IT99mHjGqk_xeKA', '893c7701-d5df-4415-80bd-1ec089764400', false, '2024-05-27 14:34:43.534857+00', '2024-05-27 14:34:43.534857+00', NULL, '3499fcf0-59da-493f-ae3b-617ef41b4404');
|
||||
|
||||
|
||||
--
|
||||
@ -112,6 +127,8 @@ SET row_security = off;
|
||||
-- Data for Name: galleries; Type: TABLE DATA; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
INSERT INTO "public"."galleries" ("name", "column_number", "tier", "tags") VALUES
|
||||
('Test Gallery', 3, 'Free', '{"Test Tag"}');
|
||||
|
||||
|
||||
--
|
||||
@ -139,13 +156,8 @@ INSERT INTO "storage"."buckets" ("id", "name", "owner", "created_at", "updated_a
|
||||
--
|
||||
|
||||
INSERT INTO "storage"."objects" ("id", "bucket_id", "name", "owner", "created_at", "updated_at", "last_accessed_at", "metadata", "version", "owner_id") VALUES
|
||||
('25ea2051-ae55-4728-90ac-aea08467166c', 'galleries', 'Test Gallery/neroshi-1-3.png', NULL, '2024-05-27 13:15:29.27921+00', '2024-05-27 13:15:29.27921+00', '2024-05-27 13:15:29.27921+00', '{"eTag": "\"2c6f2901ed88fbdd8c790a4b77d9caa8\"", "size": 156786, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2024-05-27T13:15:29.267Z", "contentLength": 156786, "httpStatusCode": 200}', '62b23c8b-251a-4410-89b1-c54ba4e26526', NULL),
|
||||
('876c4095-98fe-480b-b7f4-9bbe8cb0e9f1', 'galleries', 'Test Gallery/neroshi-3.jpeg', NULL, '2024-05-27 13:15:29.279371+00', '2024-05-27 13:15:29.279371+00', '2024-05-27 13:15:29.279371+00', '{"eTag": "\"7fd95d9da9f3e6c7237a94feedcfc3af\"", "size": 97841, "mimetype": "image/jpeg", "cacheControl": "max-age=3600", "lastModified": "2024-05-27T13:15:29.269Z", "contentLength": 97841, "httpStatusCode": 200}', 'c69a89e2-5cd8-462e-9716-b46bc6992012', NULL),
|
||||
('54527fef-4a47-48ed-b7aa-4dc10eb2a421', 'galleries', 'Test Gallery/neroshi-1-2.jpeg', NULL, '2024-05-27 13:15:29.284061+00', '2024-05-27 13:15:29.284061+00', '2024-05-27 13:15:29.284061+00', '{"eTag": "\"a22ea7bfaed689b675b11428b98de42e\"", "size": 705547, "mimetype": "image/jpeg", "cacheControl": "max-age=3600", "lastModified": "2024-05-27T13:15:29.259Z", "contentLength": 705547, "httpStatusCode": 200}', '68f50e59-915a-470a-8c70-ffa24bceeae5', NULL),
|
||||
('ab6b077b-96c9-47d5-8b6e-26603a7f5526', 'galleries', 'Test Gallery/neroshi-2.jpeg', NULL, '2024-05-27 13:15:29.284648+00', '2024-05-27 13:15:29.284648+00', '2024-05-27 13:15:29.284648+00', '{"eTag": "\"f8eaf2e06e34ad1b3e101908ab02883e\"", "size": 326461, "mimetype": "image/jpeg", "cacheControl": "max-age=3600", "lastModified": "2024-05-27T13:15:29.272Z", "contentLength": 326461, "httpStatusCode": 200}', 'c53ebb38-77a3-4dba-b5ff-f6b7942938fe', NULL),
|
||||
('9f340e7e-ebfe-49e3-b939-ce6a76b00524', 'galleries', 'Test Gallery/neroshi-1.jpeg', NULL, '2024-05-27 13:15:29.29804+00', '2024-05-27 13:15:29.29804+00', '2024-05-27 13:15:29.29804+00', '{"eTag": "\"76b9705bb529b16fc58a4bdb0b134c9b\"", "size": 552385, "mimetype": "image/jpeg", "cacheControl": "max-age=3600", "lastModified": "2024-05-27T13:15:29.273Z", "contentLength": 552385, "httpStatusCode": 200}', 'fd99b1e9-ba96-44fe-943a-1aa23a98db0d', NULL),
|
||||
('daa4f8bb-5227-48a8-ae9c-9c9bc0cb61fe', 'galleries', 'Test Gallery/neroshi-4-1.jpeg', NULL, '2024-05-27 13:15:29.305156+00', '2024-05-27 13:15:29.305156+00', '2024-05-27 13:15:29.305156+00', '{"eTag": "\"eac1dd9a94c71dd30f565f95d32b0c6b\"", "size": 1227804, "mimetype": "image/jpeg", "cacheControl": "max-age=3600", "lastModified": "2024-05-27T13:15:29.273Z", "contentLength": 1227804, "httpStatusCode": 200}', 'ffb64256-a72e-453a-8336-56fa12cc901f', NULL),
|
||||
('21df51f4-efc9-4076-bc84-9699b6efea72', 'galleries', 'Test Gallery/neroshi-4-2.jpeg', NULL, '2024-05-27 13:15:29.308884+00', '2024-05-27 13:15:29.308884+00', '2024-05-27 13:15:29.308884+00', '{"eTag": "\"d06af35773c09ff8cc1f4a590052be28\"", "size": 456918, "mimetype": "image/jpeg", "cacheControl": "max-age=3600", "lastModified": "2024-05-27T13:15:29.301Z", "contentLength": 456918, "httpStatusCode": 200}', 'aaa5abda-7fb7-46e0-b3ec-a57679276386', NULL);
|
||||
('25ea2051-ae55-4728-90ac-aea08467166c', 'galleries', 'test_gallery/neroshi-1-3.png', NULL, '2024-05-27 13:15:29.27921+00', '2024-05-27 14:51:41.449764+00', '2024-05-27 13:15:29.27921+00', '{"eTag": "\"2c6f2901ed88fbdd8c790a4b77d9caa8\"", "size": 156786, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2024-05-27T14:51:41.442Z", "contentLength": 156786, "httpStatusCode": 200}', 'c9d36afc-0afe-49e3-87c9-7c1bf5b2824a', NULL),
|
||||
('54527fef-4a47-48ed-b7aa-4dc10eb2a421', 'galleries', 'test_gallery/neroshi-1-2.jpeg', NULL, '2024-05-27 13:15:29.284061+00', '2024-05-27 14:51:41.458674+00', '2024-05-27 13:15:29.284061+00', '{"eTag": "\"a22ea7bfaed689b675b11428b98de42e\"", "size": 705547, "mimetype": "image/jpeg", "cacheControl": "max-age=3600", "lastModified": "2024-05-27T14:51:41.442Z", "contentLength": 705547, "httpStatusCode": 200}', '3ea9ec28-b51b-45fd-a273-00d20b9b96f1', NULL);
|
||||
|
||||
|
||||
--
|
||||
@ -176,7 +188,7 @@ INSERT INTO "storage"."objects" ("id", "bucket_id", "name", "owner", "created_at
|
||||
-- Name: refresh_tokens_id_seq; Type: SEQUENCE SET; Schema: auth; Owner: supabase_auth_admin
|
||||
--
|
||||
|
||||
SELECT pg_catalog.setval('"auth"."refresh_tokens_id_seq"', 1, false);
|
||||
SELECT pg_catalog.setval('"auth"."refresh_tokens_id_seq"', 2, true);
|
||||
|
||||
|
||||
--
|
||||
|
Loading…
x
Reference in New Issue
Block a user