🎓 Akademik Künye
Alan Detay Üniversite Sakarya Üniversitesi - Bilgisayar Mühendisliği Ders Web Programlama (BSM) Dönem 2025-2026 Güz Geliştirici Ahmet Cebeci (B231210077) Grup C1
Syriux Fitness App, geleneksel spor salonu yönetim sistemlerinin ötesine geçerek, Yapay Zeka (AI) teknolojilerini iş süreçlerine entegre eden kapsamlı bir web uygulamasıdır. ASP.NET Core MVC 8.0 mimarisi üzerine inşa edilen bu proje, hem spor salonu yöneticileri için güçlü bir idari panel hem de üyeler için kişiselleştirilmiş bir dijital antrenör deneyimi sunar.
Projenin temel amacı, sadece randevu takibi yapmak değil; kullanıcının fiziksel verilerini ve hedeflerini analiz ederek Google Gemini LLM ve Vision API aracılığıyla "Kişiye Özel" reçeteler sunmak ve sonuçları simüle etmektir.
Proje, Monolitik bir yapıda kurgulanmış olup, Layered Architecture (Katmanlı Mimari) prensiplerine sadık kalınarak geliştirilmiştir. Gelecekteki mobil entegrasyonlar için API endpoint'leri içermektedir.
- Framework: ASP.NET Core 8.0 MVC
- ORM: Entity Framework Core (Code-First Yaklaşımı)
- Veritabanı: Microsoft SQL Server
- Güvenlik: ASP.NET Core Identity (Role-Based Authorization - Admin/Member)
- Design Patterns: Dependency Injection (DI), Repository Pattern mantığı, ViewModel kullanımı.
- UI Framework: Bootstrap 5 & Custom CSS
- Scripting: JavaScript (ES6+), jQuery
- Etkileşim: AJAX (Sayfa yenilenmeden müsaitlik kontrolü ve dinamik veri çekme)
- Google Gemini 1.5 Flash: Kullanıcının metin tabanlı verilerini (Boy, Kilo, Hedef) analiz ederek HTML formatında yapılandırılmış diyet ve antrenman programı oluşturur.
- Google Gemini Vision: Kullanıcı fotoğraflarını analiz ederek vücut tipi tespiti yapar.
- Pollinations.ai: Kullanıcının hedeflediği vücut tipine ulaştığında nasıl görüneceğini simüle eden görsel üretim servisi.
Bu modül, basit bir takvim uygulamasının ötesinde, gerçek dünya senaryolarını simüle eden karmaşık bir iş mantığına (Business Logic) sahiptir:
- 🛡️ Conflict Detection (Çakışma Kontrolü):
- Antrenör Çakışması: Bir antrenörün aynı saat aralığında (Duration dahil) başka bir randevusu varsa sistem otomatik olarak bloklar.
- Üye Çakışması: Bir üyenin aynı saatte başka bir derste olması engellenir.
- Salon Saatleri: Salonun açılış/kapanış saatleri ve antrenörün mesai saatleri dinamik olarak kontrol edilir.
- 📸 Snapshot Pricing (Fiyat Mühürleme): Randevu oluşturulduğu andaki hizmet fiyatı ve süresi veritabanına kaydedilir. İleride hizmete zam gelse bile, geçmiş veya ileri tarihli alınmış randevular bu değişiklikten etkilenmez.
- ⚡ Dinamik Slot Hesaplama: Seçilen hizmetin süresine göre (30dk, 45dk, 60dk) müsait saat dilimleri AJAX ile backend'den anlık hesaplanarak getirilir.
Üyeler, pahalı özel dersler (PT) almak yerine yapay zekadan destek alabilir:
- Analiz: Kullanıcı form verileri (Yaş, Cinsiyet, Hedef, Aktivite Düzeyi) JSON formatında AI servisine gönderilir.
- Program Üretimi: Yapay zeka, profesyonel bir antrenör gibi davranarak
<ul>,<li>etiketleri ile formatlanmış haftalık program çıktısı üretir. - Hata Toleransı (Fault Tolerance): Eğer AI servisi (Google API) yanıt vermezse veya kota aşımı olursa, sistem çökmez; "Fallback" mekanizması devreye girerek kullanıcıya önceden hazırlanmış demo verileri sunar.
- CRUD İşlemleri: Antrenör, Hizmet (Ders) ve Salon bilgilerinin yönetimi.
- Randevu Onay Mekanizması: Üyelerin aldığı randevular "Onay Bekliyor" statüsüne düşer, admin onayı ile kesinleşir.
- Raporlama: Üye sayısı, aktif randevular ve antrenör performansları.
Randevu oluşturulurken kullanılan çakışma mantığının basitleştirilmiş hali:
// Örnek: Antrenörün o saatte dolu olup olmadığının kontrolü
foreach (var existing in existingAppointments)
{
// Mevcut randevunun bitiş saati
TimeSpan existingEnd = existingStart.Add(TimeSpan.FromMinutes(duration));
// Kesişim Formülü: (YeniBaşlangıç < EskiBitiş) VE (EskiBaşlangıç < YeniBitiş)
if (selectedTime < existingEnd && existingStart < endTime)
{
throw new BusinessException("Antrenör bu saatte dolu!");
}
}Projeyi yerel ortamınızda çalıştırmak için:
-
Repoyu Klonlayın:
git clone [https://github.com/AhmetCebeci/SyriuxFitnessApp.git](https://github.com/AhmetCebeci/SyriuxFitnessApp.git)
-
Veritabanı Bağlantısını Yapılandırın:
appsettings.jsondosyasını açın ve SQL Server bağlantı cümlenizi güncelleyin."ConnectionStrings": { "DefaultConnection": "Server=.;Database=SyriuxFitnessDB;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True" }
-
API Anahtarını Ekleyin: Google AI Studio'dan aldığınız API anahtarını ilgili alana yapıştırın.
"Google": { "ApiKey": "AIzaSy_SIZIN_API_ANAHTARINIZ" }
-
Veritabanını Oluşturun (Migration): Visual Studio "Package Manager Console" üzerinden komutu çalıştırın:
Update-Database -
Çalıştırın: Projeyi
F5ile başlatın. Varsayılan Admin hesabı veritabanı oluşurken (Seed Data) eklenecektir.