Garage Management System - Home Assignment

December 3, 2025 ยท View on GitHub

Author: Rachel Baknrot Date: December 2025 Repository: https://github.com/rachelbak/MigdalGarageProject

Screenshots:

Dashboard View Main Dashboard showing the garage list and Gov API integration

Add Garage Logic Smart merging logic when adding existing professions

Description:

A Full Stack application for managing garage records. The system integrates with the Israeli Government Data API to fetch garage information, allows users to select and save garages to a local database, and view/filter the data.

Tech Stack:

  • Server: .NET 10 Web API, Entity Framework Core
  • Client: Angular 17+ (Standalone Components, Signals, Control Flow)
  • Database: PostgreSQL (Containerized via Docker)
  • UI Framework: Angular Material (SCSS)

Architecture:

Clean N-Layer Architecture with DTO/Entity Separation:

  • GovDto (External API contract)
  • GarageDto (Client contract)
  • Garage Entity (Database schema)

Features Implemented:

  1. Server Side:

    • Async API endpoints for fetching data and saving records
    • Proxy endpoint for Government API (Limited to 5 records as requested)
    • Smart merging logic: Detects existing garages and merges new professions instead of creating duplicates
    • Bulk Insert optimization to prevent N+1 queries
    • Server-side validation using Data Annotations
    • Proper DTO mapping and clean architecture
  2. Client Side:

    • Angular Material Dashboard with Hebrew UI
    • Multi-select dropdown populated from external API
    • Client-side validation: Filters out garages already existing in the table before sending request
    • Real-time filtering of the data table (Name, City, Profession)
    • Angular Animations (Fade-in effects) to prevent layout shifts
    • State management using Angular Signals for reactive updates
    • Responsive design supporting mobile devices
    • User notifications (Snackbar) for success/error states with detailed feedback (Added vs Updated counts)

Prerequisites:

  1. Git
  2. Node.js (v18+) & Angular CLI (v17+)
  3. .NET 10.0 SDK
  4. Docker Desktop

How to Run:

  1. Clone the Repository:
   git clone https://github.com/rachelbak/MigdalGarageProject.git
   cd MigdalGarageProject
  1. Database Setup:
    • Start PostgreSQL container:
     docker run --name migdal-db -e POSTGRES_PASSWORD=1234 -p 5432:5432 -d postgres
  • Connection string is pre-configured in 'GarageServer/appsettings.json': Host=localhost;Port=5432;Database=MigdalGarageDB;Username=postgres;Password=1234
  • Note: The application uses 'EnsureCreated()' to automatically generate the DB schema on startup
  1. Server:

  2. Client:

    • Open terminal in 'GarageClient' folder
    • Run: npm install
    • Run: ng serve -o
    • Application will open automatically at http://localhost:4200

Design Decisions:

  • Separation of Concerns: Strict separation between DTOs and Entities
  • Performance: Bulk Inserts to prevent N+1 queries when saving large datasets
  • State Management: Angular Signals for reactive and efficient state updates
  • UX-First Approach: Detailed feedback to keep users informed

Notes:

  • The UI is fully in Hebrew as requested for the Israeli market
  • Code comments and documentation are in English
  • All screenshots are included in the repository root (screen1.png, screen2.png)

Contact:

For questions or issues, please open an issue in the repository.