Skip to content

Mesh4All99/simpleFullStackLibrary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

📚 مكتبة الكتب الرقمية — BookStore App

تطبيق ويب متكامل لإدارة وعرض الكتب مبني بأحدث التقنيات

ASP.NET Core Angular PostgreSQL Entity Framework TailwindCSS TypeScript


📸 لقطات من التطبيق

🏠 الصفحة الرئيسية — قائمة الكتب

قائمة الكتب

📖 صفحة تفاصيل الكتاب

تفاصيل الكتاب


🚀 نظرة عامة على المشروع

BookStore App هو تطبيق ويب متكامل (Full-Stack) يُمكّن المستخدمين من تصفح مجموعة واسعة من الكتب التقنية والبرمجية، والاطلاع على تفاصيل كل كتاب بشكل احترافي. يجمع التطبيق بين واجهة أمامية حديثة مبنية بـ Angular 20 وخادم خلفي قوي مبني بـ ASP.NET Core 10، مع قاعدة بيانات PostgreSQL وتكامل كامل مع Entity Framework Core.

🔨 المشروع لا يزال قيد التطوير — يُعدّ هذا إصدارًا تجريبيًا أوليًا تم بناؤه لإتقان أسس تطوير التطبيقات المتكاملة (Full-Stack).


🏗️ معمارية المشروع

simpleFullStackLibrary/
├── 📁 Backend/                         # الخادم الخلفي — ASP.NET Core 10
│   ├── 📁 Controllers/
│   │   └── BookController.cs           # نقاط نهاية API للكتب
│   ├── 📁 Models/
│   │   └── Book.cs                     # نموذج بيانات الكتاب
│   ├── 📁 Data/
│   │   └── AppDbContext.cs             # سياق قاعدة البيانات + بيانات أولية (Seed)
│   ├── 📁 Migrations/                  # ملفات هجرة قاعدة البيانات
│   ├── Program.cs                      # نقطة دخول التطبيق والإعدادات
│   ├── appsettings.json                # إعدادات التطبيق
│   └── BookStoreBackend.csproj         # ملف مشروع .NET
│
└── 📁 FrontEnd/                        # الواجهة الأمامية — Angular 20
    └── 📁 src/app/
        ├── 📁 pages/
        │   ├── book-list/              # صفحة عرض قائمة الكتب
        │   └── about/                  # صفحة عن التطبيق
        ├── 📁 components/
        │   ├── header/                 # مكوّن الترويسة
        │   └── details/                # مكوّن تفاصيل الكتاب
        ├── 📁 services/
        │   └── book-service.ts         # خدمة الاتصال بالـ API
        ├── ibook.ts                    # واجهة TypeScript للكتاب
        └── app.routes.ts               # مسارات التطبيق

⚙️ التقنيات المستخدمة

🔵 الواجهة الخلفية (Backend)

التقنية الإصدار الوصف
ASP.NET Core 10.0 إطار عمل الخادم الخلفي
Entity Framework Core 10.0.9 ORM لإدارة قاعدة البيانات
PostgreSQL (Npgsql) 10.0.0 قاعدة البيانات العلائقية
ASP.NET Identity 10.0.9 نظام المصادقة والمستخدمين
Scalar API 2.16.11 واجهة تصفح وتوثيق الـ API
OpenAPI 10.0.9 توثيق الـ API تلقائيًا

🔴 الواجهة الأمامية (Frontend)

التقنية الإصدار الوصف
Angular 20.3 إطار عمل الواجهة الأمامية
TypeScript 5.9 لغة البرمجة
Tailwind CSS v4.1 إطار تصميم الواجهات
RxJS 7.8 البرمجة التفاعلية (Reactive)
Angular HttpClient الاتصال بالـ API
Angular Router إدارة مسارات الصفحات

🗄️ نموذج البيانات

كيان الكتاب Book

public class Book
{
    [Key]
    public string Isbn { get; set; }          // رقم ISBN — المفتاح الأساسي

