|
| 1 | +# Software Development Simulation |
| 2 | + |
| 3 | +[](https://github.com/MarkoDojkic/Software-Development-Simulation/actions/workflows/build.yml) |
| 4 | + |
| 5 | + |
| 6 | + |
| 7 | + |
| 8 | + |
| 9 | + |
| 10 | +**Note:** SonarQube information is based on the last GitHub Action run and is generated locally. As such, there is no direct link available to the SonarQube dashboard. |
| 11 | + |
| 12 | +## Overview |
| 13 | + |
| 14 | +The Software Development Simulation project is a web-based application designed to simulate and manage software development tasks. It utilizes Spring Boot for backend services, Spring Integration for messaging, and integrates with Swagger for API documentation. |
| 15 | + |
| 16 | +## Features |
| 17 | + |
| 18 | +- **Spring Boot Application**: Built with Spring Boot 3.3.3. |
| 19 | +- **Spring Integration**: Configured with multiple channels for task management. |
| 20 | +- **Swagger Documentation**: Integrated for API documentation and testing. |
| 21 | +- **SonarQube Integration**: Quality and security analysis with all issues resolved. |
| 22 | +- **JaCoCo Test Coverage**: 100% class and method test coverage. |
| 23 | + |
| 24 | +## Setup |
| 25 | + |
| 26 | +1. **Clone the Repository** |
| 27 | + |
| 28 | + ```bash |
| 29 | + git clone https://github.com/MarkoDojkic/Software-Development-Simulation.git |
| 30 | + |
| 31 | +2. **Build the Project** |
| 32 | + |
| 33 | + ```bash |
| 34 | + mvn clean install |
| 35 | +
|
| 36 | +3. **Run the Application** |
| 37 | +
|
| 38 | + ```bash |
| 39 | + mvn spring-boot:run |
| 40 | + |
| 41 | +The application will run on port `21682`. RabbitMQ is required with rabbitmq_mqtt and rabbitmq_web_mqtt plugins enabled and active on port `15675`. |
| 42 | + |
| 43 | +## Docker Setup |
| 44 | + |
| 45 | +To build and run the application using Docker, follow these steps: |
| 46 | + |
| 47 | +### Dockerfile |
| 48 | + |
| 49 | +The `Dockerfile` is set up to build and package the application into a Docker image. It uses Maven to build the JAR file and then packages it into a minimal Java runtime image. |
| 50 | + |
| 51 | +### Build and Run the Docker Image |
| 52 | + |
| 53 | +1. **Build the Docker image:** |
| 54 | + |
| 55 | + ```bash |
| 56 | + docker build -t software-development-simulation . |
| 57 | + ``` |
| 58 | + |
| 59 | +2. **Run the Docker container:** |
| 60 | + |
| 61 | + ```bash |
| 62 | + docker run -p 5672:5672 -p 15672:15672 -p 15675:15675 -p 21682:21682 software-development-simulation |
| 63 | + ``` |
| 64 | + |
| 65 | +This will build the Docker image and run the application. |
| 66 | +NOTE: Before running docker container make sure that no instances of `RabbitMQ` are already active because it will interfere with `docker image RabbitMQ` and messages won`t get through. |
| 67 | +
|
| 68 | +**Access Swagger UI** |
| 69 | +
|
| 70 | +Navigate to `http://localhost:21682/swagger-ui.html` to access the Swagger UI. |
| 71 | +
|
| 72 | +## Spring Integration Channels |
| 73 | +
|
| 74 | +The application utilizes various Spring Integration channels for processing different types of messages. Below is a summary of the key channels and their purposes: |
| 75 | +
|
| 76 | +1. **Error Channels** |
| 77 | +
|
| 78 | + - `errorChannel`: Handles general errors. |
| 79 | + - `errorChannel.mqtt.input`: Sends error messages to MQTT for frontend integration. |
| 80 | + - `errorChannel.logFile.input`: Saves error messages to log file for persistent storage. |
| 81 | +
|
| 82 | +2. **Information Channels** |
| 83 | +
|
| 84 | + - `information.input`: Receives general information. |
| 85 | + - `information.mqtt.input`: Sends information to MQTT for frontend integration. |
| 86 | + - `information.logFile.input`: Saves information to log file for persistent storage. |
| 87 | +
|
| 88 | +3. **Jira Activity Stream Channels** |
| 89 | +
|
| 90 | + - `jiraActivityStream.input`: Receives Jira activity stream messages. |
| 91 | + - `jiraActivityStream.mqtt.input`: Sends Jira activity stream messages to MQTT for frontend integration. |
| 92 | + - `jiraActivityStream.logFile.input`: Saves Jira activity stream messages to log file for persistent storage. |
| 93 | +
|
| 94 | +4. **Epic Channels** |
| 95 | +
|
| 96 | + - `epicMessage.input`: Receives messages related to epics with priority handling. |
| 97 | +
|
| 98 | +5. **Control Bus Channel** |
| 99 | +
|
| 100 | + - `controlBus.input`: Handles control bus messages for managing flows. |
| 101 | +
|
| 102 | +6. **Current Sprint Channels** |
| 103 | +
|
| 104 | + - `currentSprintEpic.input`: Receives epics for the current sprint. |
| 105 | + - `currentSprintUserStories`: Receives user stories for the current sprint using splitter from `currentSprintEpic.input`. |
| 106 | +
|
| 107 | +7. **In Progress Channels** |
| 108 | +
|
| 109 | + - `inProgressEpic`: Receives epics that are currently in progress. |
| 110 | + - `inProgressUserStory`: Receives user stories that are currently in progress. |
| 111 | +
|
| 112 | +8. **Done Channels** |
| 113 | +
|
| 114 | + - `doneEpics.output`: Receives completed epics. |
| 115 | + - `doneSprintUserStories.output`: Receives completed user stories. |
| 116 | + - `doneTechnicalTasks`: Receives completed technical tasks. |
| 117 | +
|
| 118 | +9. **Technical Task Channels** |
| 119 | +
|
| 120 | + - `toDoTechnicalTasks`: Receives technical tasks that are to be done. |
| 121 | + - `trivialTechnicalTaskQueue.input` A`normalTechnicalTaskQueue.input`, `minorTechnicalTaskQueue.input`, `majorTechnicalTaskQueue.input`, `criticalTechnicalTaskQueue.input`, `blockerTechnicalTaskQueue.input`: Receive technical tasks of various priorities. |
| 122 | + - `trivialTechnicalTask`, `normalTechnicalTask`, `minorTechnicalTask`, `majorTechnicalTask`, `criticalTechnicalTask`, `blockerTechnicalTask`: Handle technical tasks based on priority. |
| 123 | +
|
| 124 | +Each channel is configured to handle specific message types and priorities, ensuring efficient processing and management of tasks and messages within the application. Channels that send messages to MQTT or save to log files are specifically set up to facilitate frontend integration and persistent logging. |
| 125 | + |
| 126 | + |
0 commit comments