forked from UKSOURCE/ipv6
Adding UI of FeedBack, Registration, Admin console
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
import type { AdminData } from "@/app/components/admin/AdminConsole";
|
||||
import adminJson from "@/app/data/admin.json";
|
||||
import { listRequestsSorted } from "@/lib/summit-requests";
|
||||
|
||||
export async function loadAdminConsoleData(): Promise<AdminData> {
|
||||
const base = adminJson as AdminData;
|
||||
const requests = await listRequestsSorted();
|
||||
return { ...base, requests };
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import mongoose from "mongoose";
|
||||
|
||||
/** Cached connection for Next.js hot reload (global is preserved across HMR). */
|
||||
const globalForMongoose = globalThis as typeof globalThis & {
|
||||
mongooseConn?: typeof mongoose;
|
||||
};
|
||||
|
||||
export default async function connectDB(): Promise<typeof mongoose> {
|
||||
const uri = process.env.MONGODB_URI;
|
||||
if (!uri) {
|
||||
throw new Error("MONGODB_URI is not set. Add it to .env (e.g. mongodb://localhost:27017/ipv6_summit).");
|
||||
}
|
||||
|
||||
if (globalForMongoose.mongooseConn?.connection?.readyState === 1) {
|
||||
return globalForMongoose.mongooseConn;
|
||||
}
|
||||
|
||||
const conn = await mongoose.connect(uri);
|
||||
globalForMongoose.mongooseConn = conn;
|
||||
return conn;
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
import type { AdminRequestRow, SubmissionStatus } from "@/types/admin-submission";
|
||||
import connectDB from "@/lib/mongodb";
|
||||
import SummitRequest, { type ISummitRequest } from "@/models/SummitRequest";
|
||||
|
||||
function docToRow(doc: ISummitRequest): AdminRequestRow {
|
||||
return {
|
||||
id: doc.publicId,
|
||||
submittedAt: doc.submittedAt,
|
||||
displayDate: doc.displayDate,
|
||||
fullName: doc.fullName,
|
||||
jobTitle: doc.jobTitle,
|
||||
company: doc.company,
|
||||
segment: doc.segment,
|
||||
email: doc.email,
|
||||
phone: doc.phone,
|
||||
status: doc.status,
|
||||
notes: doc.notes,
|
||||
source: doc.source,
|
||||
};
|
||||
}
|
||||
|
||||
export async function listRequestsSorted(): Promise<AdminRequestRow[]> {
|
||||
await connectDB();
|
||||
const docs = await SummitRequest.find()
|
||||
.sort({ submittedAt: -1, updatedAt: -1 })
|
||||
.lean<ISummitRequest[]>();
|
||||
return docs.map(docToRow);
|
||||
}
|
||||
|
||||
export async function createSummitRequest(row: AdminRequestRow): Promise<void> {
|
||||
await connectDB();
|
||||
await SummitRequest.create({
|
||||
publicId: row.id,
|
||||
submittedAt: row.submittedAt,
|
||||
displayDate: row.displayDate,
|
||||
fullName: row.fullName,
|
||||
jobTitle: row.jobTitle,
|
||||
company: row.company,
|
||||
segment: row.segment,
|
||||
email: row.email,
|
||||
phone: row.phone,
|
||||
status: row.status,
|
||||
notes: row.notes,
|
||||
source: row.source,
|
||||
});
|
||||
}
|
||||
|
||||
export async function updateSummitRequestStatus(publicId: string, status: SubmissionStatus): Promise<void> {
|
||||
await connectDB();
|
||||
const updated = await SummitRequest.findOneAndUpdate({ publicId }, { $set: { status } }, { new: true });
|
||||
if (!updated) {
|
||||
throw new Error(`Request not found: ${publicId}`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user