| import { NextRequest, NextResponse } from 'next/server' |
| import { createClient } from '@/lib/supabase/server' |
|
|
| export const dynamic = 'force-dynamic' |
|
|
| |
| export async function GET() { |
| const supabase = await createClient() |
| const { data: { user }, error: authErr } = await supabase.auth.getUser() |
| if (!user || authErr) { |
| return NextResponse.json({ error: 'Giriş gerekli' }, { status: 401 }) |
| } |
|
|
| const { data, error } = await supabase |
| .from('watchlists') |
| .select('*') |
| .eq('user_id', user.id) |
| .order('created_at', { ascending: false }) |
|
|
| if (error) return NextResponse.json({ error: error.message }, { status: 500 }) |
| return NextResponse.json({ items: data ?? [] }) |
| } |
|
|
| |
| export async function POST(req: NextRequest) { |
| const supabase = await createClient() |
| const { data: { user }, error: authErr } = await supabase.auth.getUser() |
| if (!user || authErr) { |
| return NextResponse.json({ error: 'Giriş gerekli' }, { status: 401 }) |
| } |
|
|
| let body: Record<string, unknown> |
| try { body = await req.json() } catch { return NextResponse.json({ error: 'Geçersiz JSON' }, { status: 400 }) } |
|
|
| const symbol = String(body.symbol || '').trim().toUpperCase() |
| if (!symbol) return NextResponse.json({ error: 'symbol gerekli' }, { status: 400 }) |
|
|
| |
| const { data: stock } = await supabase |
| .from('stocks') |
| .select('id') |
| .eq('symbol', symbol) |
| .maybeSingle() |
|
|
| const { data, error } = await supabase |
| .from('watchlists') |
| .upsert({ |
| user_id: user.id, |
| stock_id: stock?.id || null, |
| symbol, |
| alert_price_above: body.alert_price_above || null, |
| alert_price_below: body.alert_price_below || null, |
| alert_on_news: body.alert_on_news || false, |
| notes: body.notes || null, |
| }, { onConflict: 'user_id,stock_id' }) |
| .select() |
| .single() |
|
|
| if (error) return NextResponse.json({ error: error.message }, { status: 500 }) |
| return NextResponse.json({ item: data }, { status: 201 }) |
| } |
|
|
| |
| export async function DELETE(req: NextRequest) { |
| const supabase = await createClient() |
| const { data: { user }, error: authErr } = await supabase.auth.getUser() |
| if (!user || authErr) { |
| return NextResponse.json({ error: 'Giriş gerekli' }, { status: 401 }) |
| } |
|
|
| const url = new URL(req.url) |
| const id = url.searchParams.get('id') |
| const symbol = url.searchParams.get('symbol') |
|
|
| if (!id && !symbol) { |
| return NextResponse.json({ error: 'id veya symbol gerekli' }, { status: 400 }) |
| } |
|
|
| let query = supabase.from('watchlists').delete().eq('user_id', user.id) |
| if (id) query = query.eq('id', id) |
| |
| if (symbol && !id) { |
| const { data: stock } = await supabase.from('stocks').select('id').eq('symbol', symbol.toUpperCase()).maybeSingle() |
| if (stock) query = query.eq('stock_id', stock.id) |
| else return NextResponse.json({ error: 'Hisse bulunamadı' }, { status: 404 }) |
| } |
|
|
| const { error } = await query |
| if (error) return NextResponse.json({ error: error.message }, { status: 500 }) |
| return NextResponse.json({ ok: true }) |
| } |
|
|