Selamat datang di Recova Backend API π Proyek ini menyediakan layanan backend untuk aplikasi Recova, yang dirancang untuk membantu pengguna dalam perjalanan pemulihan dan pembentukan kebiasaan positif.
- Autentikasi Pengguna - Login aman menggunakan Google OAuth & JWT.
- Manajemen Profil - Atur profil (nama panggilan, alasan pemulihan, waktu check-in harian).
- Check-in Harian - Catat mood & komitmen setiap hari.
- Pelacakan Streak - Hitung streak harian untuk menjaga motivasi.
- Jurnal Pribadi - Simpan entri jurnal refleksi perjalanan.
- Statistik Pengguna - Lihat streak saat ini, streak terpanjang, dan total check-in.
- Komunitas - Posting, komentar, dan interaksi dengan sesama pengguna.
- Konten Edukasi - Konten untuk mendukung perjalanan pemulihan.
- AI Coach - Pendamping virtual yang memberikan dukungan emosional dan motivasi.
- Konten Harian - Motivasi dan tantangan harian untuk menginspirasi pengguna.
- Runtime: Node.js
- Framework: Express.js
- Bahasa: TypeScript
- Database: PostgreSQL
- ORM: Prisma
- AI: Google Gemini
- Validasi: Zod
- Autentikasi: JWT & Google OAuth
Sebelum mulai, pastikan sudah install:
- Node.js (v18+)
- NPM atau Yarn
- PostgreSQL
- Docker & Docker Compose (Opsional, untuk menjalankan dengan container)
-
Clone repositori
git clone https://github.com/recova-app/backend.git cd backend -
Install dependensi
npm install
-
Setup variabel lingkungan Buat file
.envdari contoh.env.example:cp .env.example .env
Isi nilai variabel sesuai kebutuhan. Lihat penjelasan lengkap di bawah.
-
Migrasi database
npm run db:migrate
File .env digunakan untuk mengkonfigurasi aplikasi. Berikut adalah penjelasan untuk setiap variabel yang ada di .env.example:
| Variabel | Deskripsi | Contoh |
|---|---|---|
PORT |
Port tempat server akan berjalan. | 3000 |
NODE_ENV |
Mode environment aplikasi. | development atau production |
DOCS_URL |
URL untuk dokumentasi API eksternal. | https://docs.example.com |
| Variabel | Deskripsi | Contoh |
|---|---|---|
JWT_SECRET |
Kunci rahasia acak untuk menandatangani token JWT. Gunakan string acak yang kuat. | my-super-secret-key-123 |
GOOGLE_CLIENT_ID |
Client ID dari Google Cloud Console untuk otentikasi Google OAuth. | 123456789-abc.apps.googleusercontent.com |
| Variabel | Deskripsi | Contoh |
|---|---|---|
GEMINI_API_KEY |
Kunci API untuk layanan Google Gemini yang digunakan oleh AI Coach. | AIzaSy... |
GEMINI_MODEL |
Model AI Gemini yang akan digunakan. | gemini-2.0-flash |
OPENAI_API_KEY |
Kunci API untuk layanan OpenAI (opsional, sebagai alternatif Gemini). | sk-... |
OPENAI_MODEL |
Model OpenAI yang akan digunakan. | gpt-4o |
OPENAI_BASE_URL |
Base URL untuk API OpenAI (untuk API yang kompatibel dengan OpenAI). | https://api.openai.com/v1 |
| Variabel | Deskripsi | Contoh |
|---|---|---|
DATABASE_USER |
Nama pengguna untuk database PostgreSQL (digunakan oleh Docker). | postgres |
DATABASE_PASSWORD |
Kata sandi untuk database PostgreSQL. | password123 |
DATABASE_NAME |
Nama database yang akan digunakan. | recova_db |
DATABASE_URL |
URL koneksi lengkap ke database PostgreSQL. | postgresql://postgres:password123@localhost:5432/recova_db |
npm run devServer berjalan di: http://localhost:3000
npm run build
npm startProyek ini dilengkapi dengan mekanisme seeding untuk mengisi database dengan data awal untuk keperluan development dan testing.
Data yang di-seed meliputi:
- Users: Data pengguna dengan berbagai latar belakang
- Profiles: Profil lengkap beserta informasi pendukung recovery
- Streaks: Riwayat streak dan aktivitas pemulihan
- Check-ins: Data check-in harian dengan variasi mood
- Journals: Entri jurnal refleksi perjalanan pengguna
- Community: Postingan dan komentar komunitas
- Education: Konten edukasi terkait pemulihan dan pengembangan diri
- Daily Motivations: Motivasi harian untuk mendukung proses recovery
- Daily Challenges: Tantangan harian untuk membangun kebiasaan positif
Untuk menjalankan proses seeding, gunakan perintah:
npm run db:seedProyek ini menyediakan konfigurasi Docker untuk mempermudah proses setup di lingkungan development dan deployment di production.
Dockerfile: Konfigurasi untuk membangun image production. Menggunakan multi-stage build untuk menghasilkan image yang optimal dan ringan.Dockerfile.dev: Konfigurasi untuk lingkungan development. Mengaktifkan hot-reloading sehingga perubahan pada kode akan langsung terlihat tanpa perlu me-restart container.docker-compose.yml: Mendefinisikan layanan untuk lingkungan production, terdiri dari serviceapidandb(PostgreSQL).docker-compose.dev.yml: Mendefinisikan layanan untuk lingkungan development. MenggunakanDockerfile.devdan me-mount volume kode sumber untuk hot-reloading.
Pastikan file .env sudah diisi sesuai konfigurasi database di docker-compose.dev.yml.
docker-compose -f docker-compose.dev.yml up -d --buildBuat file .env.production sebelum menjalankan di mode production.
docker-compose -f docker-compose.yml up -d --buildnpm run dev- Jalankan server development (hot reload).npm run build- Build TypeScript ke JavaScript.npm run lint- Cek kualitas kode (ESLint).npm run lint:fix- Auto-fix linting.npm run format- Format kode dengan Prettier.npm run postinstall- Generate Prisma client setelah install dependensi.npm run db:migrate- Jalankan migrasi database (development).npm run db:deploy- Terapkan migrasi database (production/deployment).npm run db:reset- Reset database dan jalankan ulang migrasi.npm run db:push- Sinkronisasi skema Prisma ke database tanpa migrasi.npm run db:studio- Buka Prisma Studio.npm run db:seed- Isi database dengan data awal (seeding).
src/
βββ api/ # Modul API (auth, users, journals, dll.)
β βββ ai/
β βββ auth/
β βββ community/
β βββ content/
β βββ education/
β βββ journals/
β βββ routine/
β βββ users/
β βββ welcome/
βββ config/ # Konfigurasi (env, app settings)
βββ core/ # Setup inti server Express
βββ database/ # Konfigurasi Prisma & koneksi DB
βββ handler/ # Error handling & response standar
βββ middleware/ # Middleware kustom (auth, validation, dsb.)
βββ routes/ # Routing API
βββ types/ # Definisi tipe global (TypeScript)
βββ utils/ # Utilitas & helper functions
βββ views/ # Tampilan Views
Semua endpoint berada di bawah prefix: /api/v1. Pengaturan rute utama terdapat di src/routes/index.ts yang menggabungkan semua modul API.
-
/api/v1/auth: Menangani semua rute terkait otentikasi pengguna.POST /google- Login / registrasi via Google Token.POST /onboarding- Selesaikan proses onboarding (nama panggilan, alasan, waktu check-in).
-
/api/v1/users: Rute untuk manajemen profil dan data pengguna.GET /me- Ambil detail profil pengguna.PUT /settings- Update pengaturan profil.DELETE /me/reset-data- Reset data pengguna untuk testing (hanya untuk development).
-
/api/v1/ai: Rute untuk fitur berbasis AI.POST /ask-coach- Kirim pesan ke AI Coach.GET /chat-history- Ambil riwayat percakapan dengan AI Coach.GET /summary- Dapatkan ringkasan check-in harian.POST /onboarding-analysis- Analisis data onboarding.
-
/api/v1/routine: Rute untuk rutinitas harian dan statistik.POST /checkin- Check-in harian.GET /statistics- Statistik (streak, dll).GET /relapses- Ambil riwayat relapse pengguna.
-
/api/v1/journals: Rute untuk jurnal pribadi pengguna.GET /- Ambil semua entri jurnal.POST /- Buat entri jurnal baru.
-
/api/v1/community: Rute untuk interaksi dalam komunitas.GET /- Ambil semua postingan komunitas.POST /- Buat postingan baru.POST /:postId/comments- Tambah komentar ke postingan.POST /:postId/like- Like postingan.
-
/api/v1/education: Rute untuk konten edukasi.GET /- Ambil semua konten edukasi.
-
/api/v1/content: Rute untuk konten dinamis.GET /daily- Ambil konten harian.
Kontribusi terbuka untuk siapa saja.
- Fork repositori ini
- Buat branch fitur (
git checkout -b feat/new-feature) - Commit perubahan (
git commit -m 'feat: add new feature') - Push ke branch (
git push origin feat/new-feature) - Buat Pull Request
Proyek ini dilisensikan di bawah lisensi MIT.