✨ Major Features Added: - AI Chat with conversation memory and university-specific knowledge base - Multi-tenant university support with white-label capabilities - Professional admin interface for knowledge base management - Advanced database schema with Prisma ORM - Comprehensive documentation and guides - Modern Next.js 15 + React 19 architecture - Bilingual support (English/Arabic) - Role-based access control - Real-time chat interface with loading states 🔧 Technical Improvements: - Fixed all linter errors and TypeScript issues - Cleaned up codebase and removed legacy files - Added comprehensive .gitignore - Updated README with detailed setup instructions - Optimized database schema and migrations - Enhanced error handling and user experience 📚 Documentation: - AI Conversation Memory Guide - AI Enhancement Summary - Developer Guide - User Guide - Complete setup and deployment instructions 🚀 Ready for GitHub deployment and production use!
156 lines
5.8 KiB
SQL
156 lines
5.8 KiB
SQL
-- CreateTable
|
|
CREATE TABLE "domain_configs" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"universityId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"domain" TEXT NOT NULL,
|
|
"subdomain" TEXT,
|
|
"sslStatus" TEXT NOT NULL DEFAULT 'PENDING',
|
|
"sslExpiryDate" DATETIME,
|
|
"dnsStatus" TEXT NOT NULL DEFAULT 'PENDING',
|
|
"isActive" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "domain_configs_universityId_fkey" FOREIGN KEY ("universityId") REFERENCES "universities" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ssl_configs" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"domainId" TEXT NOT NULL,
|
|
"provider" TEXT NOT NULL,
|
|
"certificatePath" TEXT,
|
|
"privateKeyPath" TEXT,
|
|
"autoRenewal" BOOLEAN NOT NULL DEFAULT true,
|
|
"renewalThreshold" INTEGER NOT NULL DEFAULT 30,
|
|
"lastRenewalDate" DATETIME,
|
|
"nextRenewalDate" DATETIME,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "ssl_configs_domainId_fkey" FOREIGN KEY ("domainId") REFERENCES "domain_configs" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "dns_configs" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"domainId" TEXT NOT NULL,
|
|
"provider" TEXT NOT NULL,
|
|
"apiKey" TEXT,
|
|
"zoneId" TEXT,
|
|
"recordType" TEXT NOT NULL,
|
|
"recordValue" TEXT NOT NULL,
|
|
"ttl" INTEGER NOT NULL DEFAULT 300,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "dns_configs_domainId_fkey" FOREIGN KEY ("domainId") REFERENCES "domain_configs" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "domain_analytics" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"domainId" TEXT NOT NULL,
|
|
"uptime" REAL NOT NULL,
|
|
"responseTime" INTEGER NOT NULL,
|
|
"sslStatus" TEXT NOT NULL,
|
|
"dnsStatus" TEXT NOT NULL,
|
|
"checkedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "domain_analytics_domainId_fkey" FOREIGN KEY ("domainId") REFERENCES "domain_configs" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "deployment_configs" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"universityId" TEXT NOT NULL,
|
|
"environment" TEXT NOT NULL,
|
|
"version" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'PENDING',
|
|
"deploymentType" TEXT NOT NULL DEFAULT 'FULL',
|
|
"startTime" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"endTime" DATETIME,
|
|
"logs" JSONB NOT NULL,
|
|
"metadata" JSONB NOT NULL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "deployment_configs_universityId_fkey" FOREIGN KEY ("universityId") REFERENCES "universities" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "environment_configs" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"domain" TEXT NOT NULL,
|
|
"databaseUrl" TEXT NOT NULL,
|
|
"apiKeys" JSONB NOT NULL,
|
|
"features" JSONB NOT NULL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "cdn_configs" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"universityId" TEXT NOT NULL,
|
|
"provider" TEXT NOT NULL,
|
|
"bucketName" TEXT,
|
|
"region" TEXT,
|
|
"accessKey" TEXT,
|
|
"secretKey" TEXT,
|
|
"domain" TEXT NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "cdn_configs_universityId_fkey" FOREIGN KEY ("universityId") REFERENCES "universities" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "cdn_assets" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"universityId" TEXT NOT NULL,
|
|
"originalPath" TEXT NOT NULL,
|
|
"cdnUrl" TEXT NOT NULL,
|
|
"optimizedUrls" JSONB NOT NULL,
|
|
"metadata" JSONB NOT NULL,
|
|
"uploadedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "cdn_assets_universityId_fkey" FOREIGN KEY ("universityId") REFERENCES "universities" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "cdn_assets_universityId_fkey" FOREIGN KEY ("universityId") REFERENCES "cdn_configs" ("universityId") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- RedefineTables
|
|
PRAGMA defer_foreign_keys=ON;
|
|
PRAGMA foreign_keys=OFF;
|
|
CREATE TABLE "new_universities" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"slug" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"shortName" TEXT,
|
|
"domain" TEXT,
|
|
"subdomain" TEXT,
|
|
"branding" JSONB NOT NULL,
|
|
"contact" JSONB NOT NULL,
|
|
"features" JSONB NOT NULL,
|
|
"ai" JSONB NOT NULL,
|
|
"isMultiBranch" BOOLEAN NOT NULL DEFAULT false,
|
|
"parentUniversityId" TEXT,
|
|
"branchType" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'SETUP',
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "universities_parentUniversityId_fkey" FOREIGN KEY ("parentUniversityId") REFERENCES "universities" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
INSERT INTO "new_universities" ("ai", "branding", "contact", "createdAt", "domain", "features", "id", "name", "shortName", "slug", "status", "subdomain", "updatedAt") SELECT "ai", "branding", "contact", "createdAt", "domain", "features", "id", "name", "shortName", "slug", "status", "subdomain", "updatedAt" FROM "universities";
|
|
DROP TABLE "universities";
|
|
ALTER TABLE "new_universities" RENAME TO "universities";
|
|
CREATE UNIQUE INDEX "universities_slug_key" ON "universities"("slug");
|
|
PRAGMA foreign_keys=ON;
|
|
PRAGMA defer_foreign_keys=OFF;
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ssl_configs_domainId_key" ON "ssl_configs"("domainId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "dns_configs_domainId_key" ON "dns_configs"("domainId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "cdn_configs_universityId_key" ON "cdn_configs"("universityId");
|