Skip to content

Commit 013732b

Browse files
Merge PR: Implement blog API & refactor user API
2 parents 84eb2fe + c64e254 commit 013732b

23 files changed

Lines changed: 3736 additions & 381 deletions

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"test": "dotenv -e .env.test -o -- vitest",
4040
"dev": "tsx watch --env-file=.env ./src/server.ts",
4141
"build": "tsc --pretty --project tsconfig.prod.json",
42-
"test:db:push": "dotenv -e .env.test -o -- prisma db push --skip-generate",
42+
"test:db:push": "dotenv -e .env.test -o -- prisma db push --skip-generate --force-reset",
4343
"pg:down": "docker compose -f docker-compose.postgres.yml down --remove-orphans",
4444
"pg:stop": "docker compose -f docker-compose.postgres.yml stop",
4545
"pg:up": "docker compose -f docker-compose.postgres.yml up"
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
-- AlterTable
2+
ALTER TABLE "users" ADD COLUMN "bio" TEXT;
3+
4+
-- CreateTable
5+
CREATE TABLE "comments" (
6+
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
7+
"author_id" UUID NOT NULL,
8+
"post_id" UUID NOT NULL,
9+
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
10+
"updated_at" TIMESTAMP(3) NOT NULL,
11+
"content" TEXT NOT NULL,
12+
13+
CONSTRAINT "comments_pkey" PRIMARY KEY ("id")
14+
);
15+
16+
-- CreateTable
17+
CREATE TABLE "posts" (
18+
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
19+
"author_id" UUID NOT NULL,
20+
"published" BOOLEAN NOT NULL DEFAULT false,
21+
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
22+
"updated_at" TIMESTAMP(3) NOT NULL,
23+
"content" TEXT NOT NULL,
24+
"title" TEXT NOT NULL,
25+
26+
CONSTRAINT "posts_pkey" PRIMARY KEY ("id")
27+
);
28+
29+
-- CreateTable
30+
CREATE TABLE "categories" (
31+
"name" TEXT NOT NULL
32+
);
33+
34+
-- CreateTable
35+
CREATE TABLE "categories_on_posts" (
36+
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
37+
"post_id" UUID NOT NULL,
38+
"category_name" TEXT NOT NULL,
39+
40+
CONSTRAINT "categories_on_posts_pkey" PRIMARY KEY ("id")
41+
);
42+
43+
-- CreateTable
44+
CREATE TABLE "votes_on_posts" (
45+
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
46+
"user_id" UUID NOT NULL,
47+
"post_id" UUID NOT NULL,
48+
"is_upvote" BOOLEAN NOT NULL DEFAULT true,
49+
50+
CONSTRAINT "votes_on_posts_pkey" PRIMARY KEY ("id")
51+
);
52+
53+
-- CreateIndex
54+
CREATE UNIQUE INDEX "categories_name_key" ON "categories"("name");
55+
56+
-- CreateIndex
57+
CREATE UNIQUE INDEX "categories_on_posts_post_id_category_name_key" ON "categories_on_posts"("post_id", "category_name");
58+
59+
-- CreateIndex
60+
CREATE UNIQUE INDEX "votes_on_posts_user_id_post_id_key" ON "votes_on_posts"("user_id", "post_id");
61+
62+
-- AddForeignKey
63+
ALTER TABLE "comments" ADD CONSTRAINT "comments_author_id_fkey" FOREIGN KEY ("author_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
64+
65+
-- AddForeignKey
66+
ALTER TABLE "comments" ADD CONSTRAINT "comments_post_id_fkey" FOREIGN KEY ("post_id") REFERENCES "posts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
67+
68+
-- AddForeignKey
69+
ALTER TABLE "posts" ADD CONSTRAINT "posts_author_id_fkey" FOREIGN KEY ("author_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
70+
71+
-- AddForeignKey
72+
ALTER TABLE "categories_on_posts" ADD CONSTRAINT "categories_on_posts_post_id_fkey" FOREIGN KEY ("post_id") REFERENCES "posts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
73+
74+
-- AddForeignKey
75+
ALTER TABLE "categories_on_posts" ADD CONSTRAINT "categories_on_posts_category_name_fkey" FOREIGN KEY ("category_name") REFERENCES "categories"("name") ON DELETE CASCADE ON UPDATE CASCADE;
76+
77+
-- AddForeignKey
78+
ALTER TABLE "votes_on_posts" ADD CONSTRAINT "votes_on_posts_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
79+
80+
-- AddForeignKey
81+
ALTER TABLE "votes_on_posts" ADD CONSTRAINT "votes_on_posts_post_id_fkey" FOREIGN KEY ("post_id") REFERENCES "posts"("id") ON DELETE CASCADE ON UPDATE CASCADE;

prisma/schema.prisma

Lines changed: 68 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,76 @@ datasource db {
99
}
1010

1111
model User {
12+
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
13+
password String @db.Char(60)
14+
fullname String @db.VarChar(100)
15+
username String @unique @db.VarChar(50)
16+
isAdmin Boolean @default(false) @map("is_admin")
17+
createdAt DateTime @default(now()) @map("created_at")
18+
updatedAt DateTime @updatedAt @map("updated_at")
19+
votesOnPosts VoteOnPost[]
20+
comments Comment[]
21+
posts Post[]
22+
bio String?
23+
24+
@@map("users")
25+
}
26+
27+
model Comment {
1228
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
13-
isAdmin Boolean @default(false) @map("is_admin")
14-
fullname String @db.VarChar(100)
15-
username String @unique @db.VarChar(50)
16-
password String @db.Char(60)
29+
author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
30+
authorId String @map("author_id") @db.Uuid
31+
post Post @relation(fields: [postId], references: [id], onDelete: Cascade)
32+
postId String @map("post_id") @db.Uuid
1733
createdAt DateTime @default(now()) @map("created_at")
1834
updatedAt DateTime @updatedAt @map("updated_at")
35+
content String
1936
20-
@@map("users")
37+
@@map("comments")
38+
}
39+
40+
model Post {
41+
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
42+
author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
43+
authorId String @map("author_id") @db.Uuid
44+
published Boolean @default(false)
45+
createdAt DateTime @default(now()) @map("created_at")
46+
updatedAt DateTime @updatedAt @map("updated_at")
47+
categories CategoriesOnPosts[]
48+
votes VoteOnPost[]
49+
comments Comment[]
50+
content String
51+
title String
52+
53+
@@map("posts")
54+
}
55+
56+
model Category {
57+
name String @unique
58+
posts CategoriesOnPosts[]
59+
60+
@@map("categories")
61+
}
62+
63+
model CategoriesOnPosts {
64+
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
65+
post Post @relation(fields: [postId], references: [id], onDelete: Cascade)
66+
postId String @map("post_id") @db.Uuid
67+
category Category @relation(fields: [categoryName], references: [name], onDelete: Cascade)
68+
categoryName String @map("category_name")
69+
70+
@@unique([postId, categoryName])
71+
@@map("categories_on_posts")
72+
}
73+
74+
model VoteOnPost {
75+
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
76+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
77+
userId String @map("user_id") @db.Uuid
78+
post Post @relation(fields: [postId], references: [id], onDelete: Cascade)
79+
postId String @map("post_id") @db.Uuid
80+
isUpvote Boolean @default(true) @map("is_upvote")
81+
82+
@@unique([userId, postId])
83+
@@map("votes_on_posts")
2184
}

requests/posts.rest

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
GET http://127.0.0.1:8080/api/v1/posts
2+
3+
###
4+
5+
GET http://127.0.0.1:8080/api/v1/posts?q=public
6+
7+
###
8+
9+
GET http://127.0.0.1:8080/api/v1/posts?q=awesome
10+
11+
###
12+
13+
GET http://127.0.0.1:8080/api/v1/posts?q=amazing
14+
15+
###
16+
17+
GET http://127.0.0.1:8080/api/v1/posts?categories=fantasy&categories=mist
18+
19+
###
20+
21+
GET http://127.0.0.1:8080/api/v1/posts?categories=comedy,fantasy
22+
23+
###
24+
25+
GET http://127.0.0.1:8080/api/v1/posts?categories=fantasy&categories=mist,comedy
26+
27+
###
28+
29+
# With JWT to get the private posts
30+
GET http://127.0.0.1:8080/api/v1/posts
31+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNmNDU3ODYxLTBhYmItNDBhOS05NjAzLWRjYWFkNDZmMjI0YyIsInVzZXJuYW1lIjoibm93aGVyZV9tYW4iLCJmdWxsbmFtZSI6Ik5vd2hlcmUtTWFuIiwiaWF0IjoxNzQ2OTQ4ODMyLCJleHAiOjE3NDcyMDgwMzJ9.DaSOc9DMVVkwOp5WhgZrn4nnsWn9o34VF2AtNMdYmgE
32+
33+
###
34+
35+
GET http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151
36+
37+
###
38+
39+
GET http://127.0.0.1:8080/api/v1/posts/593f9987-4ea5-47e2-8be2-0155771761ad
40+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNmNDU3ODYxLTBhYmItNDBhOS05NjAzLWRjYWFkNDZmMjI0YyIsInVzZXJuYW1lIjoibm93aGVyZV9tYW4iLCJmdWxsbmFtZSI6Ik5vd2hlcmUtTWFuIiwiaWF0IjoxNzQ2OTQ4ODMyLCJleHAiOjE3NDcyMDgwMzJ9.DaSOc9DMVVkwOp5WhgZrn4nnsWn9o34VF2AtNMdYmgE
41+
42+
###
43+
44+
GET http://127.0.0.1:8080/api/v1/posts/count
45+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNmNDU3ODYxLTBhYmItNDBhOS05NjAzLWRjYWFkNDZmMjI0YyIsInVzZXJuYW1lIjoibm93aGVyZV9tYW4iLCJmdWxsbmFtZSI6Ik5vd2hlcmUtTWFuIiwiaWF0IjoxNzQ2OTQ4ODMyLCJleHAiOjE3NDcyMDgwMzJ9.DaSOc9DMVVkwOp5WhgZrn4nnsWn9o34VF2AtNMdYmgE
46+
47+
###
48+
49+
GET http://127.0.0.1:8080/api/v1/posts/categories/count
50+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNmNDU3ODYxLTBhYmItNDBhOS05NjAzLWRjYWFkNDZmMjI0YyIsInVzZXJuYW1lIjoibm93aGVyZV9tYW4iLCJmdWxsbmFtZSI6Ik5vd2hlcmUtTWFuIiwiaWF0IjoxNzQ2OTQ4ODMyLCJleHAiOjE3NDcyMDgwMzJ9.DaSOc9DMVVkwOp5WhgZrn4nnsWn9o34VF2AtNMdYmgE
51+
52+
###
53+
54+
GET http://127.0.0.1:8080/api/v1/posts/comments/count
55+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNmNDU3ODYxLTBhYmItNDBhOS05NjAzLWRjYWFkNDZmMjI0YyIsInVzZXJuYW1lIjoibm93aGVyZV9tYW4iLCJmdWxsbmFtZSI6Ik5vd2hlcmUtTWFuIiwiaWF0IjoxNzQ2OTQ4ODMyLCJleHAiOjE3NDcyMDgwMzJ9.DaSOc9DMVVkwOp5WhgZrn4nnsWn9o34VF2AtNMdYmgE
56+
57+
###
58+
59+
GET http://127.0.0.1:8080/api/v1/posts/votes/count
60+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNmNDU3ODYxLTBhYmItNDBhOS05NjAzLWRjYWFkNDZmMjI0YyIsInVzZXJuYW1lIjoibm93aGVyZV9tYW4iLCJmdWxsbmFtZSI6Ik5vd2hlcmUtTWFuIiwiaWF0IjoxNzQ2OTQ4ODMyLCJleHAiOjE3NDcyMDgwMzJ9.DaSOc9DMVVkwOp5WhgZrn4nnsWn9o34VF2AtNMdYmgE
61+
62+
###
63+
64+
GET http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151/categories/count
65+
66+
###
67+
68+
GET http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151/comments/count
69+
70+
###
71+
72+
GET http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151/votes/count
73+
74+
###
75+
76+
POST http://127.0.0.1:8080/api/v1/posts
77+
Content-Type: application/json
78+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNmNDU3ODYxLTBhYmItNDBhOS05NjAzLWRjYWFkNDZmMjI0YyIsInVzZXJuYW1lIjoibm93aGVyZV9tYW4iLCJmdWxsbmFtZSI6Ik5vd2hlcmUtTWFuIiwiaWF0IjoxNzQ2OTQ4ODMyLCJleHAiOjE3NDcyMDgwMzJ9.DaSOc9DMVVkwOp5WhgZrn4nnsWn9o34VF2AtNMdYmgE
79+
80+
{
81+
"title": "The Amazing Blog",
82+
"content": "I am writing this blog to tell you some amazing things that I don't remember now.",
83+
"published": false,
84+
"categories": ["Comedy", "Fantasy"]
85+
}
86+
87+
###
88+
89+
POST http://127.0.0.1:8080/api/v1/posts
90+
Content-Type: application/json
91+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNmNDU3ODYxLTBhYmItNDBhOS05NjAzLWRjYWFkNDZmMjI0YyIsInVzZXJuYW1lIjoibm93aGVyZV9tYW4iLCJmdWxsbmFtZSI6Ik5vd2hlcmUtTWFuIiwiaWF0IjoxNzQ2OTQ4ODMyLCJleHAiOjE3NDcyMDgwMzJ9.DaSOc9DMVVkwOp5WhgZrn4nnsWn9o34VF2AtNMdYmgE
92+
93+
{
94+
"title": "Public Blog",
95+
"content": "I am writing this blog to tell you something in public, ...",
96+
"published": true,
97+
"categories": ["Comedy", "Fantasy"]
98+
}
99+
100+
###
101+
102+
POST http://127.0.0.1:8080/api/v1/posts
103+
Content-Type: application/json
104+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNmNDU3ODYxLTBhYmItNDBhOS05NjAzLWRjYWFkNDZmMjI0YyIsInVzZXJuYW1lIjoibm93aGVyZV9tYW4iLCJmdWxsbmFtZSI6Ik5vd2hlcmUtTWFuIiwiaWF0IjoxNzQ2OTQ4ODMyLCJleHAiOjE3NDcyMDgwMzJ9.DaSOc9DMVVkwOp5WhgZrn4nnsWn9o34VF2AtNMdYmgE
105+
106+
{
107+
"title": "Awesome Public Blog",
108+
"content": "I am writing this blog to tell you something, you are amazing",
109+
"published": true,
110+
"categories": ["Mist"]
111+
}
112+
113+
###
114+
115+
PUT http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151
116+
Content-Type: application/json
117+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNmNDU3ODYxLTBhYmItNDBhOS05NjAzLWRjYWFkNDZmMjI0YyIsInVzZXJuYW1lIjoibm93aGVyZV9tYW4iLCJmdWxsbmFtZSI6Ik5vd2hlcmUtTWFuIiwiaWF0IjoxNzQ2OTQ4ODMyLCJleHAiOjE3NDcyMDgwMzJ9.DaSOc9DMVVkwOp5WhgZrn4nnsWn9o34VF2AtNMdYmgE
118+
119+
{
120+
"title": "Public Blog",
121+
"content": "I am writing this blog to tell you, good morning.",
122+
"published": true,
123+
"categories": ["Entertainment"]
124+
}
125+
126+
###
127+
128+
DELETE http://127.0.0.1:8080/api/v1/posts/dc03a266-1fb6-447b-956b-8e5926ac513e
129+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNmNDU3ODYxLTBhYmItNDBhOS05NjAzLWRjYWFkNDZmMjI0YyIsInVzZXJuYW1lIjoibm93aGVyZV9tYW4iLCJmdWxsbmFtZSI6Ik5vd2hlcmUtTWFuIiwiaWF0IjoxNzQ2OTQ4ODMyLCJleHAiOjE3NDcyMDgwMzJ9.DaSOc9DMVVkwOp5WhgZrn4nnsWn9o34VF2AtNMdYmgE
130+
131+
###
132+
133+
GET http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151/comments
134+
135+
###
136+
137+
GET http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151/categories
138+
139+
###
140+
141+
POST http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151/comments
142+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNjYTdkMTJkLTdkMGQtNDdmMC1hZDdiLWRkNjhjYmRkYWNhNSIsInVzZXJuYW1lIjoic29tZXdoZXJlX21hbiIsImZ1bGxuYW1lIjoiU29tZXdoZXJlLU1hbiIsImlhdCI6MTc0NzAzODM2NSwiZXhwIjoxNzQ3Mjk3NTY1fQ.O95hAI0JA6RYncWxPcNxIkR3-XRVaNMilBIQ-OviDuo
143+
Content-Type: application/json
144+
145+
{
146+
"content": "Keep it up!"
147+
}
148+
149+
###
150+
151+
PUT http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151/comments/7dbd4bc4-786c-4db8-a4bc-2783666c14f6
152+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNjYTdkMTJkLTdkMGQtNDdmMC1hZDdiLWRkNjhjYmRkYWNhNSIsInVzZXJuYW1lIjoic29tZXdoZXJlX21hbiIsImZ1bGxuYW1lIjoiU29tZXdoZXJlLU1hbiIsImlhdCI6MTc0NzAzODM2NSwiZXhwIjoxNzQ3Mjk3NTY1fQ.O95hAI0JA6RYncWxPcNxIkR3-XRVaNMilBIQ-OviDuo
153+
Content-Type: application/json
154+
155+
{
156+
"content": "Keep it Up"
157+
}
158+
159+
###
160+
161+
DELETE http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151/comments/7dbd4bc4-786c-4db8-a4bc-2783666c14f6
162+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNjYTdkMTJkLTdkMGQtNDdmMC1hZDdiLWRkNjhjYmRkYWNhNSIsInVzZXJuYW1lIjoic29tZXdoZXJlX21hbiIsImZ1bGxuYW1lIjoiU29tZXdoZXJlLU1hbiIsImlhdCI6MTc0NzAzODM2NSwiZXhwIjoxNzQ3Mjk3NTY1fQ.O95hAI0JA6RYncWxPcNxIkR3-XRVaNMilBIQ-OviDuo
163+
164+
###
165+
166+
POST http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151/upvote
167+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNjYTdkMTJkLTdkMGQtNDdmMC1hZDdiLWRkNjhjYmRkYWNhNSIsInVzZXJuYW1lIjoic29tZXdoZXJlX21hbiIsImZ1bGxuYW1lIjoiU29tZXdoZXJlLU1hbiIsImlhdCI6MTc0NzAzODM2NSwiZXhwIjoxNzQ3Mjk3NTY1fQ.O95hAI0JA6RYncWxPcNxIkR3-XRVaNMilBIQ-OviDuo
168+
169+
###
170+
171+
POST http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151/downvote
172+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNjYTdkMTJkLTdkMGQtNDdmMC1hZDdiLWRkNjhjYmRkYWNhNSIsInVzZXJuYW1lIjoic29tZXdoZXJlX21hbiIsImZ1bGxuYW1lIjoiU29tZXdoZXJlLU1hbiIsImlhdCI6MTc0NzAzODM2NSwiZXhwIjoxNzQ3Mjk3NTY1fQ.O95hAI0JA6RYncWxPcNxIkR3-XRVaNMilBIQ-OviDuo
173+
174+
###
175+
176+
GET http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151/votes
177+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNjYTdkMTJkLTdkMGQtNDdmMC1hZDdiLWRkNjhjYmRkYWNhNSIsInVzZXJuYW1lIjoic29tZXdoZXJlX21hbiIsImZ1bGxuYW1lIjoiU29tZXdoZXJlLU1hbiIsImlhdCI6MTc0NzAzODM2NSwiZXhwIjoxNzQ3Mjk3NTY1fQ.O95hAI0JA6RYncWxPcNxIkR3-XRVaNMilBIQ-OviDuo
178+
179+
###
180+
181+
GET http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151/comments?q=thanks
182+
183+
###
184+
185+
GET http://127.0.0.1:8080/api/v1/posts/b64637f6-7f4a-4de3-9481-b6c5495ec151/votes?upvote=truthy

requests.rest renamed to requests/users.rest

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,31 @@ Content-Type: application/json
148148
{
149149
"username": "nowhere_man",
150150
"password": "Nm@12312"
151-
}
151+
}
152+
153+
###
154+
155+
GET http://127.0.0.1:8080/api/v1/users/3f457861-0abb-40a9-9603-dcaad46f224c/posts
156+
157+
###
158+
159+
GET http://127.0.0.1:8080/api/v1/users/3f457861-0abb-40a9-9603-dcaad46f224c/posts
160+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImU1MmJiNTVmLWI3MzgtNGNlOS1hY2ViLWFiN2VlYzVmYTA5OCIsInVzZXJuYW1lIjoiYW55d2hlcmVfbWFuIiwiZnVsbG5hbWUiOiJBbnl3aGVyZS1NYW4iLCJpYXQiOjE3NDcxOTczMDksImV4cCI6MTc0NzQ1NjUwOX0.t2t7NV3YcCAM-nojXloPWavM2U1WELAyEuF3BghSnzw
161+
162+
###
163+
164+
# The Private posts included, if the JWT is for posts author
165+
GET http://127.0.0.1:8080/api/v1/users/3f457861-0abb-40a9-9603-dcaad46f224c/posts
166+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNmNDU3ODYxLTBhYmItNDBhOS05NjAzLWRjYWFkNDZmMjI0YyIsInVzZXJuYW1lIjoibm93aGVyZV9tYW4iLCJmdWxsbmFtZSI6Ik5vd2hlcmUtTWFuIiwiaWF0IjoxNzQ3MTk3MDI3LCJleHAiOjE3NDc0NTYyMjd9.GDfDZPHmh8TFGJ08jEeYDf0OHoJhuKQ0AdPTwfuIBW4
167+
168+
###
169+
170+
GET http://127.0.0.1:8080/api/v1/users/3f457861-0abb-40a9-9603-dcaad46f224c/comments?q=thanks
171+
172+
###
173+
174+
GET http://127.0.0.1:8080/api/v1/users/3f457861-0abb-40a9-9603-dcaad46f224c/comments?q=foo
175+
176+
###
177+
178+
GET http://127.0.0.1:8080/api/v1/users/cca7d12d-7d0d-47f0-ad7b-dd68cbddaca5/votes?upvote=truthy

0 commit comments

Comments
 (0)