Modern bir gym yönetim uygulaması. React Native (Expo) frontend, Node.js backend ve PostgreSQL veritabanı ile geliştirilmiştir. Takım çalışması için Git ve Docker Compose ile kolay kurulum sunar.
- Özellikler
- Teknolojiler
- Gereksinimler
- Git ile Başlama
- Docker ile Hızlı Başlangıç
- Frontend (Expo) Geliştirme
- Backend (Opsiyonel) Manuel Çalıştırma
- PgAdmin ve Veritabanı
- Proje Yapısı
- Sorun Giderme
- Katkıda Bulunma
- 🔐 Kullanıcı kaydı ve girişi
- 📱 React Native mobil uygulama
- 🚀 Node.js REST API
- 🗄️ PostgreSQL veritabanı
- 🐳 Docker containerization
- 🔒 JWT token authentication
- 📊 Clean Architecture (DDD)
- React Native - Mobil uygulama framework'ü
- Expo - Geliştirme ve deployment platformu
- TypeScript - Type-safe JavaScript
- Axios - HTTP client
- AsyncStorage - Local storage
- Node.js - JavaScript runtime
- Express.js - Web framework
- PostgreSQL - İlişkisel veritabanı
- JWT - JSON Web Token authentication
- bcryptjs - Password hashing
- Swagger - API dokümantasyonu
- Docker - Containerization
- Docker Compose - Multi-container orchestration
- Node.js (v18+ önerilir)
- npm veya yarn
- Docker Desktop (Windows/Mac/Linux)
- Git
- Expo CLI (
npm install -g @expo/cli) - Expo Go uygulaması (Android/iOS)
Takımınızla çalışmak için bu adımları izleyin (ilk kez kurulum yapan kişi için):
# 1) Yeni bir GitHub reposu oluşturun (boş, README olmadan)
# 2) Yerelde repo başlatın ve ilk commit'i yapın
git init
git add .
git commit -m "chore: initial project import"
# 3) Uzak repo adresini ekleyin ve gönderin
git remote add origin https://github.com/<org-or-username>/<repo-name>.git
git branch -M main
git push -u origin main
# 4) Takım arkadaşları repo'yu klonlar
git clone https://github.com/<org-or-username>/<repo-name>.git
cd <repo-name>Branch akışı önerisi:
main: kararlı sürümdev: entegrasyonfeature/*: özellik geliştirme dalları
Eğer Docker kullanmak istemiyorsanız:
cd gym-app-backend
npm install
npm startcd gym-app-frontend/GymApp
npm install
npm start# PostgreSQL'i manuel olarak kurun ve çalıştırın
# Port: 5432, Database: gym_app_db, User: postgres, Password: postgresProje kök dizininde (bu dosyanın bulunduğu yer):
# Servisleri arka planda başlatın
docker compose up -d
# (İlk kurulumda image build etmek için)
docker compose up -d --build
# Container durumunu görün
docker compose ps
# Belirli bir servisin loglarını takip edin (örn. backend)
docker compose logs -f backend
# Tüm servisleri durdurun ve kaldırın
docker compose downErişim adresleri:
- Backend API: http://localhost:3000
- PgAdmin: http://localhost:5050 (kullanıcı:
admin@gymapp.com, şifre:admin123) - Frontend (Expo): Terminalde çıkan QR kod ile Expo Go'dan açın
Backend şu adreslerde çalışır:
- API Base URL:
http://localhost:3000/api - Health Check:
http://localhost:3000/health - Swagger UI:
http://localhost:3000/api-docs
cd gym-app-frontend
npm install
npx expo startAPI tabanı gym-app-frontend/src/services/api.ts içinde ayarlanır. Gerçek cihazda test için bilgisayar IP'nizi kullanın:
// src/services/api.ts
// Geliştirme için örnek:
const baseURL = "http://YOUR_IP_ADDRESS:3000/api";Backend ayakta iken http://localhost:3000/health veya mevcut endpointleri kullanarak test edebilirsiniz. (Swagger entegrasyonu eklenirse burada belirtilecektir.)
PgAdmin ile veritabanını yönetebilirsiniz:
http://localhost:5050adresini açın- Giriş bilgileri: Email:
admin@gymapp.com, Parola:admin123 - Sol menüden Servers > Register > Server
- General > Name:
gym-app-db - Connection > Host:
postgres, Port:5432, Username:postgres, Password:postgres
Not: Host alanında postgres kullanmamızın sebebi, Docker Compose ağında veritabanı servisi adının postgres olmasıdır.
POST /api/auth/register
Content-Type: application/json
{
"email": "user@example.com",
"password": "password123",
"firstName": "John",
"lastName": "Doe"
}POST /api/auth/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "password123"
}GET /api/auth/profile
Authorization: Bearer <token>gymAp/
├── gym-app-backend/ # Backend API
│ ├── src/
│ │ ├── application/ # Use cases & DTOs
│ │ ├── domain/ # Entities & Repositories
│ │ ├── infrastructure/ # Database & External services
│ │ └── presentation/ # Controllers & Routes
│ ├── gym-app-database/ # SQL init ve migration dosyaları
│ ├── docker-compose.yml # Backend tarafı compose (opsiyonel)
│ └── package.json
├── gym-app-frontend/ # Mobile App (Expo)
│ ├── src/
│ │ ├── components/
│ │ ├── screens/
│ │ ├── services/
│ │ └── types/
│ ├── app.json
│ └── package.json
├── docker-compose.yml # Kökten tüm servisleri başlatır
└── README.md
# Docker container'ları kontrol edin
docker compose ps
# Veritabanını yeniden başlatın
docker compose down
docker compose up -d# 3000 portunu kullanan process'i bulun
netstat -ano | findstr :3000
# Process'i sonlandırın
taskkill /PID <process_id> /F# Cache'i temizleyin
npx expo start --clear
# node_modules'ı yeniden yükleyin
rm -rf node_modules
npm install- Backend'in çalıştığından emin olun
- API URL'inin doğru olduğunu kontrol edin
- Firewall ayarlarını kontrol edin
- Docker Desktop'ı yeniden başlatın
- Windows'ta WSL2'nin etkin olduğundan emin olun
# Log'ları kontrol edin
docker compose logs
# Container'ları yeniden oluşturun
docker compose up --build -d- Bilgisayarınızın IP adresini öğrenin:
ipconfig- API URL'ini güncelleyin:
// src/services/api.ts
const baseURL = 'http://YOUR_IP:3000/api';- Cihaz ve bilgisayarın aynı Wi-Fi ağında olduğundan emin olun
// Android Emulator için
const baseURL = 'http://10.0.2.2:3000/api';- Environment değişkenlerini ayarlayın (DB bilgileri ve JWT)
- Docker image oluşturun ve bir registry'e push edip orkestrasyon ortamında çalıştırın.
- Expo EAS ile build alın (
eas build -p android/ios) - Mağazalara yükleyin veya dağıtın
- Fork yapın
- Feature branch oluşturun (
git checkout -b feature/amazing-feature) - Commit yapın (
git commit -m 'Add amazing feature') - Push yapın (
git push origin feature/amazing-feature) - Pull Request oluşturun
Bu proje MIT lisansı altında lisanslanmıştır.
- Geliştirici: Takımınız
- Email:
- GitHub:
- Gym salonu yönetimi
- Antrenman takibi
- Üyelik yönetimi
- Push notifications
- Offline mode
- Social features
Not: Bu proje eğitim amaçlı geliştirilmiştir. Production kullanımı için ek güvenlik önlemleri alınması önerilir.