Fitness Tracker, kullanıcıların egzersiz aktivitelerini ve fitness hedeflerini takip etmelerini sağlayan modern bir REST API'dir. .NET 10.0, Entity Framework Core ve JWT authentication kullanılarak geliştirilmiştir.
- 🔐 JWT Authentication - Güvenli kullanıcı kimlik doğrulama
- 👤 Kullanıcı Yönetimi - Kayıt, giriş ve profil yönetimi
- 🏃 Egzersiz Takibi - Egzersiz aktivitelerini kaydetme ve görüntüleme
- 🎯 Hedef Belirleme - Fitness hedeflerini oluşturma ve takip etme
- 📊 RESTful API - Standart HTTP metodları ile CRUD işlemleri
- 📝 Swagger UI - Interaktif API dokümantasyonu
- 🗄️ SQLite Database - Hafif ve taşınabilir veritabanı
- 🔄 AutoMapper - Otomatik nesne dönüşümleri
- ⚡ Global Exception Handler - Merkezi hata yönetimi
- Framework: .NET 10.0
- ORM: Entity Framework Core 9.0
- Veritabanı: SQLite
- Authentication: JWT Bearer Token
- API Dokümantasyonu: Swagger/OpenAPI
- Mapping: AutoMapper
- Dil: C# 12.0
- .NET 10.0 SDK
- Visual Studio 2022 / VS Code / JetBrains Rider
- Projeyi klonlayın
git clone https://github.com/mrkfks/fitness-tracker.git
cd fitness-tracker- Bağımlılıkları yükleyin
cd FitnessTracker
dotnet restore- Veritabanını oluşturun
dotnet ef database update- Projeyi çalıştırın
dotnet run- Swagger UI'ya erişin
http://localhost:5210/swagger
- Kullanıcı Kaydı
POST /api/auth/register
Content-Type: application/json
{
"username": "johndoe",
"email": "john@example.com"
}- Giriş Yapma ve Token Alma
POST /api/auth/login
Content-Type: application/json
{
"email": "john@example.com",
"password": "password123"
}- Egzersiz Ekleme (Token Gerekli)
POST /api/workout
Authorization: Bearer YOUR_JWT_TOKEN
Content-Type: application/json
{
"type": "Running",
"durationMinutes": 30,
"date": "2025-11-01T10:00:00Z"
}Proje içinde bulunan FitnessTracker.http dosyasını kullanarak tüm endpoint'leri test edebilirsiniz. VS Code'da REST Client eklentisi ile kullanabilirsiniz.
| Method | Endpoint | Açıklama |
|---|---|---|
| POST | /api/auth/register |
Yeni kullanıcı kaydı |
| POST | /api/auth/login |
Kullanıcı girişi ve JWT token alma |
| Method | Endpoint | Açıklama |
|---|---|---|
| GET | /api/user |
Tüm kullanıcıları listele |
| GET | /api/user/{id} |
Belirli bir kullanıcıyı getir |
| POST | /api/user |
Yeni kullanıcı oluştur |
| DELETE | /api/user/{id} |
Kullanıcı sil |
| Method | Endpoint | Açıklama |
|---|---|---|
| GET | /api/workout |
Tüm egzersizleri listele |
| GET | /api/workout/{id} |
Belirli bir egzersizi getir |
| POST | /api/workout |
Yeni egzersiz kaydet |
| DELETE | /api/workout/{id} |
Egzersiz sil |
| Method | Endpoint | Açıklama |
|---|---|---|
| GET | /api/goal |
Tüm hedefleri listele |
| GET | /api/goal/{id} |
Belirli bir hedefi getir |
| POST | /api/goal |
Yeni hedef oluştur |
| DELETE | /api/goal/{id} |
Hedef sil |
- Id (int, PK)
- Username (string)
- Email (string)
- PasswordHash (string)
- CreatedAt (DateTime)- Id (int, PK)
- Type (string)
- DurationMinutes (int)
- Date (DateTime)
- UserId (int, FK)- Id (int, PK)
- Description (string)
- TargetDate (DateTime)
- IsCompleted (bool)
- UserId (int, FK)- JWT Bearer Token: Tüm korumalı endpoint'ler için token gereklidir
- HTTPS Redirection: Production'da HTTPS kullanılır
- CORS: İhtiyaç durumunda yapılandırılabilir
- Global Exception Handler: Hassas hata bilgilerinin gizlenmesi
appsettings.json dosyasında JWT ayarlarını yapılandırabilirsiniz:
{
"Jwt": {
"Key": "your-secret-key-here",
"Issuer": "FitnessTracker",
"Audience": "FitnessUsers"
}
}FitnessTracker/
├── Controllers/ # API Controller'lar
│ ├── AuthController.cs
│ ├── UserController.cs
│ ├── WorkoutController.cs
│ └── GoalController.cs
├── Data/ # Database Context
│ └── AppDbContext.cs
├── DTOs/ # Data Transfer Objects
│ ├── UserDto.cs
│ ├── WorkoutDto.cs
│ └── GoalDto.cs
├── Entities/ # Database Models
│ ├── User.cs
│ ├── Workout.cs
│ └── Goal.cs
├── Services/ # Business Logic
│ ├── TokenService.cs
│ ├── UserService.cs
│ ├── WorkoutService.cs
│ └── GoalService.cs
├── Mappings/ # AutoMapper Profiles
│ └── MappingProfile.cs
├── Middleware/ # Custom Middleware
│ └── GlobalExceptionHandler.cs
├── Migrations/ # EF Core Migrations
├── Utils/ # Utility Classes
│ └── JWTConfiguration.cs
├── appsettings.json # Configuration
└── Program.cs # Application Entry Point
-
Swagger UI kullanarak:
http://localhost:5210/swaggeradresini ziyaret edin- Endpoint'leri interaktif olarak test edin
-
HTTP dosyası kullanarak:
- VS Code'da
FitnessTracker.httpdosyasını açın - REST Client eklentisi ile endpoint'leri test edin
- VS Code'da
-
cURL kullanarak:
# Register
curl -X POST "http://localhost:5210/api/auth/register" \
-H "Content-Type: application/json" \
-d '{"username":"test","email":"test@example.com"}'
# Login
curl -X POST "http://localhost:5210/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"pass123"}'- Strong JWT secret key kullanın
- Environment variables ile configuration yönetin
- HTTPS zorunlu hale getirin
- CORS politikalarını yapılandırın
- Logging ekleyin (Serilog, NLog vb.)
- Rate limiting uygulayın
- Veritabanı backup stratejisi oluşturun
- Health check endpoint'leri ekleyin
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY ["FitnessTracker/FitnessTracker.csproj", "FitnessTracker/"]
RUN dotnet restore "FitnessTracker/FitnessTracker.csproj"
COPY . .
WORKDIR "/src/FitnessTracker"
RUN dotnet build "FitnessTracker.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "FitnessTracker.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "FitnessTracker.dll"]Bu proje MIT lisansı altında lisanslanmıştır. Detaylar için LICENSE dosyasına bakın.
Ömer Kafkas
Bu projeyi geliştirirken kullanılan harika araçlar ve kütüphaneler için teşekkürler:
⭐ Bu projeyi beğendiyseniz yıldız vermeyi unutmayın!