Park yeri paylaşım platformu için RESTful API
- Proje Hakkında
- Özellikler
- Teknolojiler
- Kurulum
- API Dokümantasyonu
- Proje Yapısı
- Kullanım
- Ortam Değişkenleri
- Lisans
ParkShare API, kullanıcıların park yerlerini paylaşabildiği, rezerve edebildiği ve yönetebildiği bir platform için geliştirilmiş RESTful API servisidir. Proje, park yeri bulma sorununa modern bir çözüm sunmayı amaçlar.
Şehirlerde park yeri bulmak giderek zorlaşırken, birçok özel park yeri boş kalıyor. ParkShare, bu boş park yerlerini ihtiyacı olanlara ulaştırarak hem park yeri sahiplerinin gelir elde etmesini hem de sürücülerin kolayca park yeri bulmasını sağlar.
- ✅ Kullanıcı kaydı ve girişi
- 🔐 JWT tabanlı kimlik doğrulama
- 👤 Profil yönetimi
- 🔑 Şifre sıfırlama
- 📍 Park yeri ekleme, düzenleme ve silme
- 🗺️ Konum bazlı park yeri arama
- 📸 Park yeri fotoğrafları
- ⭐ Park yeri değerlendirme ve yorumlama
- 💰 Fiyatlandırma yönetimi
- 🎫 Park yeri rezervasyonu oluşturma
- ⏱️ Saat bazlı rezervasyon
- 💳 Ödeme entegrasyonu (gelecek özellik)
- 📧 E-posta bildirimleri
- 🔔 Rezervasyon durumu takibi
- 📍 Konum bazlı arama
- 💵 Fiyat aralığına göre filtreleme
- ⏰ Müsaitlik durumuna göre filtreleme
- 🚗 Park yeri özelliklerine göre filtreleme (kapalı/açık, güvenlik vb.)
- 📈 Kullanıcı ve park yeri istatistikleri
- 🛠️ Platform yönetimi
- 🚫 İçerik moderasyonu
- 💰 Gelir raporları
- Node.js: JavaScript runtime environment
- Express.js: Web application framework
- JavaScript (ES6+): Programlama dili
- MongoDB: NoSQL veritabanı
- Mongoose: ODM (Object Data Modeling)
- JWT (JSON Web Tokens): Token bazlı kimlik doğrulama
- bcrypt: Şifre hashleme
- helmet: HTTP güvenlik headers
- cors: Cross-Origin Resource Sharing
- express-validator: İstek validasyonu
- express-async-errors: Async error handling
- Multer: Dosya yükleme middleware
- Cloudinary/AWS S3: Cloud storage (planlanan)
- Socket.io: WebSocket bağlantıları
- Redis: Cache ve session management
- nodemon: Auto-restart during development
- dotenv: Environment variables
- morgan: HTTP request logger
- ESLint: Code linting
ParkShare-API/
├── src/
│ ├── config/ # Konfigürasyon dosyaları
│ │ ├── database.js # MongoDB bağlantısı
│ │ ├── cloudinary.js # Cloudinary config
│ │ └── jwt.js # JWT config
│ │
│ ├── controllers/ # Request handlers
│ │ ├── authController.js
│ │ ├── userController.js
│ │ ├── parkingController.js
│ │ ├── reservationController.js
│ │ └── reviewController.js
│ │
│ ├── models/ # Mongoose modelleri
│ │ ├── User.js
│ │ ├── ParkingSpot.js
│ │ ├── Reservation.js
│ │ ├── Review.js
│ │ └── Payment.js
│ │
│ ├── routes/ # API routes
│ │ ├── authRoutes.js
│ │ ├── userRoutes.js
│ │ ├── parkingRoutes.js
│ │ ├── reservationRoutes.js
│ │ └── reviewRoutes.js
│ │
│ ├── middlewares/ # Custom middlewares
│ │ ├── authMiddleware.js
│ │ ├── validationMiddleware.js
│ │ ├── errorMiddleware.js
│ │ └── uploadMiddleware.js
│ │
│ ├── utils/ # Yardımcı fonksiyonlar
│ │ ├── emailService.js
│ │ ├── geocoding.js
│ │ ├── imageUpload.js
│ │ └── errorHandler.js
│ │
│ ├── validators/ # Request validators
│ │ ├── authValidator.js
│ │ ├── parkingValidator.js
│ │ └── reservationValidator.js
│ │
│ └── app.js # Express app setup
│
├── server.js # Server entry point
├── package.json # Dependencies
├── package-lock.json # Dependency lock
├── .env.example # Environment variables örneği
├── .gitignore # Git ignore
└── LICENSE # Lisans dosyası
- Node.js (v16.0.0 veya üzeri)
- npm veya yarn
- MongoDB (v5.0 veya üzeri)
- Git
- Projeyi klonlayın
git clone https://github.com/umutsa177/ParkShare-API.git
cd ParkShare-API- Bağımlılıkları yükleyin
npm install
# veya
yarn install- Environment dosyasını oluşturun
cp .env.example .env.envdosyasını düzenleyin
# Server
PORT=5000
NODE_ENV=development
# Database
MONGODB_URI=mongodb://localhost:27017/parkshare
# veya MongoDB Atlas
# MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/parkshare
# JWT
JWT_SECRET=your_super_secret_jwt_key_here
JWT_EXPIRE=7d
JWT_COOKIE_EXPIRE=7
# Email (NodeMailer)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_EMAIL=your-email@gmail.com
SMTP_PASSWORD=your-app-password
# Cloudinary (optional)
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
# Google Maps API (optional)
GOOGLE_MAPS_API_KEY=your_google_maps_api_key- MongoDB'yi başlatın
# Local MongoDB
mongod
# veya MongoDB Atlas kullanıyorsanız connection string'i .env'ye ekleyin- Sunucuyu başlatın
# Development mode
npm run dev
# Production mode
npm startSunucu varsayılan olarak http://localhost:5000 adresinde çalışacaktır.
http://localhost:5000/api/v1
POST /api/v1/auth/register
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com",
"password": "securePassword123",
"phone": "+90 555 123 4567"
}POST /api/v1/auth/login
Content-Type: application/json
{
"email": "john@example.com",
"password": "securePassword123"
}POST /api/v1/auth/forgot-password
Content-Type: application/json
{
"email": "john@example.com"
}GET /api/v1/parkings?lat=41.0082&lng=28.9784&radius=5
Authorization: Bearer {token}Query Parameters:
lat: Enlem (latitude)lng: Boylam (longitude)radius: Arama yarıçapı (km)minPrice: Minimum fiyatmaxPrice: Maximum fiyattype: Park yeri tipi (indoor/outdoor)
GET /api/v1/parkings/:id
Authorization: Bearer {token}POST /api/v1/parkings
Authorization: Bearer {token}
Content-Type: application/json
{
"title": "Merkezi Park Yeri",
"description": "Şehir merkezinde güvenli park yeri",
"location": {
"address": "Taksim Meydanı, İstanbul",
"coordinates": {
"latitude": 41.0370,
"longitude": 28.9850
}
},
"price": {
"hourly": 25,
"daily": 150
},
"features": ["covered", "security", "cctv"],
"capacity": 1
}PUT /api/v1/parkings/:id
Authorization: Bearer {token}
Content-Type: application/jsonDELETE /api/v1/parkings/:id
Authorization: Bearer {token}POST /api/v1/reservations
Authorization: Bearer {token}
Content-Type: application/json
{
"parkingSpotId": "65f1b2c3d4e5f6g7h8i9j0k1",
"startTime": "2025-02-01T10:00:00Z",
"endTime": "2025-02-01T18:00:00Z",
"vehicleInfo": {
"plate": "34 ABC 123",
"model": "Toyota Corolla"
}
}GET /api/v1/reservations/my-reservations
Authorization: Bearer {token}DELETE /api/v1/reservations/:id
Authorization: Bearer {token}POST /api/v1/reviews
Authorization: Bearer {token}
Content-Type: application/json
{
"parkingSpotId": "65f1b2c3d4e5f6g7h8i9j0k1",
"rating": 5,
"comment": "Harika bir park yeri, çok temiz ve güvenli!"
}GET /api/v1/reviews/parking/:parkingId{
"success": true,
"data": {
// Response data
},
"message": "İşlem başarılı"
}{
"success": false,
"error": {
"message": "Hata mesajı",
"statusCode": 400
}
}| Değişken | Açıklama | Örnek |
|---|---|---|
PORT |
Sunucu port numarası | 5000 |
NODE_ENV |
Çalışma ortamı | development / production |
MONGODB_URI |
MongoDB bağlantı URL'i | mongodb://localhost:27017/parkshare |
JWT_SECRET |
JWT şifreleme anahtarı | your-secret-key |
JWT_EXPIRE |
Token geçerlilik süresi | 7d |
SMTP_HOST |
Email sunucu adresi | smtp.gmail.com |
SMTP_PORT |
Email sunucu portu | 587 |
SMTP_EMAIL |
Gönderici email | noreply@parkshare.com |
SMTP_PASSWORD |
Email şifresi | your-app-password |
CLOUDINARY_CLOUD_NAME |
Cloudinary cloud name | your-cloud-name |
GOOGLE_MAPS_API_KEY |
Google Maps API anahtarı | AIza... |
# Unit testleri çalıştır
npm test
# Test coverage
npm run test:coverage
# Watch mode
npm run test:watch# Heroku CLI ile login
heroku login
# Yeni Heroku app oluştur
heroku create parkshare-api
# MongoDB addon ekle
heroku addons:create mongolab
# Environment variables ayarla
heroku config:set JWT_SECRET=your_secret_key
# Deploy
git push heroku main# Dockerfile
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 5000
CMD ["npm", "start"]# Docker image build
docker build -t parkshare-api .
# Container çalıştır
docker run -p 5000:5000 --env-file .env parkshare-apiBu proje şu anda özel (private) durumdadır ve katkılar kabul edilmemektedir.
Copyright (c) 2026 Umut Sayar
All Rights Reserved
This code and associated documentation files (the "Software") are the exclusive
property of Umut Sayar. The Software may not be copied, modified, merged, published,
distributed, sublicensed, and/or sold without explicit written permission from
the copyright holder.
The Software is provided for viewing purposes only.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Tüm hakları saklıdır. Bu yazılım ve ilgili dokümantasyon dosyaları, telif hakkı sahibinin açık yazılı izni olmadan kopyalanamaz, değiştirilemez, birleştirilemez, yayınlanamaz, dağıtılamaz, alt lisanslanamaz ve/veya satılamaz.
Umut Sayar
- GitHub: @umutsa177
- Email: umutsayar8@gmail.com
- Proje Linki: https://github.com/umutsa177/ParkShare-API
- Node.js - JavaScript runtime
- Express.js - Web framework
- MongoDB - Database
- JWT - Authentication
Made with ❤️ by Umut Sayar