Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Open QuarterMaster Software

Back

This is where all the software we maintain for Open QuarterMaster lives.

Overall design

---
title: Overall System Diagram
---
graph TD
    
    user((User))
    
    subgraph Infrastructure
        I-Mongo[(MongoDB)]
        I-Postgres[(Postgres)]
        I-Keycloak[Keycloak]
        I-Kafka[(Kafka)]
        I-Plugin[(Plugin DB)]
        
        I-Keycloak --> I-Postgres
    end
    
    subgraph Core Components
        C-API[Core API]
        C-BS[\Base Station/]
        
        C-BS -->|Reads/Writes to| C-API
    end
    
    subgraph Plugins
        P-a[\Plugin/]
    end


    user -->|Auth using| I-Keycloak
    user --> C-BS
    user --> P-a
    
    C-API --> I-Mongo
    C-API -->|Writes Messages to| I-Kafka
    C-API -->|Auth using| I-Keycloak
    
    C-BS -->|Auth using| I-Keycloak

    P-a --> C-API
    P-a -->|Auth using| I-Keycloak
    P-a -->|Reads messages from| I-Kafka
    P-a --> I-Plugin

    subgraph Key
        key-ui[\UI/]
        key-service[Service]
        key-database[(Database)]
    end

Loading

The above diagram describes how the system is designed, no matter the deployment method.

At the center of the system are the core components. These make up the base functionalities of the system, and where plugins come in to extend that functionality. The Core API handles the bulk of this; all basic inventory handling is done through this service. The Base Station is our main front-end that users interact with. It is simply a wrapper of the functionalities provided by the Core API.

The Infrastructure section here is to denote which technologies we are building on top of. For example, the Core API directly relies on MongoDB as it's database backend, as well as writing messages to the Kafka broker. Generally, we prefer using Keycloak for our authentication needs, but this could be largely deployment specific.

Plugins operate separately from the core components, and add additional functionalities on top of the basic inventory management ones. One example is providing an api to search for items from external sources. Plugins can both tie into existing database components, such as Kafka and Keycloak, or they can operate on their own with their own database.

For more information, please see the overall docs directory, or the documentation for the individual groups or components.