Vehicle Maintenance Management System
AutoBan is a vehicle maintenance management system built with Go and PostgreSQL. It allows users to manage their vehicle maintenance records, service schedules, and vehicle catalog efficiently.
- Go
- PostgreSQL
- Docker & Docker Compose
- JWT for Authentication
- Redis for session and cache
- Go 1.x or higher
- Docker and Docker Compose
- An
.envfile (you can copy from.env.example)
-
Clone the repository:
git clone https://github.com/yourusername/AutoBan.git cd AutoBan -
Copy the environment file:
cp .env.example .env
Edit
.envwith your database and Redis settings. -
Run the services with Docker:
docker-compose up -d
-
Run the application:
go run cmd/app/main.go
POST /api/v1/auth/register- Register a new userPOST /api/v1/auth/login- User loginPOST /api/v1/auth/refresh-token- Refresh access tokenPOST /api/v1/auth/send-verifycode- Send verify codePOST /api/v1/auth/active- active userPOST /api/v1/auth/logout- Logout (requires token)POST /api/v1/auth/logout-all- Logout from all devices (requires token)GET /api/v1/auth/sessions- List active sessions (requires token)
GET /api/v1/users/me- Get user profile (requires token)PUT /api/v1/users/me- Update profile (requires token)PUT /api/v1/users/me/change-password- Change password (requires token)DELETE /api/v1/users/me- Delete account (requires token)
GET /api/v1/vehicles/hierarchy- Get full vehicle hierarchy (types, brands, models, generations)GET /api/v1/vehicles/types- List vehicle typesGET /api/v1/vehicles/types/{type_id}- Get vehicle type detailsGET /api/v1/vehicles/types/{type_id}/brands- List brands for a typeGET /api/v1/vehicles/types/{type_id}/brands/{brand_id}- Get brand detailsGET /api/v1/vehicles/types/{type_id}/brands/{brand_id}/models- List models for a brandGET /api/v1/vehicles/types/{type_id}/brands/{brand_id}/models/{model_id}- Get model detailsGET /api/v1/vehicles/types/{type_id}/brands/{brand_id}/models/{model_id}/generations- List generations for a modelGET /api/v1/vehicles/types/{type_id}/brands/{brand_id}/models/{model_id}/generations/{generation_id}- Get generation details
POST /api/v1/user/vehicles- Add a vehicle to userGET /api/v1/user/vehicles- List user vehiclesGET /api/v1/user/vehicles/{vehicle_id}- Get user vehicle detailsPUT /api/v1/user/vehicles/{vehicle_id}- Update user vehicleDELETE /api/v1/user/vehicles/{vehicle_id}- Delete user vehicle
GET /api/v1/user/vehicles/{vehicle_id}/service-visits- List service visitsPOST /api/v1/user/vehicles/{vehicle_id}/service-visits- Add a service visitGET /api/v1/user/vehicles/{vehicle_id}/service-visits/last- Get last service visitGET /api/v1/user/vehicles/{vehicle_id}/service-visits/{visit_id}- Get service visit detailsPUT /api/v1/user/vehicles/{vehicle_id}/service-visits/{visit_id}- Update service visitDELETE /api/v1/user/vehicles/{vehicle_id}/service-visits/{visit_id}- Delete service visit
GET /api/v1/user/vehicles/{vehicle_id}/oil-changes- List oil changesGET /api/v1/user/vehicles/{vehicle_id}/oil-changes/last- Last oil changeGET /api/v1/user/vehicles/{vehicle_id}/oil-changes/{oil_change_id}- Oil change detailsGET /api/v1/user/vehicles/{vehicle_id}/oil-filters- List oil filter changesGET /api/v1/user/vehicles/{vehicle_id}/oil-filters/last- Last oil filter changeGET /api/v1/user/vehicles/{vehicle_id}/oil-filters/{oil_filter_id}- Oil filter change details
GET /api/v1/admin/users- List usersGET /api/v1/admin/users/{id}- Get user detailsPUT /api/v1/admin/users/{id}- Update userPOST /api/v1/admin/users/{id}/role- Change user rolePOST /api/v1/admin/users/{id}/status- Change user statusPOST /api/v1/admin/users/{id}/change-password- Change user passwordDELETE /api/v1/admin/users/{id}- Delete user
POST /api/v1/admin/vehicles/types- Create vehicle typePUT /api/v1/admin/vehicles/types/{type_id}- Update vehicle typeDELETE /api/v1/admin/vehicles/types/{type_id}- Delete vehicle typePOST /api/v1/admin/vehicles/types/{type_id}/brands- Create brandPUT /api/v1/admin/vehicles/types/{type_id}/brands/{brand_id}- Update brandDELETE /api/v1/admin/vehicles/types/{type_id}/brands/{brand_id}- Delete brandPOST /api/v1/admin/vehicles/types/{type_id}/brands/{brand_id}/models- Create modelPUT /api/v1/admin/vehicles/types/{type_id}/brands/{brand_id}/models/{model_id}- Update modelDELETE /api/v1/admin/vehicles/types/{type_id}/brands/{brand_id}/models/{model_id}- Delete modelPOST /api/v1/admin/vehicles/types/{type_id}/brands/{brand_id}/models/{model_id}/generations- Create generationPUT /api/v1/admin/vehicles/types/{type_id}/brands/{brand_id}/models/{model_id}/generations/{generation_id}- Update generationDELETE /api/v1/admin/vehicles/types/{type_id}/brands/{brand_id}/models/{model_id}/generations/{generation_id}- Delete generation
The project uses PostgreSQL as its primary database. The database is containerized using Docker and can be easily set up using Docker Compose.
Database Name: autoban
User: autoban
Password: autoban
Port: 5432
Host: localhost (when running locally)Redis is used for session management and caching.
Port: 6379
Password: autoban (default, configurable via REDIS_PASSWORD)
Persistence: Enabled (AOF mode)Create a .env file in the root directory using .env.example as a template. The following variables are required for database configuration:
# PostgreSQL Configuration
DB_HOST=your_db_host # Default: localhost
DB_PORT=your_db_port # Default: 5432
DB_USER=your_db_user # Default: autoban
DB_PASSWORD=your_db_password # Default: autoban
DB_NAME=your_db_name # Default: autoban
# Redis Configuration
REDIS_ADDR=your_redis_addr # Default: localhost:6379
REDIS_PASSWORD=your_redis_password # Default: autoban
REDIS_DB=your_redis_db # Default: 0- PostgreSQL data is persisted in a Docker volume named
db_data - Redis data is persisted in a Docker volume named
redis_data
- JWT authentication, session management and caching with Redis
- Full vehicle hierarchy is cached in Redis for fast access
- Uses GORM and PostgreSQL for database
- Clean, maintainable architecture
- API documentation with Swagger (if enabled)
Contributions are welcome! Please submit a Pull Request.
This project is licensed under the MIT License. See the LICENSE file for more details.