Ticketix; kullanıcıların etkinlikleri keşfedebildiği, filtreleyebildiği, bilet satın alabildiği, PNR tabanlı dijital biletlerini görüntüleyebildiği ve yapay zekâ destekli etkinlik önerileri alabildiği kapsamlı bir etkinlik platformudur.
Proje; ASP.NET Core 8, Onion Architecture, CQRS, MediatR, Entity Framework Core, ASP.NET Core Identity, JWT, SignalR, OpenAI ve Tavily API teknolojileri kullanılarak geliştirilmiştir.
- 🔐 ASP.NET Core Identity ile kullanıcı kayıt, giriş ve rol yönetimi
- 🎫 Etkinlik listeleme, detay görüntüleme ve dinamik filtreleme
- 🔍 Specification Pattern ile kategori ve etkinlik filtreleri
- 🧾 Rezervasyon ve çoklu bilet satın alma sistemi
- 🎟️ Her bilet için benzersiz PNR kodu oluşturma
- 👤 Kullanıcı profili, geçmiş ve yaklaşan biletlerin görüntülenmesi
- 📧 MailKit ile tasarımlı HTML dijital bilet gönderimi
- 🤖 OpenAI destekli ruh haline göre etkinlik öneren chatbot
- ⚡ SignalR ile gerçek zamanlı AI sohbet deneyimi
- 🔎 Tavily API ile admin tarafında güncel etkinlik keşfi
- 📝 Blog ve iletişim mesajı yönetimi
- 👥 Kullanıcı ve rol yönetimi
- ⚙️ Kapsamlı admin paneli
- 🚫 401, 403 ve 404 özel hata sayfaları
Proje Onion Architecture yaklaşımıyla katmanlara ayrılmıştır.
Ticketix
│
├── Core
│ ├── Ticketix.Domain
│ └── Ticketix.Application
│
├── Infrastructure
│ ├── Ticketix.Persistence
│ └── Ticketix.Infrastructure
│
└── Presentation
├── TicketixWebAPI
└── Ticketix.WebUI
Domain
- Entity yapıları
- Uygulamanın temel domain modelleri
Application
- CQRS
- MediatR
- Commands / Queries / Handlers
- Interfaces
- Specifications
- Validators
- Mappings
Persistence
- Entity Framework Core
- SQL Server
- DbContext
- Generic Repository
- Özel repository'ler
- Identity entegrasyonu
Infrastructure
- JWT servisi
- OpenAI servisi
- Tavily servisi
- Mail servisi
Web API
- RESTful endpointler
- JWT Authentication
- Authorization
- MediatR ve CQRS işlemleri
WebUI
- ASP.NET Core MVC
- Razor Views
- Admin Area
- Cookie Authentication
- SignalR Hub
- API tüketimi
WebUI doğrudan veritabanına erişmez; backend işlemleri Web API üzerinden gerçekleştirilir.
Ticketix'te satın alma işlemi Booking, satın alma sonucunda oluşan her tekil bilet ise ayrı bir Ticket kaydıdır.
Bir kullanıcı aynı etkinlikten 3 bilet aldığında:
Booking #25
├── Ticket #41 → PNR: A91BC72F
├── Ticket #42 → PNR: F82DA103
└── Ticket #43 → PNR: 71CA992B
Her Ticket için benzersiz bir PNR kodu oluşturulur.
Satın alma sırasında:
Etkinlik Seçimi
↓
Bilet Sayısı
↓
Booking Oluşturma
↓
Kontenjan Güncelleme
↓
Ticket Kayıtları
↓
Benzersiz PNR
↓
Dijital Bilet
↓
E-Posta
Bilet detayında:
- Etkinlik bilgileri
- Tarih ve saat
- Mekan ve şehir
- Bilet sahibi
- Kullanıcı adı
- Ticket numarası
- PNR kodu
- Satın alma fiyatı
- Bilet durumu
görüntülenir.
Kullanıcı yalnızca kendisine ait biletleri görüntüleyebilir.
Rezervasyon tamamlandıktan sonra bilet bilgileri kullanıcıya tasarımlı HTML e-posta olarak gönderilir.
E-posta sistemi:
- MailKit
- MimeKit
- SMTP
üzerinden çalışır.
Dijital bilet içerisinde etkinlik bilgileri, kullanıcı bilgileri, TicketId, PNR ve fiyat bilgileri bulunur.
OpenAI ve SignalR kullanılarak geliştirilen chatbot yalnızca giriş yapmış kullanıcılara görünür.
Kullanıcının ruh halini ve isteğini yorumlayarak Ticketix içerisinde gerçekten bulunan etkinlikler arasından uygun öneriler sunar.
Örnek:
"Bugün biraz bunalmış ve yorgun hissediyorum.
Çok kalabalık olmayan, kafa dağıtabileceğim
bir etkinlik arıyorum."
Akış:
Kullanıcı
↓
SignalR
↓
ChatHub
↓
Web API
↓
MediatR
↓
Mevcut Event Verileri + Kullanıcı Mesajı
↓
OpenAI
↓
Canlı Etkinlik Önerisi
AI:
- Bilet satın almaz
- Rezervasyon oluşturmaz
- Rezervasyon iptal etmez
- Veritabanında değişiklik yapmaz
Yalnızca öneri ve bilgilendirme amacıyla kullanılır.
Admin panelinde Tavily Search API kullanılarak internet üzerindeki güncel etkinlik kaynakları araştırılabilir.
Sonuçlarda:
- Başlık
- İçerik özeti
- Kaynak URL
- Eşleşme skoru
görüntülenir.
Admin, bulunan kaynağı inceleyebilir ve yeni etkinlik oluşturma ekranına geçebilir.
Projede API ve MVC tarafında iki bağlantılı authentication sistemi kullanılmaktadır.
WebUI
↓
Cookie Authentication
↓
JWT Access Token
↓
Web API
↓
JWT Bearer Authentication
Kullanıcı login olduğunda API tarafından oluşturulan JWT, WebUI tarafında access_token claim'i olarak saklanır.
Korunan API isteklerinde JWT:
Authorization: Bearer <token>
olarak gönderilir.
ASP.NET Core Identity ile:
- Kullanıcı yönetimi
- IdentityRole
- Kullanıcıya rol atama
- Admin yetkilendirmesi
sağlanır.
Admin alanları rol bazlı authorization ile korunur.
Admin paneli üzerinden sistemin temel içerikleri yönetilebilir.
- Etkinlikler
- Kategoriler
- Tavily etkinlik önerileri
- Rezervasyonlar
- Biletler
- Blog içerikleri
- Kullanıcılar
- Roller
- İletişim mesajları
- Hero alanı
- Feature alanları
- Home CTA
Admin paneli üzerinden yalnızca CRUD işlemleri değil; rezervasyon durumları, kullanıcı rolleri ve dinamik anasayfa içerikleri de yönetilebilir.
- Onion Architecture
- CQRS
- MediatR
- Generic Repository Pattern
- Specification Pattern
- Dependency Injection
- Interface Abstraction
- AutoMapper
- FluentValidation
- Global Exception Middleware
- Async / Await
- LINQ
- RESTful API
- Role-Based Authorization
- .NET 8
- ASP.NET Core Web API
- ASP.NET Core MVC
- C#
- Entity Framework Core
- SQL Server
- ASP.NET Core Identity
- JWT Authentication
- Cookie Authentication
- MediatR
- AutoMapper
- FluentValidation
- SignalR
- MailKit
- MimeKit
- OpenAI API
- Tavily Search API
- SMTP
- Razor Views
- ViewComponents
- HTML5
- CSS3
- JavaScript
- Responsive Design
- JetBrains Rider
- Swagger / OpenAPI
- Git
- GitHub
































