Skip to content

πŸ”₯ Building a RESTful API for bebasblog using Express.js, TypeScript, Node.js, MongoDB, Cloudinary, and Google OAuth.

Notifications You must be signed in to change notification settings

ichramsyah/bebasblog-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

47 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

image

πŸš€BebasBlog RESTful APIs

Node.js Express.js Mongoose JWT Passport.js Bcrypt.js Multer Cloudinary Dotenv MongoDB Atlas Google Cloud

Ini adalah layanan backend untuk proyek Bebasblog, sebuah API RESTful yang dibangun untuk mendukung platform blogging atau media sosial. Layanan ini menyediakan autentikasi pengguna, manajemen profil, dan penanganan postingan dengan fitur seperti unggahan gambar (via Cloudinary), like, dan komentar. Proyek ini dikembangkan menggunakan TypeScript, Express, dan Mongoose, dengan dukungan untuk autentikasi Google OAuth.

πŸ”₯ Postman Collection: Dokumentasi API Bebasblog

Daftar Isi

Fitur Utama Backend

  • Manajemen Pengguna & Autentikasi:
    • Registrasi pengguna baru dengan validasi dasar.
    • login manual dengan perbandingan password yang di-hash menggunakan bcryptjs.
    • Autentikasi pihak ketiga menggunakan Google OAuth 2.0 via Passport.js.
    • Pembuatan dan verifikasi JSON Web Token (JWT) untuk mengamankan endpoint.
    • Memperbarui profil pengguna (foto profil, username, email, password, bio).
  • Manajemen Postingan:
    • Membuat postingan dengan gambar yang dapat diunggah via Cloudinary.
    • Mengelola postingan pengguna (CRUD: Create, Read, Update, Delete).
    • Fitur interaksi seperti like dan komentar pada postingan.
  • Penanganan File:
    • Endpoint untuk menerima unggahan gambar postingan.
    • Middleware (multer) untuk memvalidasi dan memproses file.
    • Integrasi dengan Cloudinary untuk menyimpan gambar di cloud.

Teknologi yang Digunakan

  • Runtime: Node.js
  • Language: TypeScript
  • Framework: Express.js
  • Database: MongoDB dengan Mongoose sebagai ODM (Object Data Modeling).
  • Autentikasi:
    • jsonwebtoken untuk JWT.
    • bcryptjs untuk hashing password.
    • passport & passport-google-oauth20 untuk Google OAuth.
  • Penanganan File:
    • multer untuk menangani multipart/form-data.
    • multer-storage-cloudinary untuk integrasi Cloudinary.
  • Environment Variables: dotenv

Konsep yang Diterapkan

Proyek ini dibangun di atas beberapa konsep dan pola arsitektur perangkat lunak yang penting:

  • RESTful API Design: Mendesain endpoint berdasarkan sumber daya seperti users dan posts.
  • Pola MVC (Model-View-Controller): Diterapkan dengan memisahkan:
    • Model: Skema Mongoose di dalam folder /models.
    • View: (Dalam konteks API) Didefinisikan oleh Rute di dalam folder /routes.
    • Controller: Logika bisnis yang menjembatani model dan rute, di dalam folder /controllers.
  • Middleware: Penggunaan middleware untuk autentikasi, validasi file, dan fungsi lainnya.
  • Keamanan:
    • Password Hashing: Menyimpan password pengguna dengan aman.
    • Stateless Authentication: Menggunakan JWT untuk otorisasi permintaan.

Struktur Proyek

/bebasblog-backend
└── src/        # File utama server Express
     β”œβ”€β”€ /config             # File konfigurasi (database, passport, cloudinary)
     β”‚      β”œβ”€β”€ env.js
     β”‚      β”œβ”€β”€ db.js
     β”‚      └── passport.js
     β”œβ”€β”€ /controllers        # Logika bisnis untuk setiap rute API
     β”‚      β”œβ”€β”€ authController.js
     β”‚      β”œβ”€β”€ userController.js
     β”‚      β”œβ”€β”€ postController.js
     β”œβ”€β”€ /middleware         # Middleware kustom (auth, upload)
     β”‚      β”œβ”€β”€ authMiddleware.js
     β”‚      └── uploadMiddleware.js
     β”œβ”€β”€ /models             # Skema database Mongoose
     β”‚      β”œβ”€β”€ UserModel.js
     β”‚      β”œβ”€β”€ PostModel.js
     β”‚      β”œβ”€β”€ CommentModel.js
     β”œβ”€β”€ /routes             # Definisi rute-rute API
     β”‚      β”œβ”€β”€ authRoutes.js
     β”‚      β”œβ”€β”€ userRoutes.js
     β”‚      └── postRoutes.js
     └── index.ts
└── .env                # (Contoh) File variabel environment (tidak di-commit)

API Endpoints

Authentication

  • POST /api/auth/register - Mendaftarkan pengguna baru.
  • POST /api/auth/login - Login pengguna.

User

  • GET /api/users/me - Mendapatkan profil pengguna saat ini (Terproteksi).
  • PUT /api/users/me - Memperbarui profil pengguna saat ini (Terproteksi).
  • PUT /api/users/me - Memperbarui gambar profil pengguna (Terproteksi).
  • PUT /api/users/me/password - Memperbarui kata sandi pengguna saat ini (Terproteksi).
  • GET /api/users/:username/posts - Menampilkan seluruh posts pengguna.
  • GET /api/users/:username - Menampilkan Nama, Bio, jumlah like dan jumlah Posts pengguna.

Posts

  • POST /api/posts - Membuat postingan baru (Terproteksi).
  • GET /api/posts - Mendapatkan semua postingan.
  • GET /api/posts/:id - Mendapatkan postingan spesifik berdasarkan ID.
  • PUT /api/posts/:id - Memperbarui postingan spesifik (Terproteksi).
  • DEL /api/posts/:id - Menghapus postingan spesifik (Terproteksi).
  • POST /api/posts/:id/like - Menyukai postingan spesifik (Terproteksi).
  • DEL /api/posts/:id/like - Membatalkan like pada postingan spesifik (Terproteksi).
  • POST /api/posts/:id/comments - Menambahkan komentar pada postingan spesifik (Terproteksi).
  • GET /api/posts/:id/comments - Mendapatkan semua komentar untuk postingan spesifik.

Setup Variabel Environment (.env)

Buat file .env di direktori root backend dan isi dengan variabel berikut:

MONGO_URI=
JWT_SECRET=
PORT=5000
FRONTEND_URL=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
CLOUDINARY_CLOUD_NAME=
CLOUDINARY_API_KEY=
CLOUDINARY_API_SECRET=

Instalasi & Menjalankan

  1. Dari direktori root proyek, masuk ke folder backend: cd bebasblog-backend
  2. Install semua dependensi: npm install
  3. Pastikan file .env sudah diisi dengan benar.
  4. Jalankan server development: npm run dev
  5. Server akan berjalan di http://localhost:5000 (atau port yang didefinisikan di .env).

About

πŸ”₯ Building a RESTful API for bebasblog using Express.js, TypeScript, Node.js, MongoDB, Cloudinary, and Google OAuth.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published