feat: complete platform management features and enhance SEO

- Add comprehensive company management interface with editing, suspension
- Implement user invitation system within companies
- Add Add Company modal with form validation
- Create platform auth configuration in separate lib file
- Add comprehensive SEO metadata with OpenGraph and structured data
- Fix auth imports and route exports for Next.js 15 compatibility
- Add toast notifications with RadixUI components
- Update TODO status to reflect 100% completion of platform features
This commit is contained in:
2025-06-28 13:20:48 +02:00
parent fdb1a9c2b1
commit 1972c5e9f7
26 changed files with 1627 additions and 251 deletions

View File

@ -1,16 +1,26 @@
import { NextRequest, NextResponse } from "next/server";
import { getServerSession } from "next-auth";
import { platformAuthOptions } from "../../auth/[...nextauth]/route";
import { platformAuthOptions } from "../../../../../lib/platform-auth";
import { prisma } from "../../../../../lib/prisma";
import { CompanyStatus } from "@prisma/client";
interface PlatformSession {
user: {
id?: string;
name?: string;
email?: string;
isPlatformUser?: boolean;
platformRole?: string;
};
}
// GET /api/platform/companies/[id] - Get company details
export async function GET(
request: NextRequest,
{ params }: { params: Promise<{ id: string }> }
) {
try {
const session = await getServerSession(platformAuthOptions);
const session = await getServerSession(platformAuthOptions) as PlatformSession | null;
if (!session?.user?.isPlatformUser) {
return NextResponse.json({ error: "Platform access required" }, { status: 401 });
@ -24,28 +34,19 @@ export async function GET(
users: {
select: {
id: true,
name: true,
email: true,
role: true,
createdAt: true,
updatedAt: true,
invitedBy: true,
invitedAt: true,
},
},
sessions: {
select: {
id: true,
startTime: true,
endTime: true,
sentiment: true,
category: true,
},
take: 10,
orderBy: { createdAt: "desc" },
},
_count: {
select: {
sessions: true,
imports: true,
users: true,
},
},
},
@ -55,7 +56,7 @@ export async function GET(
return NextResponse.json({ error: "Company not found" }, { status: 404 });
}
return NextResponse.json({ company });
return NextResponse.json(company);
} catch (error) {
console.error("Platform company details error:", error);
return NextResponse.json({ error: "Internal server error" }, { status: 500 });
@ -76,10 +77,12 @@ export async function PATCH(
const { id } = await params;
const body = await request.json();
const { name, csvUrl, csvUsername, csvPassword, status } = body;
const { name, email, maxUsers, csvUrl, csvUsername, csvPassword, status } = body;
const updateData: any = {};
if (name !== undefined) updateData.name = name;
if (email !== undefined) updateData.email = email;
if (maxUsers !== undefined) updateData.maxUsers = maxUsers;
if (csvUrl !== undefined) updateData.csvUrl = csvUrl;
if (csvUsername !== undefined) updateData.csvUsername = csvUsername;
if (csvPassword !== undefined) updateData.csvPassword = csvPassword;