A modern, full-stack ticketing management system built with FastAPI and Vue 3 with Quasar Framework. This application allows users to create, manage, and track support tickets with role-based access control.
- User Authentication: Secure login and registration with JWT tokens
- Ticket Management: Create, read, update, and delete support tickets
- Status Tracking: Track ticket progress (Open, In Progress, Resolved, Closed)
- Priority Levels: Assign priority levels (Low, Medium, High, Critical) to tickets
- User Roles: Admin, Support, and User roles with different permissions
- Dashboard: View ticket statistics and recent activity
- Comments: Add comments and updates to tickets
- Timeline: Visual timeline of ticket changes
- Responsive Design: Works on desktop and mobile devices
- Real-time Analytics: Monitor ticket metrics and user statistics
- Framework: FastAPI
- Database: SQLite (configurable to PostgreSQL)
- ORM: SQLAlchemy
- Authentication: JWT (JSON Web Tokens)
- Validation: Pydantic
- Framework: Vue 3
- UI Library: Quasar Framework
- State Management: Pinia
- HTTP Client: Axios
- Router: Vue Router
- Python 3.8+
- Node.js 14+
- npm or yarn
- Clone the repository:
cd ticketing-system/backend- Create a virtual environment:
python -m venv venv-
Activate the virtual environment:
- Windows:
venv\Scripts\activate
- macOS/Linux:
source venv/bin/activate
- Windows:
-
Install dependencies:
pip install -r requirements.txt- Initialize the database:
python seed.py- Start the development server:
python main.pyThe API will be available at http://localhost:8000
- Navigate to the frontend directory:
cd ticketing-system/frontend- Install dependencies:
npm install- Start the development server:
npm run devThe application will be available at http://localhost:3000
Once the backend is running, visit http://localhost:8000/docs for interactive API documentation (Swagger UI).
POST /api/auth/register- Register a new userPOST /api/auth/login- Login userPOST /api/auth/logout- Logout userPOST /api/auth/refresh-token- Refresh access token
GET /api/users/- Get all usersGET /api/users/{user_id}- Get specific userPOST /api/users/- Create new userPUT /api/users/{user_id}- Update userDELETE /api/users/{user_id}- Delete user
GET /api/tickets/- Get all ticketsGET /api/tickets/{ticket_id}- Get specific ticketPOST /api/tickets/- Create new ticketPUT /api/tickets/{ticket_id}- Update ticketDELETE /api/tickets/{ticket_id}- Delete ticketPOST /api/tickets/{ticket_id}/comments- Add comment to ticket
GET /api/roles/- Get all rolesGET /api/roles/{role_id}- Get specific rolePOST /api/roles/- Create new rolePUT /api/roles/{role_id}- Update roleDELETE /api/roles/{role_id}- Delete role
GET /api/analytics/dashboard- Get dashboard statisticsGET /api/analytics/tickets/by-status- Get tickets grouped by statusGET /api/analytics/tickets/by-priority- Get tickets grouped by priorityGET /api/analytics/user/{user_id}/statistics- Get user statistics
ticketing-system/
βββ backend/
β βββ main.py # FastAPI application entry point
β βββ config.py # Configuration settings
β βββ database.py # Database connection and session
β βββ requirements.txt # Python dependencies
β βββ seed.py # Database seeding script
β βββ models/ # SQLAlchemy models
β β βββ __init__.py
β β βββ user.py
β β βββ ticket.py
β β βββ role.py
β βββ schemas/ # Pydantic schemas for validation
β β βββ __init__.py
β β βββ user.py
β β βββ ticket.py
β β βββ role.py
β βββ routers/ # API route handlers
β β βββ __init__.py
β β βββ auth.py
β β βββ users.py
β β βββ tickets.py
β β βββ roles.py
β β βββ analytics.py
β βββ middleware/ # Custom middleware
β βββ auth.py
β
βββ frontend/
βββ package.json
βββ quasar.config.js # Quasar configuration
βββ src/
β βββ App.vue # Root component
β βββ boot/ # Boot files
β β βββ axios.js
β βββ stores/ # Pinia stores
β β βββ auth.js
β β βββ tickets.js
β βββ router/ # Vue Router configuration
β β βββ index.js
β β βββ routes.js
β βββ layouts/ # Layout components
β β βββ MainLayout.vue
β β βββ AuthLayout.vue
β βββ pages/ # Page components
β β βββ LoginPage.vue
β β βββ RegisterPage.vue
β β βββ DashboardPage.vue
β β βββ TicketsPage.vue
β β βββ TicketDetailPage.vue
β β βββ CreateTicketPage.vue
β β βββ UsersPage.vue
β β βββ RolesPage.vue
β β βββ ReportsPage.vue
β β βββ ProfilePage.vue
β βββ components/ # Reusable components
β βββ dashboard/
β β βββ StatsCards.vue
β β βββ TicketChart.vue
β β βββ RecentTickets.vue
β βββ tickets/
β β βββ TicketList.vue
β β βββ TicketForm.vue
β β βββ TicketTimeline.vue
β β βββ TicketComments.vue
β β βββ TicketFilters.vue
β βββ users/
β β βββ UserList.vue
β β βββ UserForm.vue
β βββ common/
β βββ ConfirmDialog.vue
Create a .env file in the backend directory:
DATABASE_URL=sqlite:///./ticketing_system.db
SECRET_KEY=your-secret-key-change-in-production
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:8080
APP_NAME=Ticketing System
APP_VERSION=1.0.0
DEBUG=Truecd backend
pytestcd frontend
npm run testpython main.py- Start development serverpython seed.py- Seed database with initial data
npm run dev- Start development servernpm run build- Build for productionnpm run lint- Run ESLintnpm run format- Format code with Prettier
- Update
config.pywith production settings - Set environment variables on your production server
- Use Gunicorn or Uvicorn for production:
uvicorn main:app --host 0.0.0.0 --port 8000
- Build the application:
npm run build
- Deploy the
distfolder to your hosting service (Netlify, Vercel, etc.)
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Your Name - Initial work
- FastAPI documentation
- Quasar Framework
- Vue.js community
For support, email support@ticketingsystem.com or open an issue on GitHub.
- Real-time notifications (WebSocket)
- Email notifications
- File attachments
- Advanced search and filtering
- Custom fields
- SLA management
- Integration with external services
- Mobile app (React Native)
- Initial release
- Basic ticket management
- User authentication
- Role-based access control
- Dashboard with statistics