feat: implement core platform features including business directory, admin dashboard, authentication, and API infrastructure
Some checks failed
Build and Push App / build (push) Failing after 16m2s
Some checks failed
Build and Push App / build (push) Failing after 16m2s
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import { NextRequest, NextResponse } from 'next/server'
|
||||
import prisma from '../../../lib/prisma'
|
||||
import { MOCK_BUSINESSES } from '../../../lib/mockData'
|
||||
import prisma from '@/lib/prisma'
|
||||
|
||||
// GET /api/businesses — List all businesses (Mock + DB)
|
||||
export async function GET(request: NextRequest) {
|
||||
@@ -9,6 +8,7 @@ export async function GET(request: NextRequest) {
|
||||
const category = searchParams.get('category')
|
||||
const q = searchParams.get('q')?.toLowerCase()
|
||||
const featured = searchParams.get('featured')
|
||||
const countryId = searchParams.get('countryId')
|
||||
|
||||
// 1. Fetch from Database
|
||||
const where: any = {
|
||||
@@ -20,6 +20,7 @@ export async function GET(request: NextRequest) {
|
||||
}
|
||||
if (category && category !== 'All') where.category = category
|
||||
if (featured === 'true') where.isFeatured = true
|
||||
if (countryId) where.countryId = countryId
|
||||
if (q) {
|
||||
where.OR = [
|
||||
{ name: { contains: q, mode: 'insensitive' } },
|
||||
@@ -35,31 +36,8 @@ export async function GET(request: NextRequest) {
|
||||
orderBy: { createdAt: 'desc' },
|
||||
})
|
||||
|
||||
// 2. Filter Mock Businesses
|
||||
const filteredMocks = MOCK_BUSINESSES.filter(biz => {
|
||||
// Category filter
|
||||
if (category && category !== 'All' && biz.category !== category) return false;
|
||||
|
||||
// Featured filter
|
||||
if (featured === 'true' && !biz.isFeatured) return false;
|
||||
|
||||
// Search query filter
|
||||
if (q) {
|
||||
const matches =
|
||||
biz.name.toLowerCase().includes(q) ||
|
||||
biz.description.toLowerCase().includes(q) ||
|
||||
biz.tags.some(t => t.toLowerCase().includes(q));
|
||||
if (!matches) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
// 3. Combine and return
|
||||
// Prioritize DB entries over mocks to show user-created data first
|
||||
const combined = [...dbBusinesses, ...filteredMocks];
|
||||
|
||||
return NextResponse.json(combined)
|
||||
// 2. Return DB results
|
||||
return NextResponse.json(dbBusinesses)
|
||||
} catch (error) {
|
||||
console.error('GET /api/businesses error:', error)
|
||||
return NextResponse.json({ error: 'Erreur serveur' }, { status: 500 })
|
||||
@@ -84,6 +62,8 @@ export async function POST(request: NextRequest) {
|
||||
slug: data.slug || null,
|
||||
category: data.category || "Autre",
|
||||
location: data.location || "",
|
||||
countryId: data.countryId || null,
|
||||
city: data.city || "",
|
||||
description: data.description || "",
|
||||
logoUrl: data.logoUrl || "https://picsum.photos/200/200?random=default",
|
||||
videoUrl: data.videoUrl || null,
|
||||
@@ -107,7 +87,7 @@ export async function POST(request: NextRequest) {
|
||||
// 1b. Calculate isActive based on mandatory fields
|
||||
const isNameOk = cleanData.name && cleanData.name !== "Nouvelle Entreprise";
|
||||
const isDescOk = cleanData.description && cleanData.description.length >= 20;
|
||||
const isLocOk = cleanData.location && cleanData.location !== "Ma Ville";
|
||||
const isLocOk = (cleanData.countryId && cleanData.city) || (cleanData.location && cleanData.location !== "Ma Ville");
|
||||
const isEmailOk = !!cleanData.contactEmail;
|
||||
const isPhoneOk = !!cleanData.contactPhone;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user