ff56cea4b8
- Introduced new migration for `facebook_accounts` and `facebook_scrape_logs` tables. - Updated the scraping logic to handle Facebook accounts, including success and failure tracking. - Implemented API endpoints for managing Facebook accounts and their scrape logs. - Enhanced user permissions to restrict access to Facebook account management to admins and super admins. - Added a dialog component for displaying and managing Facebook accounts in the UI. - Updated lead fetching logic to include user role checks for assignment and access.
45 lines
1.4 KiB
TypeScript
45 lines
1.4 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server"
|
|
import { getSessionUser } from "@/lib/auth"
|
|
import { query } from "@/lib/db"
|
|
import { avatarSvgUrl } from "@/lib/avatar"
|
|
|
|
export async function GET(request: NextRequest) {
|
|
try {
|
|
const currentUser = await getSessionUser()
|
|
if (!currentUser) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
|
|
if (currentUser.role !== "admin" && currentUser.role !== "super_admin") {
|
|
return NextResponse.json({ error: "Forbidden" }, { status: 403 })
|
|
}
|
|
|
|
const q = request.nextUrl.searchParams.get("q") || ""
|
|
|
|
if (!q.trim()) {
|
|
return NextResponse.json({ users: [] })
|
|
}
|
|
|
|
const result = await query(
|
|
`SELECT id, first_name || ' ' || last_name AS name, email, avatar_url
|
|
FROM users
|
|
WHERE deleted_at IS NULL
|
|
AND id != $1
|
|
AND (LOWER(first_name || ' ' || last_name) LIKE LOWER($2)
|
|
OR LOWER(email) LIKE LOWER($2))
|
|
ORDER BY first_name ASC
|
|
LIMIT 10`,
|
|
[currentUser.id, `%${q}%`],
|
|
)
|
|
|
|
const users = result.rows.map((row: any) => ({
|
|
id: row.id,
|
|
name: row.name,
|
|
email: row.email,
|
|
avatar: avatarSvgUrl(row.name),
|
|
}))
|
|
|
|
return NextResponse.json({ users })
|
|
} catch (error) {
|
|
console.error("User search error:", error)
|
|
return NextResponse.json({ error: "Search failed" }, { status: 500 })
|
|
}
|
|
}
|