Garage Management System - Home Assignment
December 3, 2025 ยท View on GitHub
Author: Rachel Baknrot Date: December 2025 Repository: https://github.com/rachelbak/MigdalGarageProject
Screenshots:
Main Dashboard showing the garage list and Gov API integration
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:
-
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
-
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:
- Git
- Node.js (v18+) & Angular CLI (v17+)
- .NET 10.0 SDK
- Docker Desktop
How to Run:
- Clone the Repository:
git clone https://github.com/rachelbak/MigdalGarageProject.git
cd MigdalGarageProject
- 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
-
Server:
- Open terminal in 'GarageServer' folder
- Run:
dotnet run - Server will start at https://localhost:7233
- Swagger UI available at https://localhost:7233/swagger
-
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.