feat: implement portfolio dashboard with skill, experience, and message management features

This commit is contained in:
Yolando
2026-04-03 17:02:54 +07:00
parent ef6b44604a
commit e0f6e4bd8b
34 changed files with 2128 additions and 435 deletions

View File

@@ -0,0 +1,81 @@
-- CreateTable
CREATE TABLE "users" (
"id" UUID NOT NULL,
"email" TEXT NOT NULL,
"password_hash" TEXT NOT NULL,
"name" TEXT NOT NULL,
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "projects" (
"id" UUID NOT NULL,
"title" TEXT NOT NULL,
"slug" TEXT NOT NULL,
"description" TEXT NOT NULL,
"image_url" TEXT,
"repo_url" TEXT,
"live_url" TEXT,
"category" TEXT NOT NULL,
"is_published" BOOLEAN NOT NULL DEFAULT false,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "projects_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "skills" (
"id" UUID NOT NULL,
"name" TEXT NOT NULL,
"icon_name" TEXT,
"category" TEXT NOT NULL,
CONSTRAINT "skills_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "project_skills" (
"project_id" UUID NOT NULL,
"skill_id" UUID NOT NULL,
CONSTRAINT "project_skills_pkey" PRIMARY KEY ("project_id","skill_id")
);
-- CreateTable
CREATE TABLE "messages" (
"id" UUID NOT NULL,
"sender_name" TEXT NOT NULL,
"sender_email" TEXT NOT NULL,
"content" TEXT NOT NULL,
"is_read" BOOLEAN NOT NULL DEFAULT false,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "messages_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "experiences" (
"id" UUID NOT NULL,
"year" TEXT NOT NULL,
"title" TEXT NOT NULL,
"company" TEXT NOT NULL,
"description" TEXT NOT NULL,
"achievements" JSONB NOT NULL DEFAULT '[]',
"order" INTEGER NOT NULL DEFAULT 0,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "experiences_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
-- CreateIndex
CREATE UNIQUE INDEX "projects_slug_key" ON "projects"("slug");
-- AddForeignKey
ALTER TABLE "project_skills" ADD CONSTRAINT "project_skills_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "project_skills" ADD CONSTRAINT "project_skills_skill_id_fkey" FOREIGN KEY ("skill_id") REFERENCES "skills"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@@ -0,0 +1,3 @@
# Please do not edit this file manually
# It should be added in your version-control system (i.e. Git)
provider = "postgresql"