- 🚀 Proje Hakkında
- 📌 Ana Özellikler
- 🔧 Backend Kurulumu
- 🔧 Frontend Kurulumu
- 🛠️ Kullanılan Teknolojiler
- 👤 Varsayılan Kullanıcılar
- 🔄 Kullanım Akışı
- 📑 API Endpoints
- 🛡️ Güvenlik Yapılandırması
- 📦 Kullanılan Pattern'ler
- 🔍 Önerilen Geliştirmeler
- 📄 Lisans
Backend : ASP.NET Core 9 Web API
Frontend : React.js
CourseTech, ASP.NET Core 9 Web API backend ve React.js frontend kullanılarak geliştirilmiş modern ve responsive bir mini online kurs satış platformudur. Platform, eğitmenlerin kurs oluşturup satmasına ve öğrencilerin eğitim içeriklerine kolayca erişmesine olanak tanır ve geliştirilebilir bir altyapı sunar.
- Admin: Tam sistem erişimi, yönetim yetkileri.
- Instructor: Kurs oluşturma, kurs yönetimi, kurs satın alma, profil yönetimi.
- Student: Kurs satın alma, kurs erişimi, profil yönetimi.
- Guest: Kurs inceleme, kategori detaylarına göz atma.
Katmanlı mimari yapı uygulanmıştır:
Core -> Entity'ler, DTO'lar, Service Interface'leri, UnitOfWork Interface'leri
Repository -> Veritabanı işlemleri, Data Seed, Konfigürasyonlar
Service -> İş Mantığı, Mapping İşlemleri
API -> Controller'lar
Shared -> Enumlar, Service Result, JWT Yapısı
Client -> React.js Frontend
Tables:
- Identity (AppUser, AppRole, AspNetUserRefreshToken)
- Course
- Category
- Basket
- BasketItem
- Order
- OrderItem
- Payment
- Enrollment
Entityler arasındaki ilişkiler (One-to-Many, Many-to-Many, Many-to-One) tanımlanmıştır.
public abstract class BaseEntity
{
public Guid Id { get; set; }
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
public DateTime? UpdatedAt { get; set; }
public bool IsDeleted { get; private set; } = false;
public void MarkAsDeleted()
{
IsDeleted = true;
Update();
}
public void Update()
{
UpdatedAt = DateTime.UtcNow;
}
}
Generic Repository Yapısı:
public interface IGenericRepository<TEntity>
where TEntity : BaseEntity
{
Task<TEntity> GetByIdAsync(Guid id);
Task<IEnumerable<TEntity>> GetAllAsync();
IQueryable<TEntity> Where(Expression<Func<TEntity, bool>> predicate);
Task InsertAsync(TEntity entity);
TEntity Update(TEntity entity);
void SoftDelete(TEntity entity);
}
UnitOfWork Yapısı:
public interface IUnitOfWork
{
ICategoryRepository Category { get; }
ICourseRepository Course { get; }
IEnrollmentRepository Enrollment { get; }
IBasketRepository Basket { get; }
IAppUserRefreshTokenRepository AppUserRefreshToken { get; }
IPaymentRepository Payment { get; }
IOrderRepository Order { get; }
Task SaveChangesAsync();
void SaveChanges();
}
- Entitylere özel genişletilmiş ek servisler yazılmıştır
public enum BasketStatus
{
Active,
Passive
}
public enum PaymentStatus
{
Pending,
Success,
Failed
}
public enum OrderStatus
{
Pending,
Completed,
Canceled
}
GitHub deposunu bilgisayarınıza klonlayın:
git clone https://github.com/GithubUserName/CourseTechPlatform.git
appsettings.json
dosyasında MSSQL Server bilgilerinizi girin.- Migration oluşturun ve veritabanını güncelleyin:
dotnet ef migrations add InitialCreate dotnet ef database update
- Backend sunucusunu başlatın:
dotnet run
- Frontend dizinine gidin:
cd coursetech.Client.client
- Paketleri yükleyin:
npm install
- Frontend sunucusunu başlatın:
npm start
- ASP.NET Core 9
- Entity Framework Core (EF Core)
- JWT Authentication
- UnitOfWork Pattern
- Repository Pattern
- React.js
- Axios
- Toastify
CORS yapısı ile frontend-backend iletişimi sağlanmıştır.
{
"admin": {
"email": "admin@admin.com",
"role": "Admin",
"password": "Admin123*"
},
"instructor1": {
"email": "fatihcakiroglu@instructor.com",
"role": "Instructor",
"password": "Fatih123**"
},
"instructor2": {
"email": "ahmet@instructor.com",
"role": "Instructor",
"password": "Ahmet123*"
}
}
- Kullanıcı Kaydı ve Giriş
Kullanıcı kaydı oluşturan herkes Student rolü ile atanır.
- Kullanıcıya aktif bir sepet tanımlanır.
- Kurslar sepete eklenir.
-
- Checkout yapıldıktan sonra sepet Passive duruma geçer,
- Sipariş kaydı Pending olarak oluşturulur.
- Ödeme yap butonuna tıklanır
- Ödeme Pending durumuna gelir.
- Sipariş kaydı *Completed olur.
- Kart bilgileri doldurulur (Luhn algoritmasına göre doğrulanır).
-
- Ödeme tamamlandıktan sonra Payment Completed durumuna geçer,
- Kullanıcı ile kurs arasında Enrollment ilişkisi kurulur. Enrollment kaydı oluşturulur.
- Profil sayfasında Ödeme Geçmişi, Sipariş Geçmişi, ve Kurslarım özet halinde gösterilir.
- POST
/api/Authentications/login
- Kullanıcı giriş yapar. - POST
/api/Authentications/create-token-by-refresh-token
- Refresh token ile yeni bir erişim tokenı oluşturur. - POST
/api/Authentications/revoke-refresh-token
- Refresh token'ı geçersiz kılar.
- GET
/api/Baskets/{userId}
- Kullanıcının sepetini getirir. - POST
/api/Baskets/users/{userId}/courses/{courseId}
- Kursu sepete ekler. - DELETE
/api/Baskets/users/{userId}/courses/{courseId}
- Sepetten kursu çıkarır. - DELETE
/api/Baskets/users/{userId}
- Kullanıcının sepetini siler. - POST
/api/Baskets/users/{userId}/complete
- Sepeti tamamlar. - GET
/api/Baskets/{basketId}/admin
- Admin için sepet detaylarını getirir.
- GET
/api/Courses/{id}
- Belirli bir kursu getirir. - DELETE
/api/Courses/{id}
- Kursu siler. - GET
/api/Courses
- Tüm kursları listeler. - POST
/api/Courses
- Yeni bir kurs oluşturur. - PUT
/api/Courses
- Mevcut kursu günceller. - GET
/api/Courses/published
- Yayınlanmış kursları listeler. - GET
/api/Courses/by-category/{categoryId}
- Belirli bir kategoriye ait kursları listeler. - GET
/api/Courses/by-instructor/{instructorId}
- Belirli bir eğitmene ait kursları listeler. - GET
/api/Courses/details/{id}
- Kursun detaylarını getirir. - GET
/api/Courses/summaries
- Kurs özetlerini listeler. - PATCH
/api/Courses/{id}/publish
- Kursu yayınlar. - PATCH
/api/Courses/{id}/unpublish
- Kursun yayını kaldırılır.
- GET
/api/Users/{id}
- Kullanıcı bilgilerini getirir. - PUT
/api/Users/{id}
- Kullanıcı bilgilerini günceller. - DELETE
/api/Users/{id}
- Kullanıcıyı siler. - GET
/api/Users/instructors
- Eğitmenleri listeler. - GET
/api/Users/students
- Öğrencileri listeler. - GET
/api/Users/all
- Tüm kullanıcıları listeler. - POST
/api/Users/register
- Yeni bir kullanıcı kaydı oluşturur. - POST
/api/Users/reset-password
- Kullanıcının şifresini sıfırlar.
- POST
/api/Payments
- Ödeme işlemi başlatır. - GET
/api/Payments/{userId}/user
- Kullanıcının tüm başarılı ödeme geçmişlerini getirir. - GET
/api/Payments/{paymentId}
- Belirli bir ödemenin detaylarını getirir.
- POST
/api/Orders/from-basket/{basketId}
- Sepetten siparişi oluşturur. - GET
/api/Orders/{orderId}
- Sipariş detaylarını getirir. - GET
/api/Orders/user/{userId}
- Kullanıcının siparişlerini listeler.
-
JWT tabanlı kimlik doğrulama ve yetkilendirme.
-
Access Token ve Refresh Token desteği.
-
Rol bazlı güvenlik sistemi.
-
Entity Framework Identity ile entegre.
const security = {
authentication: "JWT Bearer Token",
refreshToken: true,
authorization: "Role Based Access Control",
validation: {
form: true,
input: true
},
cors: "Configured",
passwordStorage: "Hashed + Salted"
};
const patterns = {
architecture: [
"Layered Architecture",
"Repository Pattern",
"Unit of Work Pattern"
"Service Result Pattern"
],
principles: [
"SOLID"
],
features: [
"Generic Repository",
"Soft Delete",
"Rich Domain Model",
]
};
const futureFeatures = [
"RabbitMQ entegrasyonu",
"Redis cache implementasyonu",
"Admin paneli",
"Kurs güncelleme",
"Gerçek ödeme sistemi",
"Email bildirimleri",
"Gelişmiş arama",
"Değerlendirme sistemi",
"İlerleme takibi",
"İnteraktif içerik görüntüleyici"
"Unit testler",
"Docker desteği",
"CI/CD pipeline",
"Performans optimizasyonu"
];
MIT License
Copyright (c) 2025 CourseTech
Bu yazılım MIT lisansı altında lisanslanmıştır.