Edit app-9xzmfic2e4g1/src/db/api.ts via Editor

This commit is contained in:
Flatlogic Bot 2026-03-06 17:49:13 +00:00
parent cb048aa191
commit 041650ebd6

View File

@ -40,6 +40,7 @@ export interface Trip {
} }
const api = { const api = {
// Trips
async getTrips() { async getTrips() {
const { data, error } = await supabase const { data, error } = await supabase
.from('trips') .from('trips')
@ -88,6 +89,7 @@ const api = {
if (error) throw error; if (error) throw error;
}, },
// Edge Functions
async generateItinerary(params: { async generateItinerary(params: {
startDate: string; startDate: string;
endDate: string; endDate: string;
@ -127,6 +129,9 @@ const api = {
return `${baseUrl}/functions/v1/get-place-photo?photo_reference=${photoReference}`; return `${baseUrl}/functions/v1/get-place-photo?photo_reference=${photoReference}`;
}, },
// ── Public Guides ──────────────────────────────────────────────────────────
/** Rehber olarak yayınla / yayından kaldır */
async publishGuide(tripId: string, opts: { async publishGuide(tripId: string, opts: {
guide_intro?: string; guide_intro?: string;
guide_tips?: string[]; guide_tips?: string[];
@ -154,10 +159,11 @@ const api = {
if (error) throw error; if (error) throw error;
}, },
/** Tüm public rehberleri getir (popülerlik sırasına göre) */
async getPublicGuides(limit = 20) { async getPublicGuides(limit = 20) {
const { data, error } = await supabase const { data, error } = await supabase
.from('trips') .from('trips')
.select('id, title, destination, start_date, end_date, itinerary, guide_intro, guide_tips, views_count, likes_count, published_at, user_id, profiles(id, full_name)') .select('id, title, destination, start_date, end_date, itinerary, guide_intro, guide_tips, views_count, likes_count, published_at, user_id, profiles(id, username)')
.eq('is_public', true) .eq('is_public', true)
.order('likes_count', { ascending: false }) .order('likes_count', { ascending: false })
.order('views_count', { ascending: false }) .order('views_count', { ascending: false })
@ -166,18 +172,21 @@ const api = {
return data || []; return data || [];
}, },
/** Tek bir public rehberi getir + view sayacını artır */
async getPublicGuide(tripId: string) { async getPublicGuide(tripId: string) {
const { data, error } = await supabase const { data, error } = await supabase
.from('trips') .from('trips')
.select('*, profiles(id, full_name)') .select('*, profiles(id, username)')
.eq('id', tripId) .eq('id', tripId)
.eq('is_public', true) .eq('is_public', true)
.single(); .single();
if (error) throw error; if (error) throw error;
// view sayacını artır (fire & forget)
supabase.rpc('increment_guide_views', { trip_id: tripId }).then(() => {}); supabase.rpc('increment_guide_views', { trip_id: tripId }).then(() => {});
return data; return data;
}, },
/** Rehberi kopyalayarak kendi tripini oluştur */
async cloneGuide(tripId: string): Promise<Trip> { async cloneGuide(tripId: string): Promise<Trip> {
const guide = await this.getPublicGuide(tripId); const guide = await this.getPublicGuide(tripId);
if (!guide) throw new Error('Rehber bulunamadı'); if (!guide) throw new Error('Rehber bulunamadı');
@ -192,24 +201,28 @@ const api = {
return newTrip; return newTrip;
}, },
/** Beğen / beğeniyi geri al */
async toggleLike(tripId: string): Promise<boolean> { async toggleLike(tripId: string): Promise<boolean> {
const { data: { user } } = await supabase.auth.getUser(); const { data: { user } } = await supabase.auth.getUser();
if (!user) throw new Error('Giriş gerekli'); if (!user) throw new Error('Giriş gerekli');
const { data: existing } = await supabase const { data: existing } = await supabase
.from('guide_likes') .from('guide_likes')
.select('user_id') .select('user_id')
.eq('user_id', user.id) .eq('user_id', user.id)
.eq('trip_id', tripId) .eq('trip_id', tripId)
.maybeSingle(); .maybeSingle();
if (existing) { if (existing) {
await supabase.from('guide_likes').delete().eq('user_id', user.id).eq('trip_id', tripId); await supabase.from('guide_likes').delete().eq('user_id', user.id).eq('trip_id', tripId);
return false; return false; // beğeni kaldırıldı
} else { } else {
await supabase.from('guide_likes').insert({ user_id: user.id, trip_id: tripId }); await supabase.from('guide_likes').insert({ user_id: user.id, trip_id: tripId });
return true; return true; // beğenildi
} }
}, },
/** Kullanıcının beğendiği guide id'leri */
async getMyLikes(): Promise<string[]> { async getMyLikes(): Promise<string[]> {
const { data: { user } } = await supabase.auth.getUser(); const { data: { user } } = await supabase.auth.getUser();
if (!user) return []; if (!user) return [];
@ -217,8 +230,6 @@ const api = {
.from('guide_likes') .from('guide_likes')
.select('trip_id') .select('trip_id')
.eq('user_id', user.id); .eq('user_id', user.id);
return (data || []).map((r: any) => r.trip_id); return (data || []).map(r => r.trip_id);
}, },
}; };
export default api;