Skip to content

Commit c377d62

Browse files
committed
feat: all this
1 parent 855b7c7 commit c377d62

File tree

7 files changed

+2292
-88
lines changed

7 files changed

+2292
-88
lines changed

src/app/api/blog/[id]/route.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { deletePost, getById, updatePost } from "@/app/lib/data";
2+
import { NextResponse } from "next/server";
3+
4+
export const GET = async (req: Request) => {
5+
try {
6+
const id = req.url.split("blog/")[1];
7+
const post = getById(id);
8+
console.log(post);
9+
if (!post) {
10+
return NextResponse.json({ message: "Error" }, { status: 404 });
11+
}
12+
13+
return NextResponse.json({ message: "OK", post }, { status: 200 });
14+
} catch (err) {
15+
NextResponse.json({ message: "Error", err }, { status: 500 });
16+
}
17+
};
18+
19+
export const PUT = async (req: Request) => {
20+
try {
21+
const { title, desc } = await req.json();
22+
const id = req.url.split("blog/")[1];
23+
updatePost(id, title, desc);
24+
return NextResponse.json({ message: "OK" }, { status: 200 });
25+
} catch (err) {
26+
return NextResponse.json({message: 'Error'}, {status: 500})
27+
}
28+
};
29+
30+
export const DELETE = async (req: Request) => {
31+
try {
32+
const id = req.url.split("blog/")[1];
33+
34+
const post = getById(id);
35+
36+
if (!post) {
37+
return NextResponse.json({ message: "Error" }, { status: 404 });
38+
}
39+
deletePost(id);
40+
41+
return NextResponse.json({ message: "OK" }, { status: 200 });
42+
} catch (err) {
43+
NextResponse.json({ message: "Error", err }, { status: 500 });
44+
}
45+
};
46+
47+
export const POST = async (req: Request) => {
48+
console.log("GET");
49+
};

src/app/api/blog/posts.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"posts": [
3+
{
4+
"title": "sdfs",
5+
"id": "sdfs",
6+
"desc": "Teste",
7+
"date": "2023-09-29T21:15:25.841Z"
8+
},
9+
{
10+
"title": "ffff",
11+
"id": "sdfs",
12+
"desc": "Teste",
13+
"date": "2023-09-29T21:15:25.841Z"
14+
}
15+
]
16+
17+
}

src/app/api/blog/route.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { getPosts, addPost, deletePost } from "@/app/lib/data"
2+
import { NextResponse } from "next/server"
3+
4+
5+
export const GET = async (req: Request, res: Response) => {
6+
7+
try{
8+
const posts = getPosts()
9+
10+
return NextResponse.json({message: 'OK', posts},{
11+
status: 200
12+
})
13+
} catch (err) {
14+
return NextResponse.json({message: 'Error', err}, {
15+
status: 500,
16+
})
17+
}
18+
}
19+
20+
export const POST = async (req: Request, res: Response) => {
21+
const {title, desc} = await req.json()
22+
23+
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+
})
31+
}
32+
}
33+
34+
35+
36+

src/app/api/posts.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"title":"My third Post","desc":"This tutorial...","date":"2023-09-29T23:59:21.457Z","id":"1696031961457"},{"title":"My post","desc":"This tutorial...","date":"2023-09-29T23:59:28.357Z","id":"1696031968357"}]

src/app/lib/data.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import file from "../api/posts.json" assert { type: "json" };
2+
const fs = require("fs");
3+
const customer =
4+
{
5+
name: "d Co.",
6+
order_count: 0,
7+
address: "Po Box City",
8+
}
9+
10+
function saveJson(data:any){
11+
const jsonString = JSON.stringify(data);
12+
fs.writeFile("./src/app/api/posts.json", jsonString, (err) => {
13+
if (err) {
14+
console.log("Error writing file", err);
15+
} else {
16+
console.log("Successfully wrote file");
17+
}
18+
});
19+
}
20+
21+
22+
23+
type Post = {
24+
id: string;
25+
title: string;
26+
desc: string;
27+
date: Date;
28+
};
29+
30+
let posts: Post[] = file;
31+
32+
export const getPosts = () => posts;
33+
export const addPost = (post: Post) => {
34+
posts.push(post);
35+
saveJson(posts)
36+
};
37+
export const deletePost = (id: string) => {
38+
posts = posts.filter((post) => post.id !== id);
39+
saveJson(posts)
40+
};
41+
export const updatePost = (id: string, title: string, desc: string) => {
42+
const post = posts.find((post) => post.id === id);
43+
44+
45+
if (post) {
46+
post.title = title;
47+
post.desc = desc;
48+
saveJson(posts)
49+
} else {
50+
throw new Error("NO POST FOUND");
51+
}
52+
};
53+
54+
export const getById = (id: string) => {
55+
return posts.find((post) => post.id === id);
56+
};

src/app/page.tsx

Lines changed: 3 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -3,93 +3,8 @@ import styles from './page.module.css'
33

44
export default function Home() {
55
return (
6-
<main className={styles.main}>
7-
<div className={styles.description}>
8-
<p>
9-
Get started by editing&nbsp;
10-
<code className={styles.code}>src/app/page.tsx</code>
11-
</p>
12-
<div>
13-
<a
14-
href="https://vercel.com?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
15-
target="_blank"
16-
rel="noopener noreferrer"
17-
>
18-
By{' '}
19-
<Image
20-
src="/vercel.svg"
21-
alt="Vercel Logo"
22-
className={styles.vercelLogo}
23-
width={100}
24-
height={24}
25-
priority
26-
/>
27-
</a>
28-
</div>
29-
</div>
30-
31-
<div className={styles.center}>
32-
<Image
33-
className={styles.logo}
34-
src="/next.svg"
35-
alt="Next.js Logo"
36-
width={180}
37-
height={37}
38-
priority
39-
/>
40-
</div>
41-
42-
<div className={styles.grid}>
43-
<a
44-
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
45-
className={styles.card}
46-
target="_blank"
47-
rel="noopener noreferrer"
48-
>
49-
<h2>
50-
Docs <span>-&gt;</span>
51-
</h2>
52-
<p>Find in-depth information about Next.js features and API.</p>
53-
</a>
54-
55-
<a
56-
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
57-
className={styles.card}
58-
target="_blank"
59-
rel="noopener noreferrer"
60-
>
61-
<h2>
62-
Learn <span>-&gt;</span>
63-
</h2>
64-
<p>Learn about Next.js in an interactive course with&nbsp;quizzes!</p>
65-
</a>
66-
67-
<a
68-
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
69-
className={styles.card}
70-
target="_blank"
71-
rel="noopener noreferrer"
72-
>
73-
<h2>
74-
Templates <span>-&gt;</span>
75-
</h2>
76-
<p>Explore the Next.js 13 playground.</p>
77-
</a>
78-
79-
<a
80-
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
81-
className={styles.card}
82-
target="_blank"
83-
rel="noopener noreferrer"
84-
>
85-
<h2>
86-
Deploy <span>-&gt;</span>
87-
</h2>
88-
<p>
89-
Instantly deploy your Next.js site to a shareable URL with Vercel.
90-
</p>
91-
</a>
92-
</div>
93-
</main>
6+
<main>
7+
<p>My Api</p>
8+
</main>
949
)
9510
}

0 commit comments

Comments
 (0)