Skip to content

Commit

Permalink
Merge pull request #26 from midday-ai/bryce/migrations-seed
Browse files Browse the repository at this point in the history
Migrations seed
  • Loading branch information
pontusab authored Sep 2, 2024
2 parents 6ed9c03 + 4fd5e3f commit 42c4c91
Show file tree
Hide file tree
Showing 21 changed files with 478 additions and 44 deletions.
19 changes: 19 additions & 0 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Check
on:
push:
paths:
- '**'
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: Install dependencies
run: bun install
- name: 🔦 Run linter
run: bun run lint
- name: 🪐 Check TypeScript
run: bun run typecheck
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ bun dev:web // starts the web app in development mode
bun dev:app // starts the app in development mode
bun dev:api // starts the api in development mode
bun dev:email // starts the email app in development mode

// Database
bun migrate // run migrations
bun seed // run seed
```

## How to use
Expand Down
6 changes: 5 additions & 1 deletion apps/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
"private": true,
"scripts": {
"dev": "supabase start",
"login": "supabase login"
"login": "supabase login",
"migrate": "supabase migration up",
"seed": "supabase db seed generate && supabase db seed run",
"reset": "supabase db reset",
"generate": "supabase gen types --lang=typescript --local --schema public > ../../packages/supabase/src/types/db.ts"
},
"dependencies": {
"supabase": "^1.191.3"
Expand Down
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
create function public.handle_new_user() returns trigger
language plpgsql security definer set search_path = ''
as $$
begin
insert into public.users (id, email, full_name)
values (
new.id,
new.email,
new.raw_user_meta_data ->> 'full_name'
);
return new;
end;
$$;

-- trigger the function every time a user is created
create trigger on_auth_user_created
after insert on auth.users
for each row
execute function public.handle_new_user();
35 changes: 35 additions & 0 deletions apps/api/supabase/migrations/20240901155538_create_users_table.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
-- create users table
create table public.users (
id uuid primary key,
email text unique not null,
full_name text,
avatar_url text,
created_at timestamp with time zone default now(),
updated_at timestamp with time zone default now(),
constraint fk_auth_user foreign key (id) references auth.users(id) on delete cascade
);

-- enable row level security (rls)
alter table public.users enable row level security;

-- create a trigger to update the updated_at column
create or replace function update_updated_at()
returns trigger as $$
begin
new.updated_at = now();
return new;
end;
$$ language plpgsql;

create trigger users_updated_at
before update on public.users
for each row
execute function update_updated_at();

-- create a policy to allow users to read their own profile
create policy select_own_profile on public.users
for select using (auth.uid() = id);

-- create a policy to allow users to update their own profile
create policy update_own_profile on public.users
for update using (auth.uid() = id);
61 changes: 61 additions & 0 deletions apps/api/supabase/migrations/20240901165124_create_posts_table.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
-- create posts table
create table posts (
id uuid primary key default gen_random_uuid(),
user_id uuid not null,
title text not null,
content text not null,
created_at timestamptz not null default now(),
updated_at timestamptz not null default now()
);

-- add foreign key constraint
alter table
posts
add
constraint fk_posts_user foreign key (user_id) references public.users(id) on
delete
cascade;

-- create index for faster queries
create index idx_posts_user_id on posts(user_id);

-- add rls policies
alter table
posts enable row level security;

-- policy to allow read access for all authenticated users
create policy "allow read access for all authenticated users" on posts for
select
to authenticated
using (true);

-- policy to allow users to insert their own posts
create policy "allow insert for authenticated users" on posts for
insert
with check (auth.uid() = user_id);

-- policy to allow users to update their own posts
create policy "allow update for post owners" on posts for
update
using (auth.uid() = user_id);

-- policy to allow users to delete their own posts
create policy "allow delete for post owners" on posts for
delete
using (auth.uid() = user_id);

-- function to update the updated_at timestamp
create
or replace function update_updated_at() returns trigger as $$ begin
new.updated_at = now();

return new;

end;

$$ language plpgsql;

-- trigger to call the update_updated_at function
create trigger update_posts_updated_at before
update
on posts for each row execute function update_updated_at();
122 changes: 122 additions & 0 deletions apps/api/supabase/seed.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
INSERT INTO
auth.users (
instance_id,
id,
aud,
role,
email,
encrypted_password,
email_confirmed_at,
invited_at,
confirmation_token,
confirmation_sent_at,
recovery_token,
recovery_sent_at,
email_change_token_new,
email_change,
email_change_sent_at,
last_sign_in_at,
raw_app_meta_data,
raw_user_meta_data,
is_super_admin,
created_at,
updated_at,
phone,
phone_confirmed_at,
phone_change,
phone_change_token,
phone_change_sent_at,
email_change_token_current,
email_change_confirm_status,
banned_until,
reauthentication_token,
reauthentication_sent_at,
is_sso_user,
deleted_at,
is_anonymous
)
VALUES
(
'00000000-0000-0000-0000-000000000000',
'aec53558-767e-4408-b4d6-1c1e6f17ffe5',
'authenticated',
'authenticated',
'[email protected]',
'$2a$10$nnqTShcTX48N6QWWjbPUee.wrGz1kGx/uq5lORviCm.fn04W1BeRe',
'2024-09-01 17:21:01.462788+00',
NULL,
'',
NULL,
'',
NULL,
'',
'',
NULL,
NULL,
'{"provider": "email", "providers": ["email"]}',
'{"username": "username", "full_name": "Test User"}',
NULL,
'2024-09-01 17:21:01.455486+00',
'2024-09-01 17:21:01.46295+00',
NULL,
NULL,
'',
'',
NULL,
'',
0,
NULL,
'',
NULL,
false,
NULL,
false
);

INSERT INTO
auth.identities (
provider_id,
user_id,
identity_data,
provider,
last_sign_in_at,
created_at,
updated_at,
id
)
VALUES
(
'aec53558-767e-4408-b4d6-1c1e6f17ffe5',
'aec53558-767e-4408-b4d6-1c1e6f17ffe5',
'{"sub": "aec53558-767e-4408-b4d6-1c1e6f17ffe5", "email": "[email protected]", "email_verified": false, "phone_verified": false}',
'email',
'2024-09-01 17:21:01.459821+00',
'2024-09-01 17:21:01.459849+00',
'2024-09-01 17:21:01.459849+00',
'c5e81668-437b-47c2-83e2-84b8566b3018'
);

-- Seed data for posts
INSERT INTO
posts (user_id, title, content)
VALUES
(
'aec53558-767e-4408-b4d6-1c1e6f17ffe5',
'React Server Components: A Game Changer',
'React Server Components are revolutionizing how we build React applications. They allow for better performance and smaller bundle sizes by running components on the server. This new paradigm is especially powerful when combined with frameworks like Next.js 13+.'
),
(
'aec53558-767e-4408-b4d6-1c1e6f17ffe5',
'The Rise of Bun: A New JavaScript Runtime',
'Bun is gaining traction as a fast all-in-one JavaScript runtime. It aims to replace Node.js, npm, yarn, and more. With its focus on performance and developer experience, Bun is definitely worth keeping an eye on in 2024.'
),
(
'aec53558-767e-4408-b4d6-1c1e6f17ffe5',
'TypeScript 5.0: What''s New and Exciting',
'TypeScript 5.0 brings several new features and improvements, including decorators, const type parameters, and more. These enhancements continue to make TypeScript an essential tool for building robust JavaScript applications.'
),
(
'aec53558-767e-4408-b4d6-1c1e6f17ffe5',
'The State of JavaScript Frameworks in 2024',
'While React remains dominant, frameworks like Svelte and Solid are gaining popularity for their performance and simplicity. Meanwhile, meta-frameworks like Next.js and Remix are becoming increasingly important in the React ecosystem.'
);
15 changes: 15 additions & 0 deletions apps/app/src/app/[locale]/(dashboard)/posts/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { PostsLoading } from "@/components/posts/posts.loading";
import { PostsServer } from "@/components/posts/posts.server";
import { Suspense } from "react";

export const metadata = {
title: "Posts",
};

export default function Page() {
return (
<Suspense fallback={<PostsLoading />}>
<PostsServer />
</Suspense>
);
}
19 changes: 0 additions & 19 deletions apps/app/src/app/[locale]/(dashboard)/settings/page.tsx

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
export function UsersLoading() {
export function PostsLoading() {
return <div>Loading...</div>;
}
13 changes: 13 additions & 0 deletions apps/app/src/components/posts/posts.server.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { getPosts } from "@v1/supabase/queries";

export async function PostsServer() {
const { data } = await getPosts();

return (
<div>
{data?.map((post) => (
<div key={post.id}>{post.title}</div>
))}
</div>
);
}
13 changes: 0 additions & 13 deletions apps/app/src/components/users.server.tsx

This file was deleted.

Binary file modified bun.lockb
Binary file not shown.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"lint:repo:fix": "bunx sherif@latest --fix",
"typecheck": "turbo typecheck"
},
"devDependencies": {
"dependencies": {
"@biomejs/biome": "1.8.3",
"@manypkg/cli": "^0.21.4",
"@t3-oss/env-nextjs": "^0.11.1",
Expand Down
3 changes: 1 addition & 2 deletions packages/supabase/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
"clean": "rm -rf .turbo node_modules",
"lint": "biome check .",
"format": "biome format --write .",
"typecheck": "tsc --noEmit",
"db:generate": "supabase gen types --lang=typescript --project-id $PROJECT_ID --schema public > src/types/db.ts"
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@supabase/ssr": "^0.5.1",
Expand Down
3 changes: 2 additions & 1 deletion packages/supabase/src/mutations/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { logger } from "@v1/logger";
import { createClient } from "@v1/supabase/server";
import type { Database, Tables, TablesUpdate } from "../types";

export async function updateUser(userId: string, data: unknown) {
export async function updateUser(userId: string, data: TablesUpdate<"users">) {
const supabase = createClient();

try {
Expand Down
Loading

0 comments on commit 42c4c91

Please sign in to comment.