-
Notifications
You must be signed in to change notification settings - Fork 0
project objectives
The Currency Conversion API is a comprehensive Java-based project designed to facilitate currency conversion through a robust REST API. This project serves as a foundational example of modern Java application development, showcasing best practices, integration with external services, and deployment using Docker.
- Develop a REST API that accepts currency pairs as input and returns the conversion rate.
- Integrate with the Exchange Rate API to fetch real-time conversion rates.
- Utilize an embedded database (H2) to store query information, including the date, time, obtained conversion rate, and input currencies.
- Ensure the entire application, including the API and database, is containerized using Docker to guarantee consistency across different environments.
- Provide Docker scripts and configurations to streamline the setup and execution of the application.
- Implement a CI/CD pipeline using GitHub Actions to automate testing, building, and deployment processes.
- Automatically generate and update documentation, such as
CHANGELOG.md,.env,swagger.json,swagger.yaml, andDIRECTORY.md. - Ensure the CI/CD pipeline includes steps for:
- Setting up JDK 17 and installing necessary dependencies.
- Running tests to ensure code quality.
- Generating necessary SVG images for Markdown Documentation (PlantUML).
- Uploading files if changes are detected.
- Cleaning up the local repository.
- Ensure the application can be run on various platforms, including Windows, Linux, and Unix.
- Provide both shell scripts (
.sh) and batch scripts (.bat) to facilitate easy execution on different operating systems.
- Follow Domain-Driven Design (DDD) principles to ensure the codebase is modular and easily extensible.
- Maintain high code quality and readability to facilitate future development and maintenance.
- Use CI/CD to generate and check changes in documentation files, ensuring they are always up-to-date.
- Automate the creation of a detailed
DIRECTORY.mdfile to document the project structure.
- Implement support for internationalization by configuring the
project.propertiesfile. - Allow messages and labels to be translated into different languages to cater to a global audience.
- Develop unit tests, integration tests, and end-to-end (E2E) tests to ensure the API functions correctly.
- Use automated testing tools to maintain high test coverage.
- Dual-license the project under MIT and Apache 2.0 licenses to provide flexibility in usage.
- Include a detailed
LICENSEfile and information about licensing terms.
- Provide a
CONTRIBUTING.mdfile with detailed guidelines for contributing to the project. - Include a
CODE_OF_CONDUCT.mdto set expectations for behavior within the project community.
- Maintain a
FUTURE.mdfile to outline planned enhancements and future developments for the project. - Encourage the community to contribute improvement proposals and engage in discussions.
The project includes a console terminal (index.sh and index.bat) that serves as the main menu for accessing various Dockerized applications:
- Server: Starts the Java Spring server.
- Console: Accesses the currency conversion client.
- DB: Lists data persisted in the database.
-
Directory: Generates and views the
DIRECTORY.mdfile. - Changelog: Generates and views the project changelog.
-
.env: Contains environment variables, including the
PROJECT_VERSION, generated by the CI/CD pipeline. - DIRECTORY.md: Automatically generated to document the project structure.
-
OpenAPI and Postman Collection: Provides
swagger.json,swagger.yaml, andpostman_collection.jsonfor API testing and documentation.
- ARCHITECTURE.md: Describes the project's architecture, including the presentation, application, domain, and infrastructure layers.
- Diagrams: Includes UML diagrams to illustrate the project context, container view, solution strategy, building blocks, runtime view, and deployment view.
The Currency Conversion API project aims to provide a robust, scalable, and well-documented solution for currency conversion. By leveraging modern development practices, automated CI/CD pipelines, and comprehensive testing, this project serves as an exemplary base for Java developers looking to build and maintain similar applications.
- Overview: Presentation of the project, highlighting its purpose and the context in which it is embedded.
- Project Objectives.
- Scope and Functionalities: Description of the main functionalities offered by the project and its scope of operation.
- Initial Configurations: Steps required to set up the development or production environment.
- Installation Instructions: Detailed procedures for installing the project in different environments.
- Docker Configuration: Specifications on how to configure and use Docker for the project.
- Folder Structure: Description of the organization of the project directories.
- Project Architecture: Explanation of the architecture used, including design patterns and technical decisions.
- Development Flow: Description of the development process adopted, including planning, coding, and review stages.
- Apache Camel Integration: Guide on integrating Apache Camel into the project, including configuration and usage.
- Contributors and Authors: Recognition of the contributors to the project.
- Contributions: Guidelines on how to contribute to the project, including code standards and pull request requirements, tips and best practices.
- Code of Conduct: Behavioral guidelines expected for the project community.
- OpenAPI Specification: Details about the OpenAPI specification used to document the API endpoints.
- API Documentation with Swagger: Information on how to access and use the interactive API documentation generated by Swagger.
- Javadoc Documentation: Information on the Javadoc documentation generated for the project.
- Endpoint Description: Details of the available API endpoints, including methods, parameters, and usage examples.
- Database Management: Strategies and practices for efficient management of the database used by the project.
- Testing Strategies: Approach and methods used to test the software, including unit, integration, and E2E tests.
- Testing Tools: Description of the testing tools used in the project and how to configure them.
- CI/CD Pipeline: Explanation of the continuous integration and delivery pipeline, detailing each stage and its function.
- Automations and Artifact Generation: Description of the automations incorporated into the CI/CD, including documentation generation and build artifacts.
- .gitignore, .editorconfig and project.properties: Utility of these files to maintain code consistency and quality.
- Maven Wrapper and application.properties: Explanation of how these files help standardize the development environment.
- .env File and Travis CI Settings: Use of these files to configure the environment and CI integrations.
- Code Standards and Security: Guidelines for maintaining code quality and security.
- Monitoring and Logging Practices: Recommended techniques for monitoring and logging in the project.
- Licensing: Information about the rights and restrictions associated with the use of the software.
- Terms of Use: Information about the terms and conditions for using the software.
- Future Plans: Discussion on functionalities and improvements considered for future versions of the project.
- Improvement Proposals: Space for the community to suggest and debate improvements and innovations.
- External Links and References: Additional resources and external documentation relevant to the project.
- Security Policy: Details on the supported versions, reporting vulnerabilities, and general security practices.