CREATE TYPE "public"."announcement_status" AS ENUM('draft', 'published', 'archived');--> statement-breakpoint CREATE TYPE "public"."import_status" AS ENUM('processing', 'completed', 'failed');--> statement-breakpoint CREATE TYPE "public"."notification_type" AS ENUM('approved', 'rejected', 'announcement', 'reminder');--> statement-breakpoint CREATE TYPE "public"."training_category" AS ENUM('K', 'S', 'A');--> statement-breakpoint CREATE TABLE "announcements" ( "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "announcements_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), "organization_id" text NOT NULL, "title" text NOT NULL, "content" text NOT NULL, "attachment_file_name" text, "attachment_file_type" text, "attachment_file_size" integer, "attachment_storage_key" text, "attachment_file_url" text, "start_date" timestamp with time zone NOT NULL, "end_date" timestamp with time zone, "is_pin" boolean DEFAULT false NOT NULL, "status" "announcement_status" DEFAULT 'draft' NOT NULL, "created_by" text NOT NULL, "updated_by" text, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "updated_at" timestamp with time zone DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE "audit_logs" ( "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "audit_logs_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), "organization_id" text, "user_id" text, "module_name" text NOT NULL, "action" text NOT NULL, "entity_name" text, "entity_id" text, "old_value" jsonb, "new_value" jsonb, "ip_address" text, "user_agent" text, "created_at" timestamp with time zone DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE "import_jobs" ( "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "import_jobs_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), "organization_id" text NOT NULL, "import_type" text NOT NULL, "file_name" text NOT NULL, "total_rows" integer DEFAULT 0 NOT NULL, "success_rows" integer DEFAULT 0 NOT NULL, "failed_rows" integer DEFAULT 0 NOT NULL, "status" "import_status" DEFAULT 'processing' NOT NULL, "error_message" text, "created_by" text NOT NULL, "created_at" timestamp with time zone DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE "notifications" ( "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "notifications_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), "organization_id" text NOT NULL, "user_id" text NOT NULL, "title" text NOT NULL, "message" text NOT NULL, "type" "notification_type" NOT NULL, "reference_type" text, "reference_id" text, "is_read" boolean DEFAULT false NOT NULL, "read_at" timestamp with time zone, "created_at" timestamp with time zone DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE "training_policies" ( "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "training_policies_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), "organization_id" text NOT NULL, "year" integer NOT NULL, "total_hours" double precision DEFAULT 30 NOT NULL, "k_hours" double precision DEFAULT 12 NOT NULL, "s_hours" double precision DEFAULT 12 NOT NULL, "a_hours" double precision DEFAULT 6 NOT NULL, "is_active" boolean DEFAULT true NOT NULL, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "updated_at" timestamp with time zone DEFAULT now() NOT NULL ); --> statement-breakpoint ALTER TABLE "users" ALTER COLUMN "password_hash" DROP NOT NULL;--> statement-breakpoint ALTER TABLE "courses" ADD COLUMN "course_code" text;--> statement-breakpoint ALTER TABLE "courses" ADD COLUMN "certificate_required" boolean DEFAULT true NOT NULL;--> statement-breakpoint ALTER TABLE "courses" ADD COLUMN "training_cost" double precision;--> statement-breakpoint ALTER TABLE "departments" ADD COLUMN "pending_master_review" boolean DEFAULT false NOT NULL;--> statement-breakpoint ALTER TABLE "employees" ADD COLUMN "pending_master_review" boolean DEFAULT false NOT NULL;--> statement-breakpoint ALTER TABLE "organizations" ADD COLUMN "pending_master_review" boolean DEFAULT false NOT NULL;--> statement-breakpoint ALTER TABLE "positions" ADD COLUMN "pending_master_review" boolean DEFAULT false NOT NULL;--> statement-breakpoint ALTER TABLE "training_records" ADD COLUMN "approved_hours" double precision;--> statement-breakpoint ALTER TABLE "training_records" ADD COLUMN "category" "training_category";--> statement-breakpoint ALTER TABLE "training_records" ADD COLUMN "reject_reason" text;--> statement-breakpoint ALTER TABLE "announcements" ADD CONSTRAINT "announcements_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "announcements" ADD CONSTRAINT "announcements_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint ALTER TABLE "announcements" ADD CONSTRAINT "announcements_updated_by_users_id_fk" FOREIGN KEY ("updated_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "audit_logs" ADD CONSTRAINT "audit_logs_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "audit_logs" ADD CONSTRAINT "audit_logs_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "import_jobs" ADD CONSTRAINT "import_jobs_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "import_jobs" ADD CONSTRAINT "import_jobs_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint ALTER TABLE "notifications" ADD CONSTRAINT "notifications_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "notifications" ADD CONSTRAINT "notifications_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "training_policies" ADD CONSTRAINT "training_policies_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint CREATE UNIQUE INDEX "training_policies_org_year_idx" ON "training_policies" USING btree ("organization_id","year");