From ebca8154f0419a7c262f707333b632f236060e70 Mon Sep 17 00:00:00 2001 From: FahimFBA Date: Fri, 25 Oct 2024 13:33:15 +0600 Subject: [PATCH 1/4] =?UTF-8?q?=F0=9F=93=9D=20Update=20documentation=20for?= =?UTF-8?q?=20Docusaurus=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- docs-docusaurus/docs/intro.md | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6597c5c..5f3fe4e 100644 --- a/README.md +++ b/README.md @@ -99,10 +99,13 @@ The API will now be available at `http://127.0.0.1:8000`. ```bash vallocation/ │ +├── .github/ # Action Workflows ├── config/ │ └── database.py # Database configuration for MongoDB │ -├── docs/ # Documentation (Docusaurus) +├── docs/ # Documentation (Static Site - Generated by Docusaurus) +│ +├── docs-docusaurus/ # Documentation (Docusaurus) │ ├── models/ │ └── vallocation_model.py # Pydantic model for vehicle allocations @@ -117,6 +120,7 @@ vallocation/ ├── .gitignore # Git ignore rules ├── LICENSE # License file for the project ├── main.py # Entry point of the FastAPI application +├── README.md # Repository README ├── requirements.txt # Python dependencies for the project ``` diff --git a/docs-docusaurus/docs/intro.md b/docs-docusaurus/docs/intro.md index 6ae1290..d520509 100644 --- a/docs-docusaurus/docs/intro.md +++ b/docs-docusaurus/docs/intro.md @@ -102,10 +102,13 @@ The API will now be available at `http://127.0.0.1:8000`. ```bash vallocation/ │ +├── .github/ # Action Workflows ├── config/ │ └── database.py # Database configuration for MongoDB │ -├── docs/ # Documentation (Docusaurus) +├── docs/ # Documentation (Static Site - Generated by Docusaurus) +│ +├── docs-docusaurus/ # Documentation (Docusaurus) │ ├── models/ │ └── vallocation_model.py # Pydantic model for vehicle allocations @@ -120,6 +123,7 @@ vallocation/ ├── .gitignore # Git ignore rules ├── LICENSE # License file for the project ├── main.py # Entry point of the FastAPI application +├── README.md # Repository README ├── requirements.txt # Python dependencies for the project ``` From e0f59d44429c8bc13af90b88a782b669c7eb8329 Mon Sep 17 00:00:00 2001 From: FahimFBA Date: Fri, 25 Oct 2024 13:34:25 +0600 Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=93=9D=20Update=20contribution=20info?= =?UTF-8?q?rmation=20links=20in=20intro=20and=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- docs-docusaurus/docs/intro.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5f3fe4e..f098acf 100644 --- a/README.md +++ b/README.md @@ -263,5 +263,5 @@ Each allocation is stored in MongoDB in the following format: - **Fahim** - Developer, Architect - **[Contributors](https://github.com/FahimFBA/vallocation/contributors)** -Feel free to open issues or submit pull requests to help improve this project! +Feel free to open [issues](https://github.com/FahimFBA/vallocation/issues) or submit [pull requests](https://github.com/FahimFBA/vallocation/pulls) to help improve this project! diff --git a/docs-docusaurus/docs/intro.md b/docs-docusaurus/docs/intro.md index d520509..d4bb963 100644 --- a/docs-docusaurus/docs/intro.md +++ b/docs-docusaurus/docs/intro.md @@ -268,5 +268,5 @@ Each allocation is stored in MongoDB in the following format: - **Fahim** - Developer, Architect - **[Contributors](https://github.com/FahimFBA/vallocation/contributors)** -Feel free to open issues or submit pull requests to help improve this project! +Feel free to open [issues](https://github.com/FahimFBA/vallocation/issues) or submit [pull requests](https://github.com/FahimFBA/vallocation/pulls) to help improve this project! From 29a467aea3e76d43d0cbd2fbd0cc1f01b8ad4d87 Mon Sep 17 00:00:00 2001 From: FahimFBA Date: Fri, 25 Oct 2024 13:35:09 +0600 Subject: [PATCH 3/4] =?UTF-8?q?=E2=9C=A8=20Add=20banner=20image=20to=20REA?= =?UTF-8?q?DME=20=F0=9F=9A=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added a banner image to the README for better visual representation. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f098acf..6cccc47 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ A fast and efficient **Vehicle Allocation System** built using **FastAPI** and **MongoDB**, designed to allow employees to allocate vehicles for specific dates, manage allocation statuses, and handle driver assignments. The system ensures that a vehicle is not double-booked and enforces date restrictions to prevent allocation modifications after the allocation date. +![Banner](./docs-docusaurus/static/img/vallocation_banner.png) + > [!NOTE] > Please check the [official website](https://fahimfba.github.io/vallocation/) for the complete instructions along with some popular resources! From 3be655be138479019ed1fbeaa120aa7481826cea Mon Sep 17 00:00:00 2001 From: FahimFBA Date: Fri, 25 Oct 2024 13:36:16 +0600 Subject: [PATCH 4/4] =?UTF-8?q?=E2=9C=A8=20Update=20scripts=20for=20MDX=20?= =?UTF-8?q?and=20Welcome=20blog=20posts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/404.html | 2 +- ..._banner-2616bd730802c91535b6fcffab6ff2d8.png | Bin 0 -> 62123 bytes docs/assets/js/0e384e19.4e1704de.js | 1 + docs/assets/js/runtime~main.5aa29cb0.js | 1 + docs/blog/archive/index.html | 2 +- .../all-sebastien-lorber-articles/index.html | 2 +- docs/blog/authors/index.html | 2 +- docs/blog/authors/yangshun/index.html | 2 +- docs/blog/first-blog-post/index.html | 2 +- docs/blog/index.html | 2 +- docs/blog/long-blog-post/index.html | 2 +- docs/blog/mdx-blog-post/index.html | 2 +- docs/blog/tags/docusaurus/index.html | 2 +- docs/blog/tags/facebook/index.html | 2 +- docs/blog/tags/hello/index.html | 2 +- docs/blog/tags/hola/index.html | 2 +- docs/blog/tags/index.html | 2 +- docs/blog/welcome/index.html | 2 +- docs/docs/intro/index.html | 9 +++++---- docs/docs/resources/index.html | 2 +- docs/index.html | 2 +- docs/markdown-page/index.html | 2 +- 22 files changed, 25 insertions(+), 22 deletions(-) create mode 100644 docs/assets/images/vallocation_banner-2616bd730802c91535b6fcffab6ff2d8.png create mode 100644 docs/assets/js/0e384e19.4e1704de.js create mode 100644 docs/assets/js/runtime~main.5aa29cb0.js diff --git a/docs/404.html b/docs/404.html index 33f347b..b3d5cfa 100644 --- a/docs/404.html +++ b/docs/404.html @@ -5,7 +5,7 @@ Page Not Found | Vehicle Allocation (Vallocation) - + diff --git a/docs/assets/images/vallocation_banner-2616bd730802c91535b6fcffab6ff2d8.png b/docs/assets/images/vallocation_banner-2616bd730802c91535b6fcffab6ff2d8.png new file mode 100644 index 0000000000000000000000000000000000000000..40c53419db0da4691bdfb8aef48d223a0fc0eb9f GIT binary patch literal 62123 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.r(n),i.d(n,{assets:()=>o,contentTitle:()=>t,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var l=i(4848),r=i(8453);const s={sidebar_position:1},t="Vehicle Allocation (Vallocation)",a={id:"intro",title:"Vehicle Allocation (Vallocation)",description:"A fast and efficient Vehicle Allocation System built using FastAPI and MongoDB, designed to allow employees to allocate vehicles for specific dates, manage allocation statuses, and handle driver assignments. The system ensures that a vehicle is not double-booked and enforces date restrictions to prevent allocation modifications after the allocation date.",source:"@site/docs/intro.md",sourceDirName:".",slug:"/intro",permalink:"/vallocation/docs/intro",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Resources",permalink:"/vallocation/docs/resources"}},o={},c=[{value:"Table of Contents",id:"table-of-contents",level:2},{value:"Overview",id:"overview",level:2},{value:"Features",id:"features",level:2},{value:"Tech Stack",id:"tech-stack",level:2},{value:"Requirements",id:"requirements",level:2},{value:"Installation",id:"installation",level:2},{value:"1. Clone the repository",id:"1-clone-the-repository",level:3},{value:"2. Create a virtual environment",id:"2-create-a-virtual-environment",level:3},{value:"3. Install the required dependencies",id:"3-install-the-required-dependencies",level:3},{value:"4. Set up environment variables",id:"4-set-up-environment-variables",level:3},{value:"5. Run the application",id:"5-run-the-application",level:3},{value:"Project Structure",id:"project-structure",level:2},{value:"API Endpoints",id:"api-endpoints",level:2},{value:"Create an Allocation",id:"create-an-allocation",level:3},{value:"Update an Allocation",id:"update-an-allocation",level:3},{value:"Delete an Allocation",id:"delete-an-allocation",level:3},{value:"Get Allocation History",id:"get-allocation-history",level:3},{value:"Example Request:",id:"example-request",level:4},{value:"Example Response:",id:"example-response",level:4},{value:"Pagination & Filters:",id:"pagination--filters",level:4},{value:"Database Schema",id:"database-schema",level:2},{value:"Contributors",id:"contributors",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.header,{children:(0,l.jsx)(n.h1,{id:"vehicle-allocation-vallocation",children:"Vehicle Allocation (Vallocation)"})}),"\n",(0,l.jsxs)(n.p,{children:["A fast and efficient ",(0,l.jsx)(n.strong,{children:"Vehicle Allocation System"})," built using ",(0,l.jsx)(n.strong,{children:"FastAPI"})," and ",(0,l.jsx)(n.strong,{children:"MongoDB"}),", designed to allow employees to allocate vehicles for specific dates, manage allocation statuses, and handle driver assignments. The system ensures that a vehicle is not double-booked and enforces date restrictions to prevent allocation modifications after the allocation date."]}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.img,{alt:"Banner",src:i(8895).A+"",width:"1846",height:"896"})}),"\n",(0,l.jsx)(n.h2,{id:"table-of-contents",children:"Table of Contents"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"#overview",children:"Overview"})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"#features",children:"Features"})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"#tech-stack",children:"Tech Stack"})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"#requirements",children:"Requirements"})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"#installation",children:"Installation"})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"#project-structure",children:"Project Structure"})}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.a,{href:"#api-endpoints",children:"API Endpoints"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"#create-an-allocation",children:"Create an Allocation"})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"#update-an-allocation",children:"Update an Allocation"})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"#delete-an-allocation",children:"Delete an Allocation"})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"#get-allocation-history",children:"Get Allocations History"})}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"#database-schema",children:"Database Schema"})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"#contributors",children:"Contributors"})}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,l.jsxs)(n.p,{children:["The ",(0,l.jsx)(n.strong,{children:"Vehicle Allocation System"})," is a RESTful API that allows employees to reserve vehicles for specific days. Each vehicle has an assigned driver, and only one vehicle can be allocated per employee for a given day. Additionally, users can view, update, and delete allocations, provided the actions are performed before the allocated date."]}),"\n",(0,l.jsx)(n.p,{children:"This project is designed to handle a high number of users and vehicles, with optimizations for load handling and database efficiency."}),"\n",(0,l.jsx)(n.h2,{id:"features",children:"Features"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Create Allocations:"})," Employees can allocate vehicles for future dates."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Update Allocations:"})," Modify existing allocations before the allocation date."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Delete Allocations:"})," Cancel allocations before the allocation date."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Conflict Prevention:"})," Prevents multiple allocations of the same vehicle on the same date."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Status Tracking:"})," Tracks the status of each allocation (e.g., pending, confirmed, canceled)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Driver Assignment:"})," Each vehicle is pre-assigned to a driver."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Performance Optimized:"})," Handles a large number of concurrent users and operations."]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"tech-stack",children:"Tech Stack"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Backend:"})," FastAPI"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Database:"})," MongoDB (Async with Motor)"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"ORM:"})," Pydantic (For schema validation)"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Environment Management:"})," Python virtual environment"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Testing:"})," Pytest"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"requirements",children:"Requirements"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.strong,{children:"Python 3.9+"})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.strong,{children:"MongoDB"})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.strong,{children:"FastAPI"})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.strong,{children:"Pydantic"})}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Motor"})," (Async MongoDB driver)"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,l.jsx)(n.p,{children:"Follow these steps to set up and run the project locally."}),"\n",(0,l.jsx)(n.h3,{id:"1-clone-the-repository",children:"1. Clone the repository"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/FahimFBA/vallocation\r\ncd vallocation\n"})}),"\n",(0,l.jsx)(n.h3,{id:"2-create-a-virtual-environment",children:"2. Create a virtual environment"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"python -m venv env\r\nsource env/bin/activate # On Windows: `env\\Scripts\\activate`\n"})}),"\n",(0,l.jsx)(n.h3,{id:"3-install-the-required-dependencies",children:"3. Install the required dependencies"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"pip install -r requirements.txt\n"})}),"\n",(0,l.jsx)(n.h3,{id:"4-set-up-environment-variables",children:"4. Set up environment variables"}),"\n",(0,l.jsxs)(n.p,{children:["Create a ",(0,l.jsx)(n.code,{children:".env"})," file in the root directory with the following content:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{children:"MONGO_USERNAME=your_username\r\nMONGO_PASSWORD=your_password\r\nMONGO_CLUSTER_URL=your_mongodb_cluster_name\n"})}),"\n",(0,l.jsx)(n.h3,{id:"5-run-the-application",children:"5. Run the application"}),"\n",(0,l.jsx)(n.p,{children:"Start the FastAPI server:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"uvicorn main:app --reload\n"})}),"\n",(0,l.jsx)(n.p,{children:"or,"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"fastapi dev main.py\n"})}),"\n",(0,l.jsxs)(n.p,{children:["The API will now be available at ",(0,l.jsx)(n.code,{children:"http://127.0.0.1:8000"}),"."]}),"\n",(0,l.jsx)(n.h2,{id:"project-structure",children:"Project Structure"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"vallocation/\r\n\u2502\r\n\u251c\u2500\u2500 .github/ # Action Workflows\r\n\u251c\u2500\u2500 config/\r\n\u2502 \u2514\u2500\u2500 database.py # Database configuration for MongoDB\r\n\u2502\r\n\u251c\u2500\u2500 docs/ # Documentation (Static Site - Generated by Docusaurus)\r\n\u2502\r\n\u251c\u2500\u2500 docs-docusaurus/ # Documentation (Docusaurus)\r\n\u2502\r\n\u251c\u2500\u2500 models/\r\n\u2502 \u2514\u2500\u2500 vallocation_model.py # Pydantic model for vehicle allocations\r\n\u2502\r\n\u251c\u2500\u2500 routers/\r\n\u2502 \u2514\u2500\u2500 route.py # FastAPI routes for vehicle allocation\r\n\u2502\r\n\u251c\u2500\u2500 schemas/\r\n\u2502 \u2514\u2500\u2500 schemas.py # Pydantic schemas for request/response models\r\n\u2502\r\n\u251c\u2500\u2500 .env.example # Example environment variables file\r\n\u251c\u2500\u2500 .gitignore # Git ignore rules\r\n\u251c\u2500\u2500 LICENSE # License file for the project\r\n\u251c\u2500\u2500 main.py # Entry point of the FastAPI application\r\n\u251c\u2500\u2500 README.md # Repository README\r\n\u251c\u2500\u2500 requirements.txt # Python dependencies for the project\n"})}),"\n",(0,l.jsx)(n.h2,{id:"api-endpoints",children:"API Endpoints"}),"\n",(0,l.jsx)(n.h3,{id:"create-an-allocation",children:"Create an Allocation"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Endpoint:"})," ",(0,l.jsx)(n.code,{children:"POST /allocate"})]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Description:"})," Allocates a vehicle for a given employee on a specified date."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Request Body:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-json",children:'{\r\n "employee_id": 101,\r\n "vehicle_id": 456,\r\n "allocation_date": "2024-11-01"\r\n}\n'})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Response:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-json",children:'{\r\n "id": "60c72b2f9b7e4e2d88d0f66b",\r\n "employee_id": 101,\r\n "vehicle_id": 456,\r\n "driver_id": 45,\r\n "allocation_date": "2024-11-01",\r\n "status": "pending"\r\n}\n'})}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"update-an-allocation",children:"Update an Allocation"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Endpoint:"})," ",(0,l.jsx)(n.code,{children:"PUT /allocate/{allocation_id}"})]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Description:"})," Updates an existing allocation (e.g., change date or status)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Request Body:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-json",children:'{\r\n "allocation_date": "2024-11-02",\r\n "status": "confirmed"\r\n}\n'})}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"delete-an-allocation",children:"Delete an Allocation"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Endpoint:"})," ",(0,l.jsx)(n.code,{children:"DELETE /allocate/{allocation_id}"})]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Description:"})," Deletes an allocation before the allocation date."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Response:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-json",children:'{\r\n "message": "Allocation deleted successfully"\r\n}\n'})}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"get-allocation-history",children:"Get Allocation History"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Endpoint:"})," ",(0,l.jsx)(n.code,{children:"GET /history/"})]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:"Description:"})," Fetches allocation history with optional filters (e.g., by employee, vehicle, driver, or allocation date) and supports pagination."]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.strong,{children:"Query Parameters:"})}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"employee_id"})," (optional): Filter allocations by employee ID."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"vehicle_id"})," (optional): Filter allocations by vehicle ID."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"driver_id"})," (optional): Filter allocations by driver ID."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"allocation_date"})," (optional): Filter allocations by allocation date (format: ",(0,l.jsx)(n.code,{children:"YYYY-MM-DD"}),")."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"skip"})," (optional, default: 0): Number of records to skip for pagination."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"limit"})," (optional, default: 10): Maximum number of records to return."]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.strong,{children:"Response:"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-json",children:'{\r\n "total": 100,\r\n "skip": 0,\r\n "limit": 10,\r\n "results": [\r\n {\r\n "id": "60c72b2f9b7e4e2d88d0f66b",\r\n "employee_id": 101,\r\n "vehicle_id": 456,\r\n "driver_id": 45,\r\n "allocation_date": "2024-11-01",\r\n "status": "pending"\r\n },\r\n {\r\n "id": "60c72b3f9b7e4e2d88d0f66c",\r\n "employee_id": 102,\r\n "vehicle_id": 457,\r\n "driver_id": 46,\r\n "allocation_date": "2024-11-02",\r\n "status": "confirmed"\r\n }\r\n ]\r\n}\n'})}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"example-request",children:"Example Request:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{children:"GET /history/?employee_id=101&skip=0&limit=10\n"})}),"\n",(0,l.jsx)(n.h4,{id:"example-response",children:"Example Response:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-json",children:'{\r\n "total": 100,\r\n "skip": 0,\r\n "limit": 10,\r\n "results": [\r\n {\r\n "id": "60c72b2f9b7e4e2d88d0f66b",\r\n "employee_id": 101,\r\n "vehicle_id": 456,\r\n "driver_id": 45,\r\n "allocation_date": "2024-11-01",\r\n "status": "pending"\r\n },\r\n {\r\n "id": "60c72b3f9b7e4e2d88d0f66c",\r\n "employee_id": 101,\r\n "vehicle_id": 458,\r\n "driver_id": 47,\r\n "allocation_date": "2024-11-03",\r\n "status": "confirmed"\r\n }\r\n ]\r\n}\n'})}),"\n",(0,l.jsx)(n.h4,{id:"pagination--filters",children:"Pagination & Filters:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["The endpoint allows pagination by using the ",(0,l.jsx)(n.code,{children:"skip"})," and ",(0,l.jsx)(n.code,{children:"limit"})," query parameters."]}),"\n",(0,l.jsxs)(n.li,{children:["You can apply multiple filters like ",(0,l.jsx)(n.code,{children:"employee_id"}),", ",(0,l.jsx)(n.code,{children:"vehicle_id"}),", ",(0,l.jsx)(n.code,{children:"driver_id"}),", or ",(0,l.jsx)(n.code,{children:"allocation_date"})," to narrow down the results."]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"database-schema",children:"Database Schema"}),"\n",(0,l.jsx)(n.p,{children:"Each allocation is stored in MongoDB in the following format:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-json",children:'{\r\n "_id": "ObjectId(\'60c72b2f9b7e4e2d88d0f66b\')",\r\n "employee_id": 101,\r\n "vehicle_id": 456,\r\n "driver_id": 45,\r\n "allocation_date": "2024-11-01",\r\n "status": "pending"\r\n}\n'})}),"\n",(0,l.jsx)(n.h2,{id:"contributors",children:"Contributors"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Fahim"})," - Developer, Architect"]}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.strong,{children:(0,l.jsx)(n.a,{href:"https://github.com/FahimFBA/vallocation/contributors",children:"Contributors"})})}),"\n"]}),"\n",(0,l.jsxs)(n.p,{children:["Feel free to open ",(0,l.jsx)(n.a,{href:"https://github.com/FahimFBA/vallocation/issues",children:"issues"})," or submit ",(0,l.jsx)(n.a,{href:"https://github.com/FahimFBA/vallocation/pulls",children:"pull requests"})," to help improve this project!"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}},8895:(e,n,i)=>{i.d(n,{A:()=>l});const l=i.p+"assets/images/vallocation_banner-2616bd730802c91535b6fcffab6ff2d8.png"},8453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>a});var l=i(6540);const r={},s=l.createContext(r);function t(e){const n=l.useContext(s);return l.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),l.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/runtime~main.5aa29cb0.js b/docs/assets/js/runtime~main.5aa29cb0.js new file mode 100644 index 0000000..36a5394 --- /dev/null +++ b/docs/assets/js/runtime~main.5aa29cb0.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,a,t,r,c,f={},o={};function d(e){var a=o[e];if(void 0!==a)return a.exports;var t=o[e]={id:e,loaded:!1,exports:{}};return f[e].call(t.exports,t,t.exports,d),t.loaded=!0,t.exports}d.m=f,d.c=o,e=[],d.O=(a,t,r,c)=>{if(!t){var f=1/0;for(i=0;i=c)&&Object.keys(d.O).every((e=>d.O[e](t[n])))?t.splice(n--,1):(o=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[t,r,c]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var c=Object.create(null);d.r(c);var f={};a=a||[null,t({}),t([]),t(t)];for(var o=2&r&&e;"object"==typeof o&&!~a.indexOf(o);o=t(o))Object.getOwnPropertyNames(o).forEach((a=>f[a]=()=>e[a]));return f.default=()=>e,d.d(c,f),c},d.d=(e,a)=>{for(var t in a)d.o(a,t)&&!d.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,t)=>(d.f[t](e,a),a)),[])),d.u=e=>"assets/js/"+({36:"e8e6f722",48:"a94703ab",61:"1f391b9e",98:"a7bd4aaa",134:"393be207",168:"a13f0c16",203:"c35208e4",209:"01a85c17",212:"621db11d",235:"a7456010",249:"ccc49370",279:"458b89ea",325:"59362658",328:"e273c56f",401:"17896441",403:"7b03775a",450:"91576f7f",472:"814f3328",518:"331bc03b",557:"d9f32620",602:"acf7ee9a",609:"925b3f96",634:"c4f5d8e4",637:"f4f34a3a",643:"a6aa9e1f",647:"5e95c892",694:"8717b14a",711:"9e4087bc",737:"7661071f",742:"aba21aa0",813:"6875c492",858:"36994c47",864:"d92a3c43",867:"33fc5bb8",903:"acecf23e",972:"73664a40",976:"0e384e19",979:"6f3bcb71",991:"92501bdc",997:"6f7026d7"}[e]||e)+"."+{36:"2a1c4b91",48:"46f96676",61:"dbf5a73a",98:"304ebab0",134:"1849e491",168:"7e313a03",203:"0b7c01b6",209:"d97fcaee",212:"680f510d",235:"47cad1bc",237:"02cb92cf",249:"af7d37c2",279:"17d0891d",325:"c49ce643",328:"bd26b6f3",401:"ae602934",403:"24f43e1c",450:"61e17b2b",472:"229cfd99",518:"649d0b65",557:"2bc59f1f",599:"3d5c534f",602:"8b060a7e",609:"23e99db0",634:"e45831b4",637:"adee01e7",643:"4a2795cc",647:"4bba8c03",694:"680c49a0",711:"c2e72ae7",737:"c9c74a4d",742:"eb7bf6f2",813:"475a5802",858:"5b43e344",864:"ec367c20",867:"94321b3a",903:"a6bcc559",972:"5ad32c38",973:"7003decf",976:"4e1704de",979:"f9486397",991:"83574a52",997:"f8469653"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},c="docs:",d.l=(e,a,t,f)=>{if(r[e])r[e].push(a);else{var o,n;if(void 0!==t)for(var b=document.getElementsByTagName("script"),i=0;i{o.onerror=o.onload=null,clearTimeout(s);var c=r[e];if(delete r[e],o.parentNode&&o.parentNode.removeChild(o),c&&c.forEach((e=>e(t))),a)return a(t)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=u.bind(null,o.onerror),o.onload=u.bind(null,o.onload),n&&document.head.appendChild(o)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/vallocation/",d.gca=function(e){return e={17896441:"401",59362658:"325",e8e6f722:"36",a94703ab:"48","1f391b9e":"61",a7bd4aaa:"98","393be207":"134",a13f0c16:"168",c35208e4:"203","01a85c17":"209","621db11d":"212",a7456010:"235",ccc49370:"249","458b89ea":"279",e273c56f:"328","7b03775a":"403","91576f7f":"450","814f3328":"472","331bc03b":"518",d9f32620:"557",acf7ee9a:"602","925b3f96":"609",c4f5d8e4:"634",f4f34a3a:"637",a6aa9e1f:"643","5e95c892":"647","8717b14a":"694","9e4087bc":"711","7661071f":"737",aba21aa0:"742","6875c492":"813","36994c47":"858",d92a3c43:"864","33fc5bb8":"867",acecf23e:"903","73664a40":"972","0e384e19":"976","6f3bcb71":"979","92501bdc":"991","6f7026d7":"997"}[e]||e,d.p+d.u(e)},(()=>{var e={354:0,869:0};d.f.j=(a,t)=>{var r=d.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(354|869)$/.test(a))e[a]=0;else{var c=new Promise(((t,c)=>r=e[a]=[t,c]));t.push(r[2]=c);var f=d.p+d.u(a),o=new Error;d.l(f,(t=>{if(d.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var c=t&&("load"===t.type?"missing":t.type),f=t&&t.target&&t.target.src;o.message="Loading chunk "+a+" failed.\n("+c+": "+f+")",o.name="ChunkLoadError",o.type=c,o.request=f,r[1](o)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,t)=>{var r,c,f=t[0],o=t[1],n=t[2],b=0;if(f.some((a=>0!==e[a]))){for(r in o)d.o(o,r)&&(d.m[r]=o[r]);if(n)var i=n(d)}for(a&&a(t);b Archive | Vehicle Allocation (Vallocation) - + diff --git a/docs/blog/authors/all-sebastien-lorber-articles/index.html b/docs/blog/authors/all-sebastien-lorber-articles/index.html index efff715..201b978 100644 --- a/docs/blog/authors/all-sebastien-lorber-articles/index.html +++ b/docs/blog/authors/all-sebastien-lorber-articles/index.html @@ -5,7 +5,7 @@ Sébastien Lorber - 3 posts | Vehicle Allocation (Vallocation) - + diff --git a/docs/blog/authors/index.html b/docs/blog/authors/index.html index 139dc0b..db76f08 100644 --- a/docs/blog/authors/index.html +++ b/docs/blog/authors/index.html @@ -5,7 +5,7 @@ Authors | Vehicle Allocation (Vallocation) - + diff --git a/docs/blog/authors/yangshun/index.html b/docs/blog/authors/yangshun/index.html index 93c1e56..9f25dbf 100644 --- a/docs/blog/authors/yangshun/index.html +++ b/docs/blog/authors/yangshun/index.html @@ -5,7 +5,7 @@ Yangshun Tay - 3 posts | Vehicle Allocation (Vallocation) - + diff --git a/docs/blog/first-blog-post/index.html b/docs/blog/first-blog-post/index.html index 7d5a66a..c88d986 100644 --- a/docs/blog/first-blog-post/index.html +++ b/docs/blog/first-blog-post/index.html @@ -5,7 +5,7 @@ First Blog Post | Vehicle Allocation (Vallocation) - + diff --git a/docs/blog/index.html b/docs/blog/index.html index 198461d..552019e 100644 --- a/docs/blog/index.html +++ b/docs/blog/index.html @@ -5,7 +5,7 @@ Blog | Vehicle Allocation (Vallocation) - + diff --git a/docs/blog/long-blog-post/index.html b/docs/blog/long-blog-post/index.html index 06889b9..7d7f4d9 100644 --- a/docs/blog/long-blog-post/index.html +++ b/docs/blog/long-blog-post/index.html @@ -5,7 +5,7 @@ Long Blog Post | Vehicle Allocation (Vallocation) - + diff --git a/docs/blog/mdx-blog-post/index.html b/docs/blog/mdx-blog-post/index.html index d4fc718..f114fc1 100644 --- a/docs/blog/mdx-blog-post/index.html +++ b/docs/blog/mdx-blog-post/index.html @@ -5,7 +5,7 @@ MDX Blog Post | Vehicle Allocation (Vallocation) - + diff --git a/docs/blog/tags/docusaurus/index.html b/docs/blog/tags/docusaurus/index.html index 6f19512..6b8ab30 100644 --- a/docs/blog/tags/docusaurus/index.html +++ b/docs/blog/tags/docusaurus/index.html @@ -5,7 +5,7 @@ 4 posts tagged with "Docusaurus" | Vehicle Allocation (Vallocation) - + diff --git a/docs/blog/tags/facebook/index.html b/docs/blog/tags/facebook/index.html index 1070c70..5315547 100644 --- a/docs/blog/tags/facebook/index.html +++ b/docs/blog/tags/facebook/index.html @@ -5,7 +5,7 @@ One post tagged with "Facebook" | Vehicle Allocation (Vallocation) - + diff --git a/docs/blog/tags/hello/index.html b/docs/blog/tags/hello/index.html index 970ec73..b7e00ef 100644 --- a/docs/blog/tags/hello/index.html +++ b/docs/blog/tags/hello/index.html @@ -5,7 +5,7 @@ 2 posts tagged with "Hello" | Vehicle Allocation (Vallocation) - + diff --git a/docs/blog/tags/hola/index.html b/docs/blog/tags/hola/index.html index d15d716..f13a25c 100644 --- a/docs/blog/tags/hola/index.html +++ b/docs/blog/tags/hola/index.html @@ -5,7 +5,7 @@ One post tagged with "Hola" | Vehicle Allocation (Vallocation) - + diff --git a/docs/blog/tags/index.html b/docs/blog/tags/index.html index 0f8836e..a3c1301 100644 --- a/docs/blog/tags/index.html +++ b/docs/blog/tags/index.html @@ -5,7 +5,7 @@ Tags | Vehicle Allocation (Vallocation) - + diff --git a/docs/blog/welcome/index.html b/docs/blog/welcome/index.html index 0393db6..6bcd34f 100644 --- a/docs/blog/welcome/index.html +++ b/docs/blog/welcome/index.html @@ -5,7 +5,7 @@ Welcome | Vehicle Allocation (Vallocation) - + diff --git a/docs/docs/intro/index.html b/docs/docs/intro/index.html index dbdfbbf..01b8794 100644 --- a/docs/docs/intro/index.html +++ b/docs/docs/intro/index.html @@ -5,12 +5,13 @@ Vehicle Allocation (Vallocation) | Vehicle Allocation (Vallocation) - +

Vehicle Allocation (Vallocation)

A fast and efficient Vehicle Allocation System built using FastAPI and MongoDB, designed to allow employees to allocate vehicles for specific dates, manage allocation statuses, and handle driver assignments. The system ensures that a vehicle is not double-booked and enforces date restrictions to prevent allocation modifications after the allocation date.

+

Banner

Table of Contents

  • Overview
  • @@ -77,7 +78,7 @@

    5. Run
    fastapi dev main.py

    The API will now be available at http://127.0.0.1:8000.

    Project Structure

    -
    vallocation/

    ├── config/
    │ └── database.py # Database configuration for MongoDB

    ├── docs/ # Documentation (Docusaurus)

    ├── models/
    │ └── vallocation_model.py # Pydantic model for vehicle allocations

    ├── routers/
    │ └── route.py # FastAPI routes for vehicle allocation

    ├── schemas/
    │ └── schemas.py # Pydantic schemas for request/response models

    ├── .env.example # Example environment variables file
    ├── .gitignore # Git ignore rules
    ├── LICENSE # License file for the project
    ├── main.py # Entry point of the FastAPI application
    ├── requirements.txt # Python dependencies for the project
    +
    vallocation/

    ├── .github/ # Action Workflows
    ├── config/
    │ └── database.py # Database configuration for MongoDB

    ├── docs/ # Documentation (Static Site - Generated by Docusaurus)

    ├── docs-docusaurus/ # Documentation (Docusaurus)

    ├── models/
    │ └── vallocation_model.py # Pydantic model for vehicle allocations

    ├── routers/
    │ └── route.py # FastAPI routes for vehicle allocation

    ├── schemas/
    │ └── schemas.py # Pydantic schemas for request/response models

    ├── .env.example # Example environment variables file
    ├── .gitignore # Git ignore rules
    ├── LICENSE # License file for the project
    ├── main.py # Entry point of the FastAPI application
    ├── README.md # Repository README
    ├── requirements.txt # Python dependencies for the project

    API Endpoints

    Create an Allocation

      @@ -145,8 +146,8 @@

      Database Sch

      Contributors

      -

      Feel free to open issues or submit pull requests to help improve this project!

+

Feel free to open issues or submit pull requests to help improve this project!

\ No newline at end of file diff --git a/docs/docs/resources/index.html b/docs/docs/resources/index.html index e34b4d3..b6e5269 100644 --- a/docs/docs/resources/index.html +++ b/docs/docs/resources/index.html @@ -5,7 +5,7 @@ Resources | Vehicle Allocation (Vallocation) - + diff --git a/docs/index.html b/docs/index.html index a1b570f..aa4d632 100644 --- a/docs/index.html +++ b/docs/index.html @@ -5,7 +5,7 @@ Hello from Vehicle Allocation (Vallocation) | Vehicle Allocation (Vallocation) - + diff --git a/docs/markdown-page/index.html b/docs/markdown-page/index.html index 32399d0..c387406 100644 --- a/docs/markdown-page/index.html +++ b/docs/markdown-page/index.html @@ -5,7 +5,7 @@ Markdown page example | Vehicle Allocation (Vallocation) - +