Files
avbeat-com/src/app/api/billing/settings/route.ts
2026-05-07 16:39:17 +00:00

60 lines
2.0 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { createClient } from '@/lib/supabase/server';
import { getBillingSettings, updateBillingSettings, getCompanies, updateCompany } from '@/lib/billing/billingService';
import { moonTestConnection } from '@/lib/billing/moonInvoiceClient';
async function requireAdmin(req: NextRequest) {
const supabase = await createClient();
const { data: { user } } = await supabase.auth.getUser();
if (!user) return null;
const { data: profile } = await supabase
.from('user_profiles')
.select('role')
.eq('id', user.id)
.single();
if (!profile || !['administrator', 'admin'].includes(profile.role)) return null;
return user;
}
export async function GET(req: NextRequest) {
const admin = await requireAdmin(req);
if (!admin) return NextResponse.json({ error: 'Not found' }, { status: 404 });
try {
const [settings, companies] = await Promise.all([getBillingSettings(), getCompanies()]);
return NextResponse.json({ settings, companies });
} catch (err: any) {
return NextResponse.json({ error: err.message }, { status: 500 });
}
}
export async function POST(req: NextRequest) {
const admin = await requireAdmin(req);
if (!admin) return NextResponse.json({ error: 'Not found' }, { status: 404 });
try {
const body = await req.json();
const { action, settings, company, companyId } = body;
if (action === 'test_connection') {
const mc = company === 'jtr' ? 'jtr' : 'rmp';
const result = await moonTestConnection(mc);
return NextResponse.json(result);
}
if (action === 'update_company' && companyId) {
const updated = await updateCompany(companyId, company);
return NextResponse.json({ data: updated });
}
if (settings) {
const updated = await updateBillingSettings(settings);
return NextResponse.json({ data: updated });
}
return NextResponse.json({ error: 'Invalid request' }, { status: 400 });
} catch (err: any) {
return NextResponse.json({ error: err.message }, { status: 500 });
}
}