    public string Title { get; set; }          // عنوان الكتاب
    public string SubTitle { get; set; }       // العنوان الفرعي
    public string Author { get; set; }         // اسم المؤلف
    public DateTime PublishDate { get; set; }  // تاريخ النشر
    public string Publisher { get; set; }      // دار النشر
    public decimal Pages { get; set; }         // عدد الصفحات
    public string? Description { get; set; }   // وصف الكتاب
    public string? Website { get; set; }       // رابط الكتاب الرسمي
    public string ImageUrl { get; set; }       // رابط صورة الغلاف
}

🌐 نقاط نهاية الـ API

الطريقة المسار الوصف
GET /api/Book جلب جميع الكتب
GET /api/Book/{isbn} جلب كتاب بواسطة رقم ISBN

🔐 نقاط نهاية المصادقة (ASP.NET Identity)

الطريقة المسار الوصف
POST /register تسجيل مستخدم جديد
POST /login تسجيل دخول
POST /logout تسجيل خروج
GET /manage/info معلومات المستخدم الحالي

🔍 يمكنك استعراض جميع نقاط الـ API من خلال واجهة Scalar على: http://localhost:5000/scalar


🌱 البيانات الأولية (Data Seeding)

يقوم التطبيق تلقائيًا بزرع 9 كتب برمجية في قاعدة البيانات عند تطبيق الـ Migrations لأول مرة، وذلك من خلال OnModelCreating في AppDbContext:

# عنوان الكتاب المؤلف دار النشر الصفحات
1 ASP.NET Core in Action, 2nd Ed. Andrew Lock Manning 624
2 Git Pocket Guide Richard E. Silverman O'Reilly 234
3 Learning JavaScript Design Patterns Addy Osmani O'Reilly 254
4 Designing Evolvable Web APIs with ASP.NET Glenn Block O'Reilly 238
5 Speaking JavaScript Axel Rauschmayer O'Reilly 460
6 You Don't Know JS: ES6 & Beyond Kyle Simpson O'Reilly 278
7 Programming JavaScript Applications Eric Elliott O'Reilly 254
8 Eloquent JavaScript, 2nd Ed. Marijn Haverbeke No Starch 472
9 Understanding ECMAScript 6 Nicholas C. Zakas No Starch 352

🖥️ مسارات الواجهة الأمامية

المسار المكوّن الوصف
/ BookList الصفحة الرئيسية — عرض جميع الكتب مع بحث
/details/:isbn Details صفحة تفاصيل كتاب محدد
/about About صفحة عن التطبيق

🛠️ خطوات التثبيت والتشغيل

المتطلبات الأساسية

قبل البدء، تأكد من تثبيت التالي على جهازك:


1️⃣ استنساخ المشروع

git clone https://github.com/YOUR_USERNAME/simpleFullStackLibrary.git
cd simpleFullStackLibrary

2️⃣ إعداد وتشغيل الخادم الخلفي (Backend)

# الانتقال إلى مجلد الخادم الخلفي
cd Backend

# تعديل سلسلة الاتصال في appsettings.json
# عدّل كلمة المرور حسب إعدادات PostgreSQL لديك:
# "DefaultConnection": "Host=localhost;Port=5432;Username=postgres;Password=YOUR_PASSWORD;"

# تثبيت الحزم
dotnet restore

# تطبيق هجرات قاعدة البيانات (سيتم زرع البيانات تلقائيًا)
dotnet ef database update

# تشغيل الخادم
dotnet run

✅ سيعمل الخادم على: http://localhost:5000

📖 واجهة Scalar API: http://localhost:5000/scalar


3️⃣ إعداد وتشغيل الواجهة الأمامية (Frontend)

# في نافذة طرفية جديدة، انتقل إلى مجلد الواجهة الأمامية
cd FrontEnd

# تثبيت الحزم
npm install

# تشغيل خادم التطوير
npm start

✅ ستعمل الواجهة على: http://localhost:4200


🔧 الإعدادات الرئيسية

