Skip to content

Commit 00849ed

Browse files
committed
feat: supabase
1 parent b843297 commit 00849ed

File tree

7 files changed

+163
-62
lines changed

7 files changed

+163
-62
lines changed

.env

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SUPABASE_URL=https://smjvdyhhwzdzvloweoxt.supabase.co
2+
SUPABASE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InNtanZkeWhod3pkenZsb3dlb3h0Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MzA5ODkzMDQsImV4cCI6MjA0NjU2NTMwNH0.-3NznwUsudhDwP03sXVOYufG-_ARGHDpXF99R9Ah8oc

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"lint": "next lint"
1010
},
1111
"dependencies": {
12+
"@supabase/supabase-js": "^2.46.1",
1213
"next": "latest",
1314
"pg": "^8.13.1",
1415
"pg-hstore": "^2.3.4",

src/app/api/blog/route.ts

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,25 @@
11
import { getPosts, addPost, deletePost } from "@/app/lib/data"
22
import { NextResponse } from "next/server"
33

4-
5-
export const GET = async (req: Request, res: Response) => {
6-
7-
try{
8-
const posts = getPosts()
4+
export const GET = async (req: Request) => {
5+
try {
6+
// Aguarda a resolução da promessa
7+
const posts = await getPosts();
98

10-
return NextResponse.json({message: 'OK', posts},{
11-
status: 200
12-
})
9+
return NextResponse.json({ message: 'OK', posts }, { status: 200 });
1310
} catch (err) {
14-
return NextResponse.json({message: 'Error', err}, {
15-
status: 500,
16-
})
11+
return NextResponse.json({ message: 'Error', err: err.message }, { status: 500 });
1712
}
1813
}
1914

20-
export const POST = async (req: Request, res: Response) => {
21-
const {title, desc} = await req.json()
15+
export const POST = async (req: Request) => {
16+
const { title } = await req.json();
2217

2318
try {
24-
const post = {title, desc, date: new Date(), id: Date.now().toString()}
25-
addPost(post)
26-
return NextResponse.json({message: "Ok", post}, {status: 201})
27-
} catch (err){
28-
return NextResponse.json({message: 'Error', err}, {
29-
status: 500
30-
})
19+
const post = { title };
20+
await addPost(post); // Garantir que a função addPost aguarde a inserção do post
21+
return NextResponse.json({ message: "Ok", post }, { status: 201 });
22+
} catch (err) {
23+
return NextResponse.json({ message: 'Error', err: err.message }, { status: 500 });
3124
}
3225
}
33-
34-
35-
36-

src/app/layout.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
import type { Metadata } from 'next'
22
import { Inter } from 'next/font/google'
3-
import sequelize from "./config/database";
4-
import "./models/Post"; // Garanta que o modelo Post foi importado
5-
6-
sequelize.sync({ force: false }).then(() => {
7-
console.log("Database synchronized");
8-
});
3+
import sequelize from "../config/database";
94

105
const inter = Inter({ subsets: ['latin'] })
116

src/app/lib/data.ts

Lines changed: 49 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,62 @@
1-
import Post from "../models/Post";
1+
import { supabase } from '../../config/database'; // Importando o cliente Supabase
22

3+
// Obter todos os posts
34
export const getPosts = async () => {
4-
return await Post.findAll();
5+
const { data, error } = await supabase
6+
.from('posts') // Nome da tabela
7+
.select('*'); // Seleciona todos os campos
8+
9+
console.log(data)
10+
11+
if (error) throw new Error(error.message);
12+
return data;
513
};
614

7-
export const addPost = async (post: { id: string; title: string; desc: string; date: Date }) => {
8-
await Post.create(post);
15+
// Adicionar um novo post
16+
export const addPost = async (post: { title: string; }) => {
17+
const { data, error } = await supabase
18+
.from('posts') // Nome da tabela
19+
.insert([
20+
{title: post.title }
21+
]);
22+
23+
if (error) throw new Error(error.message);
24+
return data;
925
};
1026

27+
// Deletar um post pelo id
1128
export const deletePost = async (id: string) => {
12-
const deleted = await Post.destroy({
13-
where: { id },
14-
});
15-
if (deleted === 0) throw new Error("NO POST FOUND");
29+
const { data, error } = await supabase
30+
.from('posts')
31+
.delete()
32+
.eq('id', id); // A condição de deletar pelo id
33+
34+
if (error) throw new Error(error.message);
35+
if (data.length === 0) throw new Error("NO POST FOUND");
36+
return data;
1637
};
1738

39+
// Atualizar um post pelo id
1840
export const updatePost = async (id: string, title: string, desc: string) => {
19-
const [updated] = await Post.update(
20-
{ title, desc },
21-
{
22-
where: { id },
23-
}
24-
);
25-
if (updated === 0) throw new Error("NO POST FOUND");
41+
const { data, error } = await supabase
42+
.from('posts')
43+
.update({ title, desc })
44+
.eq('id', id); // A condição de atualizar pelo id
45+
46+
if (error) throw new Error(error.message);
47+
if (data.length === 0) throw new Error("NO POST FOUND");
48+
return data;
2649
};
2750

51+
// Obter um post pelo id
2852
export const getById = async (id: string) => {
29-
const post = await Post.findByPk(id);
30-
if (!post) throw new Error("NO POST FOUND");
31-
return post;
32-
};
53+
const { data, error } = await supabase
54+
.from('posts')
55+
.select('*')
56+
.eq('id', id)
57+
.single(); // Para pegar apenas um resultado (usamos .single() para retornar um único item)
58+
59+
if (error) throw new Error(error.message);
60+
if (!data) throw new Error("NO POST FOUND");
61+
return data;
62+
};

src/config/database.ts

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
1-
const { Sequelize } = require('sequelize');
1+
import { createClient } from '@supabase/supabase-js';
22

3-
const sequelize = new Sequelize('database', 'username', 'password', {
4-
host: 'localhost',
5-
dialect: 'postgres',
6-
});
3+
// Substitua pelos valores reais da sua instância Supabase
4+
const SUPABASE_URL = process.env.SUPABASE_URL; // URL da sua instância do Supabase
5+
const SUPABASE_ANON_KEY = process.env.SUPABASE_KEY; // Chave pública anônima (encontrada no painel do Supabase)
76

8-
(async () => {
9-
try {
10-
await sequelize.authenticate();
11-
console.log('Connection has been established successfully.');
12-
} catch (error) {
13-
console.error('Unable to connect to the database:', error);
14-
}
15-
})();
7+
export const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY);

yarn.lock

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,63 @@
148148
resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.5.0.tgz#5143b0da9c536bfe8beddfeb68bb8b5d647cc7a3"
149149
integrity sha512-EF3948ckf3f5uPgYbQ6GhyA56Dmv8yg0+ir+BroRjwdxyZJsekhZzawOecC2rOTPCz173t7ZcR1HHZu0dZgOCw==
150150

151+
"@supabase/[email protected]":
152+
version "2.65.1"
153+
resolved "https://registry.yarnpkg.com/@supabase/auth-js/-/auth-js-2.65.1.tgz#4f6ab9ece2e6613d2648ecf5482800f3766479ea"
154+
integrity sha512-IA7i2Xq2SWNCNMKxwmPlHafBQda0qtnFr8QnyyBr+KaSxoXXqEzFCnQ1dGTy6bsZjVBgXu++o3qrDypTspaAPw==
155+
dependencies:
156+
"@supabase/node-fetch" "^2.6.14"
157+
158+
"@supabase/[email protected]":
159+
version "2.4.3"
160+
resolved "https://registry.yarnpkg.com/@supabase/functions-js/-/functions-js-2.4.3.tgz#ac1c696d3a1ebe00f60d5cea69b208078678ef8b"
161+
integrity sha512-sOLXy+mWRyu4LLv1onYydq+10mNRQ4rzqQxNhbrKLTLTcdcmS9hbWif0bGz/NavmiQfPs4ZcmQJp4WqOXlR4AQ==
162+
dependencies:
163+
"@supabase/node-fetch" "^2.6.14"
164+
165+
"@supabase/[email protected]", "@supabase/node-fetch@^2.6.14":
166+
version "2.6.15"
167+
resolved "https://registry.yarnpkg.com/@supabase/node-fetch/-/node-fetch-2.6.15.tgz#731271430e276983191930816303c44159e7226c"
168+
integrity sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==
169+
dependencies:
170+
whatwg-url "^5.0.0"
171+
172+
"@supabase/[email protected]":
173+
version "1.16.3"
174+
resolved "https://registry.yarnpkg.com/@supabase/postgrest-js/-/postgrest-js-1.16.3.tgz#d8e009e63b9152e46715982a6d706f1450c0af0d"
175+
integrity sha512-HI6dsbW68AKlOPofUjDTaosiDBCtW4XAm0D18pPwxoW3zKOE2Ru13Z69Wuys9fd6iTpfDViNco5sgrtnP0666A==
176+
dependencies:
177+
"@supabase/node-fetch" "^2.6.14"
178+
179+
"@supabase/[email protected]":
180+
version "2.10.7"
181+
resolved "https://registry.yarnpkg.com/@supabase/realtime-js/-/realtime-js-2.10.7.tgz#9e0cbecdffbfda3ae94639dbe0e55b06c6f79290"
182+
integrity sha512-OLI0hiSAqQSqRpGMTUwoIWo51eUivSYlaNBgxsXZE7PSoWh12wPRdVt0psUMaUzEonSB85K21wGc7W5jHnT6uA==
183+
dependencies:
184+
"@supabase/node-fetch" "^2.6.14"
185+
"@types/phoenix" "^1.5.4"
186+
"@types/ws" "^8.5.10"
187+
ws "^8.14.2"
188+
189+
"@supabase/[email protected]":
190+
version "2.7.1"
191+
resolved "https://registry.yarnpkg.com/@supabase/storage-js/-/storage-js-2.7.1.tgz#761482f237deec98a59e5af1ace18c7a5e0a69af"
192+
integrity sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==
193+
dependencies:
194+
"@supabase/node-fetch" "^2.6.14"
195+
196+
"@supabase/supabase-js@^2.46.1":
197+
version "2.46.1"
198+
resolved "https://registry.yarnpkg.com/@supabase/supabase-js/-/supabase-js-2.46.1.tgz#4d23cdf7b6aab45686dfe87577ca7d1371afd341"
199+
integrity sha512-HiBpd8stf7M6+tlr+/82L8b2QmCjAD8ex9YdSAKU+whB/SHXXJdus1dGlqiH9Umy9ePUuxaYmVkGd9BcvBnNvg==
200+
dependencies:
201+
"@supabase/auth-js" "2.65.1"
202+
"@supabase/functions-js" "2.4.3"
203+
"@supabase/node-fetch" "2.6.15"
204+
"@supabase/postgrest-js" "1.16.3"
205+
"@supabase/realtime-js" "2.10.7"
206+
"@supabase/storage-js" "2.7.1"
207+
151208
152209
version "0.5.2"
153210
resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d"
@@ -184,6 +241,11 @@
184241
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.2.tgz#0bdc211f8c2438cfadad26dc8c040a874d478aed"
185242
integrity sha512-RcdC3hOBOauLP+r/kRt27NrByYtDjsXyAuSbR87O6xpsvi763WI+5fbSIvYJrXnt9w4RuxhV6eAXfIs7aaf/FQ==
186243

244+
"@types/phoenix@^1.5.4":
245+
version "1.6.5"
246+
resolved "https://registry.yarnpkg.com/@types/phoenix/-/phoenix-1.6.5.tgz#5654e14ec7ad25334a157a20015996b6d7d2075e"
247+
integrity sha512-xegpDuR+z0UqG9fwHqNoy3rI7JDlvaPh2TY47Fl80oq6g+hXT+c/LEuE43X48clZ6lOfANl5WrPur9fYO1RJ/w==
248+
187249
"@types/prop-types@*":
188250
version "15.7.7"
189251
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.7.tgz#f9361f7b87fd5d8188b2c998db0a1f47e9fb391a"
@@ -215,6 +277,13 @@
215277
resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.12.2.tgz#760329e756e18a4aab82fc502b51ebdfebbe49f5"
216278
integrity sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==
217279

280+
"@types/ws@^8.5.10":
281+
version "8.5.13"
282+
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.13.tgz#6414c280875e2691d0d1e080b05addbf5cb91e20"
283+
integrity sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==
284+
dependencies:
285+
"@types/node" "*"
286+
218287
"@typescript-eslint/parser@^5.4.2 || ^6.0.0":
219288
version "6.7.3"
220289
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.3.tgz#aaf40092a32877439e5957e18f2d6a91c82cc2fd"
@@ -2129,6 +2198,11 @@ toposort-class@^1.0.1:
21292198
resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988"
21302199
integrity sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==
21312200

2201+
tr46@~0.0.3:
2202+
version "0.0.3"
2203+
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
2204+
integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
2205+
21322206
ts-api-utils@^1.0.1:
21332207
version "1.0.3"
21342208
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331"
@@ -2250,6 +2324,19 @@ [email protected]:
22502324
glob-to-regexp "^0.4.1"
22512325
graceful-fs "^4.1.2"
22522326

2327+
webidl-conversions@^3.0.0:
2328+
version "3.0.1"
2329+
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
2330+
integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
2331+
2332+
whatwg-url@^5.0.0:
2333+
version "5.0.0"
2334+
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
2335+
integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
2336+
dependencies:
2337+
tr46 "~0.0.3"
2338+
webidl-conversions "^3.0.0"
2339+
22532340
which-boxed-primitive@^1.0.2:
22542341
version "1.0.2"
22552342
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
@@ -2319,6 +2406,11 @@ wrappy@1:
23192406
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
23202407
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
23212408

2409+
ws@^8.14.2:
2410+
version "8.18.0"
2411+
resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc"
2412+
integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==
2413+
23222414
xtend@^4.0.0:
23232415
version "4.0.2"
23242416
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"

0 commit comments

Comments
 (0)