Skip to content

project objectives

Shelson Ferrari edited this page Jul 23, 2024 · 5 revisions

Project Objectives

Introduction

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.

Main Objectives

1. Provide an API for Currency Conversion

  • 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.

2. Data Persistence

  • Utilize an embedded database (H2) to store query information, including the date, time, obtained conversion rate, and input currencies.

3. Dockerized Environment

  • 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.

4. Continuous Integration and Continuous Delivery (CI/CD)

  • 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, and DIRECTORY.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.

5. Multi-Platform Support

  • 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.

6. Modular and Scalable Code

  • 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.

7. Automated Documentation and Changelog Generation

  • 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.md file to document the project structure.

8. Internationalization Support

  • Implement support for internationalization by configuring the project.properties file.
  • Allow messages and labels to be translated into different languages to cater to a global audience.

9. Comprehensive Testing

  • 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.

10. Licensing and Legal Compliance

  • Dual-license the project under MIT and Apache 2.0 licenses to provide flexibility in usage.
  • Include a detailed LICENSE file and information about licensing terms.

11. Contributor Guidelines

  • Provide a CONTRIBUTING.md file with detailed guidelines for contributing to the project.
  • Include a CODE_OF_CONDUCT.md to set expectations for behavior within the project community.

12. Future Plans and Improvements

  • Maintain a FUTURE.md file to outline planned enhancements and future developments for the project.
  • Encourage the community to contribute improvement proposals and engage in discussions.

Key Components and Features

Console Terminal

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.md file.
  • Changelog: Generates and views the project changelog.

Automated Files and Scripts

  • .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, and postman_collection.json for API testing and documentation.

Project Architecture 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.

Conclusion

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.


Wiki Menu

Wiki Main Page

1. Introduction to the Project

  • 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.

2. Configuration and Installation

3. Project Structure

  • Folder Structure: Description of the organization of the project directories.
  • Project Architecture: Explanation of the architecture used, including design patterns and technical decisions.

4. Development

  • 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.

5. API and Documentation

6. Endpoints and Database

  • 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.

7. Testing

  • 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.

8. CI/CD and Automations

  • 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.

9. Configuration Files

10. Best Practices

11. Legal and Licensing

  • 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.

12. Projections and Innovations

  • 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.

13. Attachments and Useful Links

14. Security

  • Security Policy: Details on the supported versions, reporting vulnerabilities, and general security practices.

Clone this wiki locally