Overview
The Users service is responsible for managing all user entities in the Masar Eagle platform, including drivers, passengers, companies, and administrators. It handles user profiles, vehicle management, zone configuration, file uploads, and verification workflows.Users service location:
src/services/Users/Users.Api/Program.csCore Responsibilities
- Driver Management: Registration, profile updates, document verification, and commission settings
- Passenger Management: Profile management and wallet preferences
- Company Management: Company profiles, employees, vehicles, and zones
- Vehicle Management: Vehicle types, registration, and assignments
- Zone Management: Geographic zones for service areas
- File Storage: Profile images, documents, and verification photos
- Commission Policies: Configure commission rates for drivers and companies
- Currency Management: Multi-currency support
- User Verification: Driver document review and approval workflow
- Background Jobs: Account purge and data cleanup
Technology Stack
- ASP.NET Core Minimal APIs: Endpoint definitions
- Entity Framework Core: Database access
- PostgreSQL: Primary database
- Wolverine: Message bus with outbox pattern
- RabbitMQ: Inter-service messaging
- FluentValidation: Request validation
- Response Compression: Brotli and Gzip for API responses
- Local File Storage: File uploads to wwwroot directory
Program.cs Configuration
Program.cs
API Endpoints Overview
The Users service exposes numerous endpoints organized by domain:Driver Endpoints
Profile Management
Profile Management
GET /api/drivers/{driverId}- Get driver profilePUT /api/drivers/{driverId}- Update driver profilePOST /api/drivers/profile/submit-for-review- Submit profile for verificationDELETE /api/drivers/{driverId}- Soft delete driver account
Wallet & Currency
Wallet & Currency
GET /api/drivers/me/wallet- Get driver’s wallet infoPUT /api/drivers/me/default-currency- Set default currencyPUT /api/drivers/me/display-currency- Set display currency
Company Association
Company Association
GET /api/drivers/{driverId}/company- Get driver’s company info- Managed through company assignment workflows
App Settings
App Settings
GET /api/app/captains/settings- Get driver app settings- Returns version requirements, features, and configuration
Passenger Endpoints
Profile Management
Profile Management
GET /api/passengers/{passengerId}- Get passenger profilePUT /api/passengers/{passengerId}- Update passenger profileDELETE /api/passengers/{passengerId}- Soft delete passenger account
App Settings
App Settings
GET /api/app/passengers/settings- Get passenger app settings
Company Endpoints
Company Management
Company Management
GET /api/admin/companies- List all companies (admin)GET /api/admin/companies/{companyId}- Get company detailsPOST /api/admin/companies- Create new companyPUT /api/admin/companies/{companyId}- Update companyGET /api/companies/{companyId}/public- Public company infoGET /api/company/{companyId}- Company profile for authenticated users
Employees & Drivers
Employees & Drivers
GET /api/admin/companies/{companyId}/drivers- List company driversPOST /api/admin/companies/{companyId}/drivers- Assign driver to companyDELETE /api/admin/companies/{companyId}/drivers/{driverId}- Remove driver
Vehicle Endpoints
Vehicle Management
Vehicle Management
GET /api/vehicles- List vehiclesGET /api/vehicles/{vehicleId}- Get vehicle detailsPOST /api/vehicles- Create vehiclePUT /api/vehicles/{vehicleId}- Update vehicleDELETE /api/vehicles/{vehicleId}- Delete vehicleGET /api/admin/vehicles- Admin vehicle listing
Vehicle Types
Vehicle Types
GET /api/vehicle-types- List vehicle typesPOST /api/vehicle-types- Create vehicle type (admin)PUT /api/vehicle-types/{id}- Update vehicle typeDELETE /api/vehicle-types/{id}- Delete vehicle type
Zone Endpoints
Zone Management
Zone Management
GET /api/zones- List zonesGET /api/zones/{zoneId}- Get zone detailsPOST /api/admin/zones- Create zone (admin)PUT /api/admin/zones/{zoneId}- Update zoneDELETE /api/admin/zones/{zoneId}- Delete zonePOST /api/zones/validate-travel- Check if travel between zones is allowed
Cities
Cities
GET /api/cities- List citiesPOST /api/cities- Create city (admin)PUT /api/cities/{cityId}- Update cityDELETE /api/cities/{cityId}- Delete city
Admin Endpoints
User Management
User Management
GET /api/admin/admins- List administratorsPOST /api/admin/admins- Create admin userPUT /api/admin/admins/{adminId}- Update adminDELETE /api/admin/admins/{adminId}- Delete adminGET /api/admin/passengers- List all passengers
Verification Reviews
Verification Reviews
GET /api/admin/driver-verification-reviews- Pending driver verificationsPOST /api/admin/driver-verification-reviews/{reviewId}/approve- Approve driverPOST /api/admin/driver-verification-reviews/{reviewId}/reject- Reject driver
Commission Settings
Commission Settings
GET /api/admin/commission-settings- List commission configurationsPOST /api/admin/commission-settings- Create commission rulePUT /api/admin/commission-settings/{id}- Update commission ruleGET /api/admin/commission-policies- List commission policiesPOST /api/admin/commission-policies- Create policy
Currency Management
Currency Management
GET /api/currencies- Public currency listGET /api/admin/currencies- Admin currency managementPOST /api/admin/currencies- Add currencyPUT /api/admin/currencies/{code}- Update currencyDELETE /api/admin/currencies/{code}- Remove currency
File Storage
The Users service handles file uploads for:- Driver profile photos
- Driver license documents
- Vehicle registration documents
- National ID/Iqama scans
- Company logos
Configuration
appsettings.json
Upload Endpoint
Files are uploaded via:Static File Access
Uploaded files are served at:/uploads/{**catch-all} to the Users service.
App Version Management
The service enforces minimum app versions:appsettings.json
Current are blocked from API access.
Background Jobs
AccountPurgeWorker
The service includes a background worker that periodically purges soft-deleted accounts:Inter-Service Communication
The Users service communicates with:Trips Service
To check if users have active trips before allowing certain operations:Notifications Service
To send notifications for:- Driver approval/rejection
- Company invitations
- Account status changes
Message Bus Events
The Users service publishes events via Wolverine + RabbitMQ: Published Events:DriverCreatedDriverUpdatedDriverApprovedDriverRejectedPassengerCreatedCompanyCreatedVehicleCreated
UserAuthenticatedEvent- Provisions user on first loginUpdateDriverRatingCommand- Updates driver rating after tripUpdatePassengerRatingCommand- Updates passenger rating after tripUploadFileCommand- Handles async file processing
Outbox Pattern
The service uses Wolverine’s PostgreSQL outbox to ensure reliable message delivery:Email Configuration
The service can send emails to company users:appsettings.json
Swagger Documentation
API documentation is available at:Related Services
Identity Service
Authenticates users and provisions accounts
Trips Service
Checks user eligibility for operations
Notifications Service
Sends user notifications
Gateway
Routes user-related requests