Kişisel kitap koleksiyonunuzu yönetmek için geliştirilmiş modern, full-stack web uygulaması.
- Kitap ekleme, düzenleme ve silme (CRUD)
- Kategorilere göre kitap yönetimi
- Okuma durumu takibi (Okunacak, Okunuyor, Okundu)
- 5 yıldızlı değerlendirme sistemi
- Okuma durumuna göre filtreleme
- Responsive tasarım
- Modern ve kullanıcı dostu arayüz
- .NET 10 - Web API
- Entity Framework Core 10 - ORM
- MSSQL Server - Veritabanı
- Swagger - API Dokümantasyonu
- Angular 20 - Standalone Components
- TypeScript - Tip güvenli JavaScript
- RxJS - Reactive Programming
- CSS3 - Modern styling
- RESTful API
- DTO (Data Transfer Object) Pattern
- Repository Pattern
- Dependency Injection
- CORS yapılandırması
- Projeyi klonlayın:
cd KitapKoleksiyonum.API- Bağımlılıkları yükleyin:
dotnet restore- Connection String'i düzenleyin:
appsettings.json dosyasında SQL Server bağlantı ayarlarını yapın:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=KitapKoleksiyonumDB;Trusted_Connection=True;TrustServerCertificate=True;MultipleActiveResultSets=true"
}
}- Veritabanını oluşturun:
dotnet ef migrations add InitialCreate
dotnet ef database update- Uygulamayı çalıştırın:
dotnet runBackend: http://localhost:5116
Swagger: http://localhost:5116/swagger
- Projeye gidin:
cd KitapKoleksiyonum.UI- Bağımlılıkları yükleyin:
npm install- Uygulamayı çalıştırın:
ng serveFrontend: http://localhost:4200
- Ana sayfada "+ Yeni Kitap Ekle" butonuna tıklayın
- Formu doldurun (Kitap Adı, Yazar, Kategori zorunludur)
- "Kaydet" butonuna tıklayın
- Kitap kartındaki "Düzenle" butonuna tıklayın
- İstediğiniz alanları güncelleyin
- "Güncelle" butonuna tıklayın
- Kitap kartındaki "Sil" butonuna tıklayın
- Onay dialogunda "Tamam" seçin
- Tümü: Tüm kitapları gösterir
- Okunacak: Henüz okunmamış kitaplar
- Okunuyor: Şu anda okunan kitaplar
- Okundu: Tamamlanan kitaplar
| Method | Endpoint | Açıklama |
|---|---|---|
| GET | /api/books |
Tüm kitapları listele |
| GET | /api/books/{id} |
ID'ye göre kitap getir |
| POST | /api/books |
Yeni kitap ekle |
| PUT | /api/books/{id} |
Kitap güncelle |
| DELETE | /api/books/{id} |
Kitap sil |
| Method | Endpoint | Açıklama |
|---|---|---|
| GET | /api/categories |
Tüm kategorileri listele |
| GET | /api/categories/{id} |
ID'ye göre kategori getir |
| POST | /api/categories |
Yeni kategori ekle |
| PUT | /api/categories/{id} |
Kategori güncelle |
| DELETE | /api/categories/{id} |
Kategori sil |
{
"title": "1984",
"author": "George Orwell",
"isbn": "978-0451524935",
"pageCount": 328,
"publishDate": "1949-06-08T00:00:00.000Z",
"status": 2,
"rating": 5,
"notes": "Distopik bir başyapıt",
"categoryId": 1
}{
"id": 1,
"title": "1984",
"author": "George Orwell",
"isbn": "978-0451524935",
"pageCount": 328,
"publishDate": "1949-06-08T00:00:00",
"status": 2,
"rating": 5,
"notes": "Distopik bir başyapıt",
"categoryId": 1,
"categoryName": "Roman",
"createdAt": "2024-11-19T10:30:00"
}KitapKoleksiyonum/
├── KitapKoleksiyonum.API/ # Backend (.NET 10)
│ ├── Controllers/ # API Controllers
│ │ ├── BooksController.cs
│ │ └── CategoriesController.cs
│ ├── Data/ # Database Context
│ │ ├── AppDbContext.cs
│ │ └── AppDbContextFactory.cs
│ ├── DTOs/ # Data Transfer Objects
│ │ └── BookDto.cs
│ ├── Models/ # Entity Models
│ │ ├── Book.cs
│ │ └── Category.cs
│ ├── Migrations/ # EF Core Migrations
│ ├── Program.cs # Entry Point
│ └── appsettings.json # Configuration
│
└── KitapKoleksiyonum.UI/ # Frontend (Angular 20)
├── src/
│ ├── app/
│ │ ├── components/ # Angular Components
│ │ │ ├── book-list/
│ │ │ ├── book-form/
│ │ │ └── category-list/
│ │ ├── models/ # TypeScript Interfaces
│ │ │ ├── book.model.ts
│ │ │ └── category.model.ts
│ │ ├── services/ # API Services
│ │ │ ├── book.service.ts
│ │ │ └── category.service.ts
│ │ ├── app.component.ts
│ │ ├── app.routes.ts
│ │ └── app.config.ts
│ ├── styles.css # Global Styles
│ └── index.html
└── package.json
| Sütun | Tip | Açıklama |
|---|---|---|
| Id | int | Primary Key |
| Title | nvarchar(200) | Kitap adı |
| Author | nvarchar(150) | Yazar |
| ISBN | nvarchar(20) | ISBN numarası |
| PageCount | int | Sayfa sayısı |
| PublishDate | datetime2 | Yayın tarihi |
| Status | int | Okuma durumu (0-2) |
| Rating | int | Değerlendirme (1-5) |
| Notes | nvarchar(1000) | Notlar |
| CategoryId | int | Foreign Key |
| CreatedAt | datetime2 | Oluşturma tarihi |
| Sütun | Tip | Açıklama |
|---|---|---|
| Id | int | Primary Key |
| Name | nvarchar(100) | Kategori adı |
| Description | nvarchar(500) | Açıklama |
Backend, frontend'den gelen isteklere izin vermek için CORS yapılandırması içerir:
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowAngular", policy =>
{
policy.WithOrigins("http://localhost:4200")
.AllowAnyHeader()
.AllowAnyMethod();
});
});- SQL Server'ın çalıştığından emin olun
- Connection string'i kontrol edin
- Migration'ları çalıştırın:
dotnet ef database update
- Node.js ve Angular CLI'ın yüklü olduğundan emin olun
npm installkomutunu çalıştırın- Backend'in çalıştığından emin olun
- Backend'de CORS policy'nin doğru yapılandırıldığından emin olun
- Frontend URL'inin
http://localhost:4200olduğundan emin olun
- Backend varsayılan olarak port 5116 üzerinde çalışır
- Frontend varsayılan olarak port 4200 üzerinde çalışır
- Swagger UI:
http://localhost:5116/swagger - Hot reload her iki tarafta da aktif
Bu proje tarafımca eğitim amaçlı sıfırdan inşa edilip geliştirilmiştir.
Eren Mülkoğlu - Senior Software Engineer
Projeyi beğendiyseniz yıldız vermeyi unutmayın!