This repository has been archived on 2024-11-20. You can view files and clone it, but cannot push or open issues or pull requests.
p61-project/infrastructure/supabase/migrations/20240315152340_initial_schema.sql

275 lines
6.9 KiB
SQL

CREATE TYPE "public"."goal_frequency" AS enum ('daily', 'weekly', 'monthly');
CREATE TABLE "public"."habits" (
"id" bigint generated by DEFAULT AS identity NOT NULL,
"name" text NOT NULL,
"color" text NOT NULL,
"icon" text NOT NULL,
"start_date" timestamp WITH time zone NOT NULL DEFAULT NOW(),
"end_date" timestamp WITH time zone,
"goal_frequency" goal_frequency NOT NULL,
"goal_target" bigint,
"goal_target_unit" text,
"user_id" uuid NOT NULL DEFAULT auth.uid()
);
ALTER TABLE
"public"."habits" enable ROW LEVEL SECURITY;
CREATE TABLE "public"."habits_progresses" (
"id" bigint generated by DEFAULT AS identity NOT NULL,
"habit_id" bigint NOT NULL,
"date" timestamp WITH time zone NOT NULL DEFAULT NOW(),
"goal_progress" bigint NOT NULL
);
ALTER TABLE
"public"."habits_progresses" enable ROW LEVEL SECURITY;
CREATE UNIQUE INDEX habits_id_key ON public.habits USING btree (id);
CREATE UNIQUE INDEX habits_pkey ON public.habits USING btree (id);
CREATE UNIQUE INDEX habits_progresses_id_key ON public.habits_progresses USING btree (id);
CREATE UNIQUE INDEX habits_progresses_pkey ON public.habits_progresses USING btree (id);
ALTER TABLE
"public"."habits"
ADD
CONSTRAINT "habits_pkey" PRIMARY KEY USING INDEX "habits_pkey";
ALTER TABLE
"public"."habits_progresses"
ADD
CONSTRAINT "habits_progresses_pkey" PRIMARY KEY USING INDEX "habits_progresses_pkey";
ALTER TABLE
"public"."habits"
ADD
CONSTRAINT "habits_id_key" UNIQUE USING INDEX "habits_id_key";
ALTER TABLE
"public"."habits"
ADD
CONSTRAINT "public_habits_user_id_fkey" FOREIGN KEY (user_id) REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE NOT valid;
ALTER TABLE
"public"."habits" validate CONSTRAINT "public_habits_user_id_fkey";
ALTER TABLE
"public"."habits_progresses"
ADD
CONSTRAINT "habits_progresses_id_key" UNIQUE USING INDEX "habits_progresses_id_key";
ALTER TABLE
"public"."habits_progresses"
ADD
CONSTRAINT "public_habits_progresses_habit_id_fkey" FOREIGN KEY (habit_id) REFERENCES habits(id) ON UPDATE CASCADE ON DELETE CASCADE NOT valid;
ALTER TABLE
"public"."habits_progresses" validate CONSTRAINT "public_habits_progresses_habit_id_fkey";
GRANT DELETE ON TABLE "public"."habits" TO "anon";
GRANT
INSERT
ON TABLE "public"."habits" TO "anon";
GRANT REFERENCES ON TABLE "public"."habits" TO "anon";
GRANT
SELECT
ON TABLE "public"."habits" TO "anon";
GRANT trigger ON TABLE "public"."habits" TO "anon";
GRANT TRUNCATE ON TABLE "public"."habits" TO "anon";
GRANT
UPDATE
ON TABLE "public"."habits" TO "anon";
GRANT DELETE ON TABLE "public"."habits" TO "authenticated";
GRANT
INSERT
ON TABLE "public"."habits" TO "authenticated";
GRANT REFERENCES ON TABLE "public"."habits" TO "authenticated";
GRANT
SELECT
ON TABLE "public"."habits" TO "authenticated";
GRANT trigger ON TABLE "public"."habits" TO "authenticated";
GRANT TRUNCATE ON TABLE "public"."habits" TO "authenticated";
GRANT
UPDATE
ON TABLE "public"."habits" TO "authenticated";
GRANT DELETE ON TABLE "public"."habits" TO "service_role";
GRANT
INSERT
ON TABLE "public"."habits" TO "service_role";
GRANT REFERENCES ON TABLE "public"."habits" TO "service_role";
GRANT
SELECT
ON TABLE "public"."habits" TO "service_role";
GRANT trigger ON TABLE "public"."habits" TO "service_role";
GRANT TRUNCATE ON TABLE "public"."habits" TO "service_role";
GRANT
UPDATE
ON TABLE "public"."habits" TO "service_role";
GRANT DELETE ON TABLE "public"."habits_progresses" TO "anon";
GRANT
INSERT
ON TABLE "public"."habits_progresses" TO "anon";
GRANT REFERENCES ON TABLE "public"."habits_progresses" TO "anon";
GRANT
SELECT
ON TABLE "public"."habits_progresses" TO "anon";
GRANT trigger ON TABLE "public"."habits_progresses" TO "anon";
GRANT TRUNCATE ON TABLE "public"."habits_progresses" TO "anon";
GRANT
UPDATE
ON TABLE "public"."habits_progresses" TO "anon";
GRANT DELETE ON TABLE "public"."habits_progresses" TO "authenticated";
GRANT
INSERT
ON TABLE "public"."habits_progresses" TO "authenticated";
GRANT REFERENCES ON TABLE "public"."habits_progresses" TO "authenticated";
GRANT
SELECT
ON TABLE "public"."habits_progresses" TO "authenticated";
GRANT trigger ON TABLE "public"."habits_progresses" TO "authenticated";
GRANT TRUNCATE ON TABLE "public"."habits_progresses" TO "authenticated";
GRANT
UPDATE
ON TABLE "public"."habits_progresses" TO "authenticated";
GRANT DELETE ON TABLE "public"."habits_progresses" TO "service_role";
GRANT
INSERT
ON TABLE "public"."habits_progresses" TO "service_role";
GRANT REFERENCES ON TABLE "public"."habits_progresses" TO "service_role";
GRANT
SELECT
ON TABLE "public"."habits_progresses" TO "service_role";
GRANT trigger ON TABLE "public"."habits_progresses" TO "service_role";
GRANT TRUNCATE ON TABLE "public"."habits_progresses" TO "service_role";
GRANT
UPDATE
ON TABLE "public"."habits_progresses" TO "service_role";
CREATE policy "Enable delete for users based on user_id" ON "public"."habits" AS permissive FOR DELETE TO authenticated USING ((auth.uid() = user_id));
CREATE policy "Enable insert for users based on user_id" ON "public"."habits" AS permissive FOR
INSERT
TO authenticated WITH CHECK ((auth.uid() = user_id));
CREATE policy "Enable select for users based on user_id" ON "public"."habits" AS permissive FOR
SELECT
TO authenticated USING ((auth.uid() = user_id));
CREATE policy "Enable update for users based on user_id" ON "public"."habits" AS permissive FOR
UPDATE
TO authenticated USING ((auth.uid() = user_id)) WITH CHECK ((auth.uid() = user_id));
CREATE policy "Enable delete for users based on user_id" ON "public"."habits_progresses" AS permissive FOR DELETE TO authenticated USING (
(
auth.uid() IN (
SELECT
habits.user_id
FROM
habits
WHERE
(habits_progresses.habit_id = habits.id)
)
)
);
CREATE policy "Enable insert for users based on user_id" ON "public"."habits_progresses" AS permissive FOR
INSERT
TO authenticated WITH CHECK (
(
auth.uid() IN (
SELECT
habits.user_id
FROM
habits
WHERE
(habits_progresses.habit_id = habits.id)
)
)
);
CREATE policy "Enable select for users based on user_id" ON "public"."habits_progresses" AS permissive FOR
SELECT
TO authenticated USING (
(
auth.uid() IN (
SELECT
habits.user_id
FROM
habits
WHERE
(habits_progresses.habit_id = habits.id)
)
)
);
CREATE policy "Enable update for users based on user_id" ON "public"."habits_progresses" AS permissive FOR
UPDATE
TO authenticated USING (
(
auth.uid() IN (
SELECT
habits.user_id
FROM
habits
WHERE
(habits_progresses.habit_id = habits.id)
)
)
) WITH CHECK (
(
auth.uid() IN (
SELECT
habits.user_id
FROM
habits
WHERE
(habits_progresses.habit_id = habits.id)
)
)
);