Detay
Bu proje, katmanlı mimari kullanılarak bir kurs satış sitesi geliştirilmesini amaçlar. MVC ve API entegrasyonu, JWT tabanlı kimlik doğrulama ile sağlanacak, kullanıcılar kursları görüntüleyip satın alabilecektir.
- Katman Yapısı:
- Data Access Layer: Veri tabanıyla iletişimi sağlayacak.
- Business Logic Layer: İş kurallarını ve veri işleme mantığını barındıracak.
- Presentation Layer: Kullanıcı arayüzü (MVC).
- Kurs Kataloğu: Tüm kurslar, adı, açıklaması, fiyatı ve kategorisiyle listelenmeli.
- Kurs Detayları: Kurs hakkında detaylar ve sepete ekleme özelliği.
- Sipariş Sayfası: Kullanıcı sepetteki kursları görüp sipariş verebilmeli.
- Ödeme Sayfası: Ödeme bilgileri alınarak işlem tamamlanmalı.
- JWT tabanlı kimlik doğrulama, MVC ile API arasında güvenli bağlantı sağlayacak.
- Kurs Kataloğu Sayfası
- Tüm kursları listeleme.
- Kurs Detay Sayfası
- Detay gösterimi ve sepete ekleme.
- Sipariş Sayfası
- Sepet ve satın alma işlemleri.
- Ödeme Sayfası
- Ödeme bilgilerini alarak işlemi sonlandırma.
- JWT tabanlı kimlik doğrulama.
- Aşağıdaki endpoint'ler sağlanmalıdır:
- Catalog Endpoints
- Kurs listeleme ve filtreleme.
- Kurs detaylarını sağlama.
- Order Endpoints
- Sipariş kaydetme.
- Sipariş detaylarını görüntüleme.
- Kullanıcının geçmiş siparişlerini görüntüleme.
- Payment Endpoints
- Ödeme işlemleri.
- Ödemenin başarıyla tamamlandığını doğrulama.
- User Management Endpoints
- Kullanıcı oluşturma, güncelleme, silme.
- Kurslar: Ad, açıklama, fiyat, kategori bilgilerini içeren tablo.
- Kullanıcılar: Kullanıcı bilgilerini güvenli şekilde saklayan tablo.
- Siparişler: Kullanıcının satın aldığı kursları içeren tablo.
- Ödemeler: Ödeme bilgilerini içeren tablo.
- Entity Framework gibi bir ORM kullanılarak CRUD işlemleri yapılmalı.
- Kullanıcı giriş işlemi sonrası JWT token almalı.
- MVC uygulaması, token ile API’ye yetkili istek göndermeli.
- Yetkilendirme, her kullanıcının sadece kendi verilerine erişmesini sağlayacak şekilde yapılandırılmalı.
- Hata Yönetimi ve Logging
- Kullanıcı dostu hata mesajları.
- Hata loglarının tutulması.
- Validasyon
- Form girişleri ve API istekleri doğrulanmalı.
- UI/UX Geliştirme
- Kullanıcı dostu ve işlevsel bir arayüz tasarımı.
- Dokümantasyon
- API uç noktalarının kullanımıyla ilgili bir dokümantasyon.
Admin Controller
Kategori İşlemleri
1. Yeni Kategori Oluştur
- Açıklama: Yeni bir kategori oluşturur.
- HTTP Metodu:
POST
- URL:
/Admin/category
- Request Body:
{ "name": "Programming" }
2. Kategori Güncelle
- Açıklama: Var olan bir kategoriyi günceller.
- HTTP Metodu:
PUT
- URL:
/Admin/category
- Request Body:
{ "id": "d8e1c9d0-465f-4d1f-bb62-c3bcfa4b0f84", "name": "Advanced Programming" }
3. Kategori sil
- Açıklama: Belirtilen kategoriyi siler.
- HTTP Metodu:
DELETE
- URL:
/Admin/category/{id}
- Request Body:
{ "status": "Success", "message": "Category deleted successfully." }
4. Tüm Kategorileri Getir
- Açıklama: Tüm kategorileri listeler.
- HTTP Metodu:
GET
- URL:
/Admin/category
- Response Body:
{ "status": "Success", "data": [ { "id": "d8e1c9d0-465f-4d1f-bb62-c3bcfa4b0f84", "name": "Programming", "createdDate": "2023-11-25T14:35:00", "updatedDate": "2023-11-25T14:35:00" }, { "id": "a7d3e1c9-d950-44c1-aa84-c3ba5a7f9a32", "name": "Advanced Programming", "createdDate": "2023-11-20T12:15:00", "updatedDate": "2023-11-22T10:30:00" } ] }
5. Kategori Detay Getir
- Açıklama: Belirtilen kategoriye ait detayları döner.
- HTTP Metodu:
GET
- URL:
/Admin/category/{id}
- Response Body:
{ "status": "Success", "data": { "id": "d8e1c9d0-465f-4d1f-bb62-c3bcfa4b0f84", "name": "Programming", "createdDate": "2023-11-25T14:35:00", "updatedDate": "2023-11-25T14:35:00" } }
Kurs İşlemleri
1. Yeni Kurs Oluştur
- Açıklama: Yeni bir kurs oluşturur.
- HTTP Metodu:
POST
- URL:
/Admin/course
- Request Body:
{ "name": "Introduction to C#", "description": "Learn the basics of C# programming.", "price": 49.99, "categoryId": "a1b2c3d4-5678-9101-1121-314151617181" }
- Response Body:
{ "status": "Success", "data": "e1f2g3h4-1234-5678-9101-112131415161" }
2. Kurs Güncelle
-
Açıklama: Var olan bir kursu günceller.
-
HTTP Metodu:
PUT
-
URL:
/Admin/course
-
Request Body:
{ "id": "e1f2g3h4-1234-5678-9101-112131415161", "name": "Advanced C#", "description": "Dive deep into C# programming concepts.", "price": 69.99, "categoryId": "a1b2c3d4-5678-9101-1121-314151617181" }
-
Response Body:
{ "status": "Success", "message": "Course updated successfully." }
3. Kurs Sil
-
Açıklama: Belirtilen kursu siler.
-
HTTP Metodu:
DELETE
-
URL:
/Admin/course/{id}
-
Response Body:
{ "status": "Success", "message": "Course deleted successfully." }
4. Tüm Kursları Getir
-
Açıklama: Sistemdeki tüm kursları listeler.
-
HTTP Metodu:
GET
-
URL:
/Admin/course
-
Response Body:
{ "status": "Success", "data": [ { "id": "e1f2g3h4-1234-5678-9101-112131415161", "name": "Introduction to C#", "description": "Learn the basics of C# programming.", "price": 49.99, "categoryName": "Programming", "createdDate": "2023-11-25T14:35:00", "updatedDate": "2023-11-25T14:35:00" } ] }
5. Kurs Detay Getir
-
Açıklama: Belirtilen kursa ait detayları döner.
-
HTTP Metodu:
GET
-
URL:
/Admin/course/{id}
-
Response Body:
{ "status": "Success", "data": { "id": "e1f2g3h4-1234-5678-9101-112131415161", "name": "Introduction to C#", "description": "Learn the basics of C# programming.", "price": 49.99, "categoryName": "Programming", "createdDate": "2023-11-25T14:35:00", "updatedDate": "2023-11-25T14:35:00" } }
6. Belirli Bir Kategoriye Ait Kursları Getir
-
Açıklama: Belirtilen kategoriye ait kursları listeler.
-
HTTP Metodu:
GET
-
URL:
/GetCoursesByCategoryAsync/{categoryId}
-
Response Body:
{ "status": "Success", "data": [ { "id": "e1f2g3h4-1234-5678-9101-112131415161", "name": "Introduction to C#", "description": "Learn the basics of C# programming.", "price": 49.99, "categoryName": "Programming", "createdDate": "2023-11-25T14:35:00", "updatedDate": "2023-11-25T14:35:00" } ] }
User İşlemleri
1. Role Ekleme
- Açıklama: Belirtilen kullanıcıya "admin" rolü ekler.
- HTTP Metodu:
POST
- URL:
/Admin/AddRoleToUser/{UserId}
- Request Body: (Burada body kullanılmaz, URL'den alınır)
- Response Body:
{ "status": "Success", "message": "Role added successfully." }
2. Kullanıcıları Listele
- Açıklama: Tüm kullanıcıları ve her kullanıcının ilgili bilgilerini döner (Email, Kullanıcı adı, Cüzdan, Siparişler).
- HTTP Metodu:
GET
- URL:
/Admin/AllUser
- Response Body:
{ "status": "Success", "data": [ { "id": "user-id-123", "userName": "john_doe", "email": "john.doe@example.com", "wallet": 100.50, "orders": [ { "id": "order-id-1" } ] } ] }
Auth Controller
1. Kullanıcı Girişi
- Açıklama: Kullanıcı, sağladığı e-posta ve şifre ile sisteme giriş yapar. Eğer e-posta ve şifre doğruysa bir token döner.
- HTTP Metodu:
POST
- URL:
/Auth/signin
- Request Body:
{ "Email": "user@example.com", "Password": "userPassword123" }
- Response Body:
{ "status": "Success", "data": { "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiZW1haWwiOiJqb2huLmRvZUBleGFtcGxlLmNvbSIsInRva2VuX2lkIjoiZjE2ZTczZDEtZDJhZC00ZThmLTkyYTItM2I2OTlhYmNiM2VhIiwibmFtZWRhdGEiOiJXYWx... } }
2. Client Credential ile Giriş
- Açıklama: Client, sağladığı
ClientId
veClientSecret
ile giriş yapar. Giriş başarılıysa bir token döner. - HTTP Metodu:
POST
- URL:
/Auth/SignInClientCredential
- Request Body:
{ "ClientId": "yourClientId", "ClientSecret": "yourClientSecret" }
- Response Body:
{ "status": "Success", "data": { "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllZW50SWQiOiJ5b3VyQ2xpZW50SWQiLCJ0b2tlbl9pZCI6ImZlZDczM2YtZDk5Yy00ZDJhLTg3YjYtYTgyYzYwOTNlZDhlIiwibmFtZWRhdGEiOiJXYWx... } }
Order Controller
Order İşlemleri
1. Sipariş Oluştur
- Açıklama: Kullanıcının sepetindeki ürünler üzerinden sipariş oluşturur ve toplam fiyat hesaplanır.
- HTTP Metodu:
POST
- URL:
/order
- Request Body:
{ "UserId": "12345678-90ab-cdef-1234-567890abcdef", "BasketId": "abcdef12-3456-7890-abcd-ef1234567890" }
- Response Body:
{ "status": "Success", "data": "abcdef12-3456-7890-abcd-ef1234567890" // Sipariş ID'si }
2. Sipariş Sil
- Açıklama: Belirtilen ID'ye ait siparişi siler.
- HTTP Metodu:
DELETE
- URL:
/order/{id}
- Path Parametreleri:
id
: Silinecek siparişin ID'si.
- Response Body:
{ "status": "Success", "data": null }
3. Sipariş Detayı Getir
- Açıklama: Belirtilen ID'ye ait siparişin detaylarını döner.
- HTTP Metodu:
GET
- URL:
/order/{id}
- Path Parametreleri:
id
: Getirilecek siparişin ID'si.
- Response Body:
{ "status": "Success", "data": { "Id": "abcdef12-3456-7890-abcd-ef1234567890", "UserId": "12345678-90ab-cdef-1234-567890abcdef", "Wallet": 100.00, "BasketItemInCourseResponses": [ { "Id": "courseId", "BasketId": "basketId", "BasketItemId": "basketItemId", "CategoryName": "Programming", "Name": "Introduction to C#", "CreatedDate": "2023-11-25T14:35:00", "Price": 49.99, "Quantity": 1, "Description": "Learn the basics of C# programming." } ], "CreatedDate": "2023-11-25T14:35:00", "UpdatedDate": "2023-11-25T14:35:00", "TotalAmount": 49.99, "Status": "Waiting" } }
4. Tüm Siparişleri Listele
- Açıklama: Sistemdeki tüm siparişlerin özet bilgilerini döner.
- HTTP Metodu:
GET
- URL:
/order
- Response Body:
{ "status": "Success", "data": [ { "Id": "abcdef12-3456-7890-abcd-ef1234567890", "UserId": "12345678-90ab-cdef-1234-567890abcdef", "CreatedDate": "2023-11-25T14:35:00", "TotalAmount": 49.99, "Status": "Waiting" } ] }
5. Kullanıcıya Ait Siparişleri Listele
- Açıklama: Belirtilen kullanıcı ID'sine ait siparişleri döner.
- HTTP Metodu:
GET
- URL:
/order/GetOrderByUser/{id}
- Path Parametreleri:
id
: Kullanıcı ID'si.
- Response Body:
{ "status": "Success", "data": [ { "Id": "abcdef12-3456-7890-abcd-ef1234567890", "UserId": "12345678-90ab-cdef-1234-567890abcdef", "CreatedDate": "2023-11-25T14:35:00", "UpdatedDate": "2023-11-25T14:40:00", "TotalAmount": 49.99, "Status": "Waiting" } ] }
Sepet İşlemleri
1. Sepete Kurs Ekle
- Açıklama: Kullanıcıya ait sepete ürün ekler veya miktarını artırır.
- HTTP Metodu:
POST
- URL:
/api/basket
- Request Body:
{ "UserId": "12345678-90ab-cdef-1234-567890abcdef", "CourseId": "abcdef12-3456-7890-abcd-ef1234567890", "Quantity": 2 }
- Response Body:
{ "status": "Success", "data": "12345678-90ab-cdef-1234-567890abcdef" // Sepet ID'si }
2. Sepetteki Kursu Sil
- Açıklama: Kullanıcıya ait sepetten belirtilen kursu kaldırır.
- HTTP Metodu:
DELETE
- URL:
/basket/DeleteCourseFromBasketAsync/{UserId}/{BasketItemId}
- Path Parametreleri:
UserId
: Kullanıcının ID'si.BasketItemId
: Silinecek sepet öğesinin ID'si.
- Response Body:
{ "status": "Success", "data": null }
3. Kullanıcının Sepetini Listele
- Açıklama: Kullanıcıya ait tüm sepet öğelerini döner.
- HTTP Metodu:
GET
- URL:
/basket/{UserId}
- Path Parametreleri:
UserId
: Kullanıcının ID'si.
- Response Body:
{ "status": "Success", "data": [ { "Id": "basketitem-1", "BasketId": "basket-1", "BasketItemId": "basketitem-1", "Name": "Course A", "Price": 100.00, "Description": "Description of Course A", "Quantity": 1, "CreatedDate": "2024-01-01T00:00:00Z", "UpdatedDate": "2024-01-01T00:00:00Z" } ] }
4. Sepeti Sil
- Açıklama: Belirtilen ID'ye ait sepeti tamamen siler.
- HTTP Metodu:
DELETE
- URL:
/basket/{id}
- Path Parametreleri:
id
: Silinecek sepetin ID'si.
- Response Body:
{ "status": "Success", "data": null }
User Controller
1. Kullanıcı Kayıt Ol
- Açıklama: Yeni bir kullanıcı oluşturur.
- HTTP Metodu:
POST
- URL:
/user
- Request Body:
{ "UserName": "johndoe", "Email": "johndoe@example.com", "Password": "Password123!", "Wallet": 100.00 }
- Response Body:
{ "status": "Success", "data": "12345678-90ab-cdef-1234-567890abcdef" // Kullanıcı ID'si }
2. Kullanıcı Güncelle
- Açıklama: Mevcut bir kullanıcının bilgilerini günceller.
- HTTP Metodu:
PUT
- URL:
/user
- Request Body:
{ "Id": "12345678-90ab-cdef-1234-567890abcdef", "UserName": "johnupdated", "Email": "johnupdated@example.com", "Wallet": 200.00 }
- Response Body:
{ "status": "Success", "data": null }
3. Kullanıcı Sil
- Açıklama: Belirtilen ID'ye ait kullanıcıyı siler.
- HTTP Metodu:
DELETE
- URL:
/{id}
- Path Parametreleri:
id
: Silinecek kullanıcının ID'si.
- Response Body:
{ "status": "Success", "data": null }
4. Kullanıcı Bilgilerini Getir
- Açıklama: Belirtilen ID'ye ait kullanıcı bilgilerini döner.
- HTTP Metodu:
GET
- URL:
/user/{id}
- Path Parametreleri:
id
: Kullanıcının ID'si.
- Response Body:
{ "status": "Success", "data": { "Id": "12345678-90ab-cdef-1234-567890abcdef", "UserName": "johndoe", "Email": "johndoe@example.com", "Wallet": 100.00, "Orders": [ { "Id": "abcdef12-3456-7890-abcd-ef1234567890" // Kullanıcının sipariş ID'leri } ] } }
Payment Controller
1. Ödeme İşlemi
- Açıklama: Kullanıcı bir sipariş için ödeme işlemini gerçekleştirir. Kullanıcının bakiyesi sipariş tutarını karşılamıyorsa hata döner.
- HTTP Metodu:
POST
- URL:
/payment
- Request Body:
{ "userId": "12345678-90ab-cdef-1234-567890abcdef", "OrderId": "abcdef12-3456-7890-abcd-ef1234567890" }
- Response Body (Başarılı):
{ "status": "Success", "data": { "Id": "payment-1", "Amount": 200.00, "OrderId": "order-1", "PaymentDate": "2024-01-01T00:00:00Z", "PaymentStatus": "Completed" } }
- Response Body (Hata - Yetersiz Bakiye):
{ "status": "Fail", "message": "insufficient balance:50.00" }