178 lines
6.7 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server"
import { requireAuth } from "@/lib/auth"
import { UserRole } from "@/types/database"
import { updateSiteSettingsSchema } from "@/lib/validations"
import { db } from "@/lib/db"
// GET /api/settings - Fetch site settings (public endpoint)
export async function GET(request: NextRequest) {
try {
// TODO: Implement via Supabase MCP
// const settings = await db.siteSettings.findFirst()
// Mock response for now
const mockSettings = {
id: "settings-1",
studioName: "United Tattoo Studio",
description: "Premier tattoo studio specializing in custom artwork and professional tattooing services.",
address: "123 Main Street, Denver, CO 80202",
phone: "+1 (555) 123-4567",
email: "info@unitedtattoo.com",
socialMedia: {
instagram: "https://instagram.com/unitedtattoo",
facebook: "https://facebook.com/unitedtattoo",
twitter: "https://twitter.com/unitedtattoo",
tiktok: "https://tiktok.com/@unitedtattoo",
},
businessHours: [
{ dayOfWeek: 1, openTime: "10:00", closeTime: "20:00", isClosed: false }, // Monday
{ dayOfWeek: 2, openTime: "10:00", closeTime: "20:00", isClosed: false }, // Tuesday
{ dayOfWeek: 3, openTime: "10:00", closeTime: "20:00", isClosed: false }, // Wednesday
{ dayOfWeek: 4, openTime: "10:00", closeTime: "20:00", isClosed: false }, // Thursday
{ dayOfWeek: 5, openTime: "10:00", closeTime: "22:00", isClosed: false }, // Friday
{ dayOfWeek: 6, openTime: "10:00", closeTime: "22:00", isClosed: false }, // Saturday
{ dayOfWeek: 0, openTime: "12:00", closeTime: "18:00", isClosed: false }, // Sunday
],
heroImage: "/united-studio-main.jpg",
logoUrl: "/united-logo-website.jpg",
updatedAt: new Date(),
}
return NextResponse.json(mockSettings)
} catch (error) {
console.error("Error fetching site settings:", error)
return NextResponse.json(
{ error: "Failed to fetch site settings" },
{ status: 500 }
)
}
}
// PUT /api/settings - Update site settings (Admin only)
export async function PUT(request: NextRequest) {
try {
// Require admin authentication
await requireAuth(UserRole.SHOP_ADMIN)
const body = await request.json()
const validatedData = updateSiteSettingsSchema.parse(body)
// TODO: Implement via Supabase MCP
// const updatedSettings = await db.siteSettings.update(validatedData)
// Mock response for now
const mockUpdatedSettings = {
id: "settings-1",
studioName: validatedData.studioName || "United Tattoo Studio",
description: validatedData.description || "Premier tattoo studio specializing in custom artwork and professional tattooing services.",
address: validatedData.address || "123 Main Street, Denver, CO 80202",
phone: validatedData.phone || "+1 (555) 123-4567",
email: validatedData.email || "info@unitedtattoo.com",
socialMedia: validatedData.socialMedia || {
instagram: "https://instagram.com/unitedtattoo",
facebook: "https://facebook.com/unitedtattoo",
twitter: "https://twitter.com/unitedtattoo",
tiktok: "https://tiktok.com/@unitedtattoo",
},
businessHours: validatedData.businessHours || [
{ dayOfWeek: 1, openTime: "10:00", closeTime: "20:00", isClosed: false },
{ dayOfWeek: 2, openTime: "10:00", closeTime: "20:00", isClosed: false },
{ dayOfWeek: 3, openTime: "10:00", closeTime: "20:00", isClosed: false },
{ dayOfWeek: 4, openTime: "10:00", closeTime: "20:00", isClosed: false },
{ dayOfWeek: 5, openTime: "10:00", closeTime: "22:00", isClosed: false },
{ dayOfWeek: 6, openTime: "10:00", closeTime: "22:00", isClosed: false },
{ dayOfWeek: 0, openTime: "12:00", closeTime: "18:00", isClosed: false },
],
heroImage: validatedData.heroImage || "/united-studio-main.jpg",
logoUrl: validatedData.logoUrl || "/united-logo-website.jpg",
updatedAt: new Date(),
}
return NextResponse.json(mockUpdatedSettings)
} catch (error) {
console.error("Error updating site settings:", error)
if (error instanceof Error) {
if (error.message.includes("Authentication required")) {
return NextResponse.json(
{ error: "Authentication required" },
{ status: 401 }
)
}
if (error.message.includes("Insufficient permissions")) {
return NextResponse.json(
{ error: "Insufficient permissions" },
{ status: 403 }
)
}
}
return NextResponse.json(
{ error: "Failed to update site settings" },
{ status: 500 }
)
}
}
// POST /api/settings - Initialize site settings (Super Admin only)
export async function POST(request: NextRequest) {
try {
// Require super admin authentication
await requireAuth(UserRole.SUPER_ADMIN)
const body = await request.json()
const validatedData = updateSiteSettingsSchema.parse(body)
// TODO: Implement via Supabase MCP
// Check if settings already exist
// const existingSettings = await db.siteSettings.findFirst()
// if (existingSettings) {
// return NextResponse.json(
// { error: "Site settings already exist. Use PUT to update." },
// { status: 409 }
// )
// }
// const newSettings = await db.siteSettings.create(validatedData)
// Mock response for now
const mockNewSettings = {
id: `settings-${Date.now()}`,
studioName: validatedData.studioName || "United Tattoo Studio",
description: validatedData.description || "Premier tattoo studio specializing in custom artwork and professional tattooing services.",
address: validatedData.address || "123 Main Street, Denver, CO 80202",
phone: validatedData.phone || "+1 (555) 123-4567",
email: validatedData.email || "info@unitedtattoo.com",
socialMedia: validatedData.socialMedia || {},
businessHours: validatedData.businessHours || [],
heroImage: validatedData.heroImage,
logoUrl: validatedData.logoUrl,
updatedAt: new Date(),
}
return NextResponse.json(mockNewSettings, { status: 201 })
} catch (error) {
console.error("Error creating site settings:", error)
if (error instanceof Error) {
if (error.message.includes("Authentication required")) {
return NextResponse.json(
{ error: "Authentication required" },
{ status: 401 }
)
}
if (error.message.includes("Insufficient permissions")) {
return NextResponse.json(
{ error: "Insufficient permissions" },
{ status: 403 }
)
}
}
return NextResponse.json(
{ error: "Failed to create site settings" },
{ status: 500 }
)
}
}