feat: setup Supabase Storage bucket for restaurant assets and add mobile upload helper

This commit is contained in:
AyrisAI
2026-08-20 17:30:22 +03:00
parent 5122ec24fc
commit 5cbd80326f
3 changed files with 75 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
import { supabase } from "./supabase";
export const BUCKET_NAME = "restaurant-assets";
export type AssetFolder = "logos" | "covers" | "items";
/**
* Uploads an image file (logo, cover banner, item photo) to Supabase Storage
* and returns the public CDN URL.
*/
export async function uploadImageToSupabase(
fileUri: string,
folder: AssetFolder = "items"
): Promise<string> {
const response = await fetch(fileUri);
const blob = await response.blob();
const fileExt = fileUri.split(".").pop()?.toLowerCase() || "jpg";
const fileName = `${folder}/${Date.now()}-${Math.random().toString(36).substring(2, 9)}.${fileExt}`;
const { data, error } = await supabase.storage
.from(BUCKET_NAME)
.upload(fileName, blob, {
contentType: `image/${fileExt === "png" ? "png" : "jpeg"}`,
upsert: true,
});
if (error) {
throw new Error(`Resim yükleme hatası: ${error.message}`);
}
const { data: publicUrlData } = supabase.storage
.from(BUCKET_NAME)
.getPublicUrl(data.path);
return publicUrlData.publicUrl;
}
+12
View File
@@ -2,6 +2,18 @@
const nextConfig = { const nextConfig = {
reactStrictMode: true, reactStrictMode: true,
output: "standalone", output: "standalone",
images: {
remotePatterns: [
{
protocol: "https",
hostname: "*.supabase.co",
},
{
protocol: "https",
hostname: "images.unsplash.com",
},
],
},
}; };
export default nextConfig; export default nextConfig;
@@ -0,0 +1,27 @@
-- Supabase Storage Bucket Setup for Restaurant Assets (Logos, Cover Banners, Menu Items)
insert into storage.buckets (id, name, public)
values ('restaurant-assets', 'restaurant-assets', true)
on conflict (id) do update set public = true;
-- Enable Public Read Access Policy for restaurant-assets bucket
create policy "Public Access for Restaurant Assets"
on storage.objects for select
using ( bucket_id = 'restaurant-assets' );
-- Enable Authenticated User Upload Policy for restaurant-assets bucket
create policy "Authenticated User Upload for Restaurant Assets"
on storage.objects for insert
to authenticated
with check ( bucket_id = 'restaurant-assets' );
-- Enable Authenticated User Update Policy for restaurant-assets bucket
create policy "Authenticated User Update for Restaurant Assets"
on storage.objects for update
to authenticated
using ( bucket_id = 'restaurant-assets' );
-- Enable Authenticated User Delete Policy for restaurant-assets bucket
create policy "Authenticated User Delete for Restaurant Assets"
on storage.objects for delete
to authenticated
using ( bucket_id = 'restaurant-assets' );