This project is a Django-based web application with a MySQL database, utilizing Celery for asynchronous task processing and Gunicorn for serving the application in a production environment. The project is containerized using Docker and has a frontend built with React and TypeScript using Vite and Yarn for production builds.
.
├── exam_django
│  ├── ai
│  │  ├── clients
│  │  │  └── gemini_client
│  │  ├── config
│  │  ├── migrations
│  │  └── service
│  │  └── database_service
│  ├── asset
│  │  ├── migrations
│  │  ├── models
│  │  ├── serializers
│  │  ├── service
│  │  │  ├── asset_approve_service
│  │  │  │  └── lead_role_service
│  │  │  ├── asset_assign_service
│  │  │  ├── asset_count_service
│  │  │  ├── asset_crud_service
│  │  │  ├── asset_lifecycle_crud_service
│  │  │  ├── asset_log_crud_service
│  │  │  ├── asset_type_crud_service
│  │  │  ├── asset_unassign_service
│  │  │  ├── business_unit_crud_service
│  │  │  ├── data_import_service
│  │  │  ├── employee_crud_service
│  │  │  ├── export_service
│  │  │  ├── location_crud_service
│  │  │  └── memory_crud_service
│  │  ├── tests
│  │  └── views
│  ├── exam_django
│  ├── notification
│  │  ├── client
│  │  ├── config
│  │  ├── migrations
│  │  ├── service
│  │  └── utils
│  │  └── email_body_contents
│  ├── static
│  ├── user_auth
│  │  ├── migrations
│  │  └── tests
│  └── utils
└── exam_frontend
├── public
│  ├── images
│  │  ├── authentication
│  │  ├── products
│  │  └── users
│  └── static
└── src
├── Test
│  ├── AssetTable
│  ├── Charts
│  ├── DrawerComponent
│  ├── DropDown
│  ├── Export
│  ├── GlobalSearch
│  └── RejectedAssetPage
├── components
│  ├── AddAsset
│  │  └── types
│  ├── AssetTable
│  │  ├── api
│  │  └── types
│  ├── AssignAsset
│  │  ├── AssetTable
│  │  │  ├── CardComponent
│  │  │  │  └── types
│  │  │  └── types
│  │  └── Assign
│  │  └── types
│  ├── AutocompleteBox
│  │  └── api
│  ├── Avatar
│  ├── CardComponent
│  │  └── types
│  ├── ChatBot
│  ├── DashBoardCardComponent
│  │  └── types
│  ├── DashboardAssetTable
│  │  └── types
│  ├── Deallocate
│  │  └── AssetTable
│  │  ├── CardComponent
│  │  │  └── types
│  │  └── types
│  ├── DrawerComponent
│  │  └── types
│  ├── DropDown
│  ├── Export
│  ├── GlobalSearch
│  │  └── types
│  ├── Navbar
│  ├── NoData
│  ├── QueryBuilder
│  │  ├── api
│  │  └── types
│  ├── SideDrawerComponent
│  │  └── types
│  ├── TableNavBar
│  │  └── types
│  ├── TimelineLog
│  │  └── api
│  ├── Tooltip
│  │  └── types
│  ├── Upload
│  ├── UserContext
│  ├── charts
│  │  ├── api
│  │  ├── chartHandlers
│  │  │  ├── PieChartHandlers
│  │  │  └── types
│  │  └── types
│  └── sidebar
│  └── types
├── config
├── layouts
└── pages
├── ApprovedRequest
├── AssignAsset
├── Deallocate
├── ExpiredAssets
├── MyApprovals
├── PendingRequest
├── RejectedAssetPage
├── RequestPage
├── UpdatableAssetPage
├── authentication
└── index
└── types
- Docker and Docker Compose
- Python 3.10+
- Node.js 18.20+ and yarn
- MySQL
Profiles are used for running docker containers in different environments.
Note: Add .env in exam_django with the configurations required for deploying in development environment
Note: Add aad.config.json in exam_django with the corresponding configurations
Note: Update .env in exam_frontend with the configurations required for deploying in development environment
docker compose --profile development up
Note: Add .prod.env in exam_django with the configurations required for deploying in stage environment
Note: Add aad.config.json in exam_django with the corresponding configurations
Note: Update .env in exam_frontend with the configurations required for deploying in stage environment
docker compose --profile stage up
cd exam_django
// Create python virtual environment
pip install -r requirements.txt
// Dummy Values
DJANGO_SECRET_KEY=3r5@t!s6%j8(2)u@l*9z4&c%k1#s@9a7*
DEBUG_STATUS=True
DB_NAME=asset_management_database
DB_USER=my_user
DB_PORT=3306
DB_PASSWORD=my_password
DB_HOST=localhost
ALLOWED_HOSTS=localhost,127.0.0.1
CORS_ORIGIN_WHITELIST=http://localhost:5173
CORS_ALLOWED_ORIGINS=http://localhost:5173
CELERY_BROKER_URL=redis://localhost:6379/0
CELERY_RESULT_BACKEND=redis://localhost:6379/0
[email protected]
EMAIL_HOST_PASSWORD=abcd efgh ijk lmno
EMAIL_PORT=587
EMAIL_USE_TLS=True
SENTRY_DSN=https://72b3f8d4d2e4a2fc56d0c00e2a94b82e@r6248150176033174.ingest.us.sentry.io/234723642389
HEALTH_CHECK_APP=http://localhost:8000/health/app/
HEALTH_CHECK_EXTERNAL=http://localhost:8000/health/external/
BACKUP_PARENT_DIR=backup
FULL_BACKUP_DIR=full_backup
GOOGLE_API_KEY=your_api_key
Change values of:
- client_id
- client_credential
- authority
// Dummy values
{
"type": {
"client_type": "CONFIDENTIAL",
"authority_type": "SINGLE_TENANT",
"framework": "DJANGO"
},
"client": {
"client_id": "12312cab-2342342-df324-32434c",
"client_credential": "kasjdflasjdf3ou.asdjf~sdf23i9",
"authority": "https://login.microsoftonline.com/723ba763cdf2370238"
},
"auth_request": {
"redirect_uri": null,
"scopes": [],
"response_type": "code"
},
"flask": null,
"django": {
"id_web_configs": "MS_ID_WEB_CONFIGS",
"auth_endpoints": {
"prefix": "auth",
"sign_in": "sign_in",
"edit_profile": "edit_profile",
"redirect": "redirect",
"sign_out": "sign_out",
"post_sign_out": "post_sign_out"
}
}
}
python manage.py migrate
python manage.py runserver
The development server will be hosted on http://localhost:8000 by default.
In another terminal,
celery -A exam_django worker --pool=solo --loglevel=info
In another terminal,
celery -A exam_django beat --loglevel=info
cd exam_frontend
yarn install
// Dummy values
VITE_CONFIG_URL=http://localhost:8000/api/v1
VITE_ADD_ASSET_URL=http://localhost:8000/api/v1/asset/
VITE_LOGIN_URL=http://localhost:8000/auth/sign_in
VITE_GET_ASSET_TYPE=http://localhost:8000/api/v1/asset/asset_type
yarn dev
You should have curl
installed in your system
cd exam_django/dummy_data_scripts/
chmod +x dummy_data.sh
./dummy_data.sh 127.0.0.1
cd exam_django/dummy_data_scripts/
dummy_data.bat 127.0.0.1
- username:
getwithashish.sysadmin
- password:
getwithashish@sysadmin
- username:
getwithashish.lead
- password:
getwithashish@lead
Feel free to open issues or pull requests if you find any bugs or have improvements.