305 lines
7.7 KiB
SQL
305 lines
7.7 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 gen_random_uuid()
|
|
);
|
|
|
|
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 public USING ((auth.uid() = user_id));
|
|
|
|
CREATE policy "Enable insert for users based on user_id" ON "public"."habits" AS permissive FOR
|
|
INSERT
|
|
TO public WITH CHECK ((auth.uid() = user_id));
|
|
|
|
CREATE policy "Enable select for users based on user_id" ON "public"."habits" AS permissive FOR
|
|
SELECT
|
|
TO public USING ((auth.uid() = user_id));
|
|
|
|
CREATE policy "Enable update for users based on user_id" ON "public"."habits" AS permissive FOR
|
|
UPDATE
|
|
TO public 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 public USING (
|
|
(
|
|
EXISTS (
|
|
SELECT
|
|
1
|
|
FROM
|
|
(
|
|
habits_progresses habit_progress
|
|
JOIN habits habit ON ((habit_progress.habit_id = habit.id))
|
|
)
|
|
WHERE
|
|
(
|
|
(habit_progress.id = habits_progresses.id)
|
|
AND (habit.user_id = auth.uid())
|
|
)
|
|
)
|
|
)
|
|
);
|
|
|
|
CREATE policy "Enable insert for users based on user_id" ON "public"."habits_progresses" AS permissive FOR
|
|
INSERT
|
|
TO public WITH CHECK (
|
|
(
|
|
EXISTS (
|
|
SELECT
|
|
1
|
|
FROM
|
|
(
|
|
habits_progresses habit_progress
|
|
JOIN habits habit ON ((habit_progress.habit_id = habit.id))
|
|
)
|
|
WHERE
|
|
(
|
|
(habit_progress.id = habits_progresses.id)
|
|
AND (habit.user_id = auth.uid())
|
|
)
|
|
)
|
|
)
|
|
);
|
|
|
|
CREATE policy "Enable select for users based on user_id" ON "public"."habits_progresses" AS permissive FOR
|
|
SELECT
|
|
TO public USING (
|
|
(
|
|
EXISTS (
|
|
SELECT
|
|
1
|
|
FROM
|
|
(
|
|
habits_progresses habit_progress
|
|
JOIN habits habit ON ((habit_progress.habit_id = habit.id))
|
|
)
|
|
WHERE
|
|
(
|
|
(habit_progress.id = habits_progresses.id)
|
|
AND (habit.user_id = auth.uid())
|
|
)
|
|
)
|
|
)
|
|
);
|
|
|
|
CREATE policy "Enable update for users based on user_id" ON "public"."habits_progresses" AS permissive FOR
|
|
UPDATE
|
|
TO public USING (
|
|
(
|
|
EXISTS (
|
|
SELECT
|
|
1
|
|
FROM
|
|
(
|
|
habits_progresses habit_progress
|
|
JOIN habits habit ON ((habit_progress.habit_id = habit.id))
|
|
)
|
|
WHERE
|
|
(
|
|
(habit_progress.id = habits_progresses.id)
|
|
AND (habit.user_id = auth.uid())
|
|
)
|
|
)
|
|
)
|
|
) WITH CHECK (
|
|
(
|
|
EXISTS (
|
|
SELECT
|
|
1
|
|
FROM
|
|
(
|
|
habits_progresses habit_progress
|
|
JOIN habits habit ON ((habit_progress.habit_id = habit.id))
|
|
)
|
|
WHERE
|
|
(
|
|
(habit_progress.id = habits_progresses.id)
|
|
AND (habit.user_id = auth.uid())
|
|
)
|
|
)
|
|
)
|
|
);
|