Backend REST API untuk Circle Web, dibangun menggunakan Node.js, Express.js, TypeScript, PostgreSQL, Prisma ORM, dan Socket.IO untuk mendukung komunikasi real-time.
- Node.js
- Express.js
- TypeScript
- PostgreSQL
- Prisma ORM
- Socket.IO
- JWT Authentication
- Bcrypt
- Multer
Server berjalan pada port 2323.
http://localhost:2323/api
Seluruh routing API berada pada folder:
src/routes
Endpoint: /api/auth
Route File
src/routes/authRoute.ts
Controller
src/controllers/authController.ts
Authentication menggunakan:
- JWT (JSON Web Token)
- Token Expired : 1 Hari (1d)
- Password Hashing : bcrypt (10 rounds)
POST
POST /api/auth/register{
"username": "string",
"email": "string",
"password": "string",
"full_name": "string"
}
full_namebersifat opsional.
POST
POST /api/auth/login{
"email": "string",
"password": "string"
}{
"message": "Login Successfully",
"token": "JWT_TOKEN"
}Endpoint: /api/user
Route File
src/routes/userRoute.ts
Controller
userController.ts
follow.ts
Semua endpoint di bawah memerlukan Authorization Header.
Authorization: Bearer <token>GET /api/user/profileMengambil data profil user yang sedang login beserta:
- Profile
- Followers Count
- Following Count
- Semua Thread
- Status Like (
isLiked) pada setiap thread
PATCH /api/user/profile{
"username": "string",
"full_name": "string",
"bio": "string"
}GET /api/user/allUserMengambil daftar seluruh pengguna selain user yang sedang login.
Response juga menyertakan:
- Status Follow (
isFollowing)
GET /api/user/followMengambil daftar:
- Followers
- Following
GET /api/user/:idMengambil profil user berdasarkan ID beserta seluruh thread yang dimiliki.
POST /api/user/follow/:idToggle Follow:
- Follow User
- Unfollow User
Endpoint: /api/thread
Route File
src/routes/threadRoute.ts
Controller
threadController.ts
detailThread.ts
Seluruh endpoint membutuhkan JWT Authentication.
Authorization: Bearer <token>POST /api/thread/postingMembuat postingan baru.
Menggunakan multipart/form-data
| Field | Type |
|---|---|
| content | Text |
| image | File |
thread:new
Dipancarkan setelah thread berhasil dibuat.
GET /api/thread/homeMengambil seluruh thread terbaru beserta:
- Informasi penulis
- Total Like
- Total Reply
- Status Like (
isLiked)
POST /api/thread/:id/likeMelakukan toggle:
- Like
- Unlike
like:update
Payload:
{
"threadId": 1,
"userId": 2,
"liked": true,
"likeTotal": 10
}GET /api/thread/:threadIdMengambil detail thread beserta seluruh replies.
POST /api/thread/:threadId/replyMengirim balasan ke thread.
Menggunakan multipart/form-data
| Field | Type |
|---|---|
| content | Text |
| image | File |
reply:new
reply-notification
Notifikasi dikirim ke room:
user-<creator_id>
Contoh pesan:
username mengomentari postingan kamu
Socket.IO diinisialisasi pada:
src/index.ts
CORS diizinkan untuk:
http://localhost:5173
Mengirim thread baru ke seluruh client yang sedang aktif.
Payload
{
"threadId": 1,
"userId": 2,
"liked": true,
"likeTotal": 5
}Payload
{
"threadId": 1,
"reply": {}
}Mengirim notifikasi kepada pemilik thread ketika thread mendapat balasan.
Contoh:
username mengomentari postingan kamu
Database menggunakan PostgreSQL dengan Prisma ORM.
Menyimpan data pengguna.
Field utama:
- username
- full_name
- password
- photo_profile
- bio
Tabel relasi Many-to-Many untuk sistem Follow & Followers.
Menyimpan seluruh postingan pengguna.
Menyimpan komentar atau balasan pada thread.
Relasi:
- User
- Threads
Menyimpan data like dari user terhadap thread tertentu.
Untuk seluruh endpoint yang membutuhkan autentikasi, gunakan:
Authorization: Bearer YOUR_JWT_TOKEN- ✅ JWT Authentication
- ✅ Register & Login
- ✅ User Profile
- ✅ Update Profile
- ✅ Follow / Unfollow
- ✅ Thread Posting
- ✅ Image Upload (Multer)
- ✅ Like / Unlike
- ✅ Replies
- ✅ Real-time Socket.IO
- ✅ PostgreSQL Database
- ✅ Prisma ORM
- ✅ TypeScript