إعدادات CORS

يسمح الخادم الخلفي بالاتصالات القادمة من http://localhost:4200 فقط (أي الواجهة الأمامية في بيئة التطوير):

builder.Services.AddCors(Options =>
{
    Options.AddPolicy("AllowSpecificOrigin", policy =>
    {
        policy.WithOrigins("http://localhost:4200")
              .AllowAnyHeader()
              .AllowAnyMethod();
    });
});

إعدادات الاتصال بالـ API (Frontend)

// src/app/services/book-service.ts
export class BookService {
  baseURL = 'http://localhost:5000/api';
  // ...
}

📁 هجرات قاعدة البيانات

اسم الهجرة التاريخ الوصف
20260714153942_init 14 يوليو 2026 إنشاء الجداول الأولية + Identity + بيانات الكتب

أوامر مفيدة لـ Entity Framework:

# إنشاء هجرة جديدة
dotnet ef migrations add اسم_الهجرة

# تطبيق الهجرات على قاعدة البيانات
dotnet ef database update

# التراجع عن آخر هجرة
dotnet ef database update 0

# عرض قائمة الهجرات
dotnet ef migrations list

🔮 مميزات قادمة (Upcoming Features)

  • 🔐 واجهة تسجيل الدخول والتسجيل من الـ Frontend
  • 🛒 سلة التسوق (Cart)
  • ❤️ قائمة الأمنيات (Wishlist)
  • 🔍 بحث متقدم وفلترة حسب المؤلف والناشر والسنة
  • 📄 ترقيم الصفحات (Pagination)
  • ⭐ نظام التقييمات والمراجعات
  • 👤 لوحة تحكم المدير (Admin Dashboard)
  • 🌙 الوضع الليلي (Dark Mode)
  • 📱 تحسين التصميم للهاتف المحمول

👨‍💻 بنية الكود الرئيسية

BookController.cs — التحكم بالكتب
[Route("api/[controller]")]
[ApiController]
public class BookController : ControllerBase
{
    private readonly AppDbContext _context;

    public BookController(AppDbContext context) => _context = context;

    // GET api/Book — جلب جميع الكتب
    [HttpGet()]
    public async Task<ActionResult<Book[]>> GetAllBooksAsync()
    {
        var books = await _context.Books.ToListAsync();
        return Ok(books);
    }

    // GET api/Book/{isbn} — جلب كتاب بالـ ISBN
    [HttpGet("{id}")]
    public async Task<ActionResult<Book>> GetBookByIdAsync(string id)
    {
        var book = await _context.Books.FirstOrDefaultAsync(x => x.Isbn.Contains(id));
        if (book == null) return NotFound("الكتاب المطلوب غير موجود.");
        return Ok(book);
    }
}
book-service.ts — خدمة الاتصال بالـ API
@Injectable({ providedIn: 'root' })
export class BookService {
  baseURL = 'http://localhost:5000/api';
  httpClient = inject(HttpClient);

  getAllBooks(): Observable<IBook[]> {
    return this.httpClient.get<IBook[]>(`${this.baseURL}/Book`);
  }

  getBookById(id: string | number): Observable<IBook> {
    return this.httpClient.get<IBook>(`${this.baseURL}/Book/${id}`);
  }
}
ibook.ts — واجهة TypeScript للكتاب
export interface IBook {
  isbn: string;
  title: string;
  subTitle: string;
  author: string;
  publish_date: string;
  publisher: string;
  pages: number;
  description: string;
  website: string;
  imageUrl: string;
}

📜 الرخصة

هذا المشروع مرخص تحت رخصة MIT — راجع ملف LICENSE لمزيد من التفاصيل.


صُنع بـ ❤️ باستخدام ASP.NET Core و Angular

⭐ إذا أعجبك المشروع، لا تنسَ وضع نجمة على الـ Repository!

About

this rep represents a full stack .net 10 and angular 20 library web app, while its minimalist and a lot futures still don't work right away it has basic functionalities.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors