The Mandulis Ticketing System is an open-source issue and ticket management platform built using Spring Boot and React. It offers key functionalities such as ticket creation, assignment, prioritization, and collaboration tools.
- Small to Medium Enterprises (SMEs): Businesses needing internal or customer-facing issue tracking.
- Open Source Contributors: Developers looking for a flexible ticketing system that can be easily customized and extended.
- Organizations with DevOps Teams: Teams focused on issue tracking, incident management, and customer support.
-
MVP Release (v1.0.0):
- Core ticketing features (create, update, delete, assign tickets).
- User management (authentication, authorization, roles).
- Basic reporting and filtering capabilities (by status, priority, etc.).
- API documentation using Swagger.
- Simple UI with basic workflows for managing tickets.
-
API Enhancements:
- Implement pagination and sorting in key API endpoints.
- Improve error handling and responses.
- Secure the API with JWT and Spring Security.
-
Frontend MVP:
- Have clear UI design requirements
- Get a minimal functional Frontend UI working
-
Testing and Stability:
- Implement unit and integration tests for critical components.
- Set up CI/CD pipelines for automated builds and tests.
- Version 0.2.0: Initial stable development branch with core features and a UI MVP.
- Version 0.3.0: Enhanced Security features with authorization and/or permissions, and the attachment features.
- Version 1.0.0: First official release (MVP) with all core features and stable UI.
-
Advanced Features:
- Implement SLAs and notifications for overdue tickets.
- Introduce customizable workflows and automation (e.g., automatic ticket assignment).
- Multi-tenant support for organizations.
-
Scalability and Performance:
- Optimize database queries and indexing for large datasets.
- Introduce caching strategies for frequent API requests.
- Improve deployment strategies (e.g., containerization with Docker, Kubernetes).
-
Extensibility and Integrations:
- Provide webhook support for external integrations (e.g., Slack, Microsoft Teams).
- Create a plugin system for third-party extensions.
- Integration with event streaming platforms (Kafka, RabbitMQ, etc..)
-
Enhanced Analytics and Reporting:
- Build dashboards for tracking ticket resolution times, team performance, and SLA adherence.
- Add export options (CSV, PDF) for reports.
-
Community and Documentation:
- Develop comprehensive developer and user documentation.
- Establish contribution guidelines and foster community engagement (issue tracking, discussions).
- Organize regular releases based on community feedback and contributions.
- Version 2.0.0: Introduce advanced features, multi-tenant support, and improved scalability.
- Version 3.0.0: Fully extensible platform with plugin support, integrations, and analytics.
- Ongoing Releases: Regular updates focusing on stability, community contributions, and feature enhancements.
- Java 21+
- PostgreSQL server (16+)
- Maven
- Create a file called
.env
in the root of the API with the following:
DB_PASSWORD=<USERNAME>
DB_USERNAME=<PASSWORD>
DB_URL=jdbc:postgresql://<HOST>:<PORT>/<DATABASE>
JWT_SECRET=<Generated JWT Secret from ./scripts/Generate-Jwt.ps1>
- Run the following command in a terminal:
mvn clean spring-boot:run
This project uses Git for version control. To ensure a clean and organized history, please follow these version control guidelines when contributing.
We follow a simplified Gitflow workflow:
-
Main Branch (
main
):- This branch always contains the stable production-ready code.
- Only merge features that are thoroughly tested.
-
Development Branch (
dev
):- This is the default branch for active development.
- All new features, bug fixes, and enhancements should be merged here before being considered for release.
-
Feature Branches:
- Naming convention:
feature/feature-name
- Use these branches for developing new features. Once completed and tested, open a pull request to merge into
dev
.
- Naming convention:
-
Hotfix Branches:
- Naming convention:
hotfix/issue-or-bug-name
- Used for critical fixes that need to be applied directly to the
main
branch. After merging intomain
, the changes should also be merged back intodev
.
- Naming convention:
-
Release Branches:
- Naming convention:
release/version-number
- Used for finalizing a release (e.g., testing, documentation updates) before merging into
main
and tagging a version.
- Naming convention:
Use clear and concise commit messages that describe the changes you’ve made. Follow this convention:
[type]: [short description]
- Types:
feat
: A new featurefix
: A bug fixdocs
: Documentation changesstyle
: Code style changes (formatting, etc.)refactor
: Code restructuring without changing behaviortest
: Adding or updating testschore
: Routine tasks like updating dependencies
Examples:
feat: add user authentication flow
fix: resolve NPE in TicketService
docs: update API endpoint details in README
When submitting a pull request:
- Ensure your branch is up-to-date with the
dev
branch. - Rebase if necessary to avoid merge conflicts.
- Provide a clear and detailed description of what the PR does.
- Include references to any related issues (e.g.,
Fixes #45
). - Ensure all tests pass before requesting a review.
We use Semantic Versioning for tagging releases:
- Format:
vMAJOR.MINOR.PATCH
MAJOR
: Incompatible API changesMINOR
: Backward-compatible functionalityPATCH
: Backward-compatible bug fixes
Examples:
v1.0.0
: First stable releasev1.1.0
: Adds new functionality while remaining compatiblev1.1.1
: Fixes a bug in a backward-compatible manner
-
Rebasing vs. Merging: When working on a feature branch, prefer rebasing onto
dev
instead of mergingdev
into your branch. This keeps history linear and avoids unnecessary merge commits.- Before merging into
dev
, use:git pull --rebase origin dev
- Before merging into
-
Squash Commits: For small changes or fixes, consider squashing commits to avoid cluttering the history.
When resolving conflicts:
- Use meaningful resolution messages.
- Test your changes after resolving conflicts to ensure everything works as expected.
After merging a branch (feature, hotfix, release), delete it to keep the repository tidy.