diff --git a/prisma/migrations/20260207024809_add_nextauth_model_config/migration.sql b/prisma/migrations/20260207024809_add_nextauth_model_config/migration.sql
new file mode 100644
index 0000000..763cea4
--- /dev/null
+++ b/prisma/migrations/20260207024809_add_nextauth_model_config/migration.sql
@@ -0,0 +1,145 @@
+-- CreateEnum
+CREATE TYPE "UserGender" AS ENUM ('male', 'female', 'other');
+
+-- CreateEnum
+CREATE TYPE "Sentiment" AS ENUM ('positive', 'negative', 'neutral');
+
+-- CreateTable
+CREATE TABLE "Account" (
+ "id" SERIAL NOT NULL,
+ "userId" INTEGER NOT NULL,
+ "type" TEXT NOT NULL,
+ "provider" TEXT NOT NULL,
+ "providerAccountId" TEXT NOT NULL,
+ "refresh_token" TEXT,
+ "access_token" TEXT,
+ "expires_at" INTEGER,
+ "token_type" TEXT,
+ "scope" TEXT,
+ "id_token" TEXT,
+ "session_state" TEXT,
+
+ CONSTRAINT "Account_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Session" (
+ "id" SERIAL NOT NULL,
+ "sessionToken" TEXT NOT NULL,
+ "userId" INTEGER NOT NULL,
+ "expires" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Session_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "VerificationToken" (
+ "identifier" TEXT NOT NULL,
+ "token" TEXT NOT NULL,
+ "expires" TIMESTAMP(3) NOT NULL
+);
+
+-- CreateTable
+CREATE TABLE "User" (
+ "id" SERIAL NOT NULL,
+ "name" TEXT,
+ "email" TEXT,
+ "emailVerified" TIMESTAMP(3),
+ "image" TEXT,
+ "gender" "UserGender",
+ "productReference" TEXT,
+ "password" TEXT,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "User_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Analysis" (
+ "id" SERIAL NOT NULL,
+ "userId" INTEGER NOT NULL,
+ "reviewId" INTEGER NOT NULL,
+ "productId" INTEGER NOT NULL,
+ "modelId" INTEGER NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Analysis_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Product" (
+ "id" SERIAL NOT NULL,
+ "name" TEXT NOT NULL,
+ "brand" TEXT NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Product_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Review" (
+ "id" SERIAL NOT NULL,
+ "productId" INTEGER NOT NULL,
+ "content" TEXT NOT NULL,
+ "keywords" TEXT[],
+ "sentiment" "Sentiment" NOT NULL,
+ "confidenceScore" DOUBLE PRECISION NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Review_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Model" (
+ "id" SERIAL NOT NULL,
+ "modelName" TEXT NOT NULL,
+ "description" TEXT NOT NULL,
+ "accuracy" DOUBLE PRECISION NOT NULL,
+ "macroF1" DOUBLE PRECISION NOT NULL,
+ "f1Negative" DOUBLE PRECISION NOT NULL,
+ "f1Neutral" DOUBLE PRECISION NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Model_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Account_provider_providerAccountId_key" ON "Account"("provider", "providerAccountId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Session_sessionToken_key" ON "Session"("sessionToken");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "VerificationToken_token_key" ON "VerificationToken"("token");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "VerificationToken_identifier_token_key" ON "VerificationToken"("identifier", "token");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
+
+-- AddForeignKey
+ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Analysis" ADD CONSTRAINT "Analysis_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Analysis" ADD CONSTRAINT "Analysis_reviewId_fkey" FOREIGN KEY ("reviewId") REFERENCES "Review"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Analysis" ADD CONSTRAINT "Analysis_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Analysis" ADD CONSTRAINT "Analysis_modelId_fkey" FOREIGN KEY ("modelId") REFERENCES "Model"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Review" ADD CONSTRAINT "Review_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml
new file mode 100644
index 0000000..044d57c
--- /dev/null
+++ b/prisma/migrations/migration_lock.toml
@@ -0,0 +1,3 @@
+# Please do not edit this file manually
+# It should be added in your version-control system (e.g., Git)
+provider = "postgresql"
diff --git a/src/components/dashboards/BrandFilter.tsx b/src/components/dashboards/BrandFilter.tsx
index f864fdb..0287f05 100644
--- a/src/components/dashboards/BrandFilter.tsx
+++ b/src/components/dashboards/BrandFilter.tsx
@@ -1,18 +1,11 @@
import { cn } from "@/lib/utils";
+import { BrandFilterProps } from "@/src/types";
-interface Brand {
- name: string;
- count: number;
- logo?: string;
-}
-
-interface BrandFilterProps {
- brands: Brand[];
- selectedBrand: string | null;
- onSelect: (brand: string | null) => void;
-}
-
-export function BrandFilter({ brands, selectedBrand, onSelect }: BrandFilterProps) {
+export function BrandFilter({
+ brands,
+ selectedBrand,
+ onSelect,
+}: BrandFilterProps) {
return (
- {/* Stats Grid */}
- {/* Charts Section */}
@@ -151,9 +110,7 @@ export default function DashboardClient() {
- {/* Word Cloud & Model Info */}
- {/* Slot Kata Kunci */}
Kata Kunci Populer
@@ -174,12 +131,10 @@ export default function DashboardClient() {
)}
- {/* Sentiment Analyzer */}
- {/* Reviews Section */}
@@ -197,7 +152,6 @@ export default function DashboardClient() {
- {/* Footer */}