Skip to content
This repository has been archived by the owner on Dec 31, 2023. It is now read-only.
/ ProfioApp Public archive

The application aimed at providing efficient and professional solutions for transportation management 🚛

License

Notifications You must be signed in to change notification settings

HutechCJ/ProfioApp

Repository files navigation


Profio Application - 🚛 A Modern Logistics Management System ✈️

Profio Application is a monorepo project built with Nx technology. It is a set of extensible dev tools for monorepos, which helps you develop like Google, Facebook, and Microsoft.

Table of Contents

Overview

Profio - the symbol of professionalism in transportation management. Whether you need a solution for managing a fleet of vehicles or ships, Profio provides a powerful tool, optimizing and simplifying the process, ensuring every movement is quick, safe, and efficient.

This is a product of the CJ Code your Future 2023 contest. The purpose of this project is to help CJ Logistics improve the quality of transportation management. All components in the project are free. This project is not for commercial purposes 👍

We are a group of students from Hutech University. We are very happy to be able to participate in this contest. We hope that our project will be useful to CJ Logistics and CJ Olive Networks Vina in the future 🤝

📑 Read documentation for more information about the project.

If you want to find out more about the contest, please visit the CJ Code Your Future from the Hutech IT Fanpage.

Tentative technologies

Building blocks

Building Blocks

Name Usecase Technology
CMS

It will show the information of orders, vehicles, drivers, and other information related to the transportation process. It will also provide a dashboard for managers to monitor the transportation process.

Next.js

Customer Website

It will provide pages for customers look up the information of orders. It will also provide a table for customers to see the history of orders.

Blazor Server

Load Balancer

It will distribute the load to the available servers. It will also provide a dashboard for managers to monitor the load of the servers.

YARP

Driver App

It provides a dashboard for drivers to monitor the transportation process. It will send the location of the vehicle to the server.

Flutter

MQTT Broker

It will receive the location of the vehicle from the driver app and send it to the server.

EMQX

Identity Server

It will manage the users of the application. It will also provide a dashboard for managers to manage the users. We have set up the SSO for the application.

Keycloak

API Server

It will receive the location of the vehicle from the MQTT Broker and send it to the database. It will also send the information of orders, vehicles, drivers, and other information related to the transportation process to the client.

ASP.NET Core

Database

It will store the information of orders, vehicles, drivers, and other information related to the transportation process. We use Redis to cache the data.

PostgreSQL, Redis

OpenTelemetry Collector

It will receive the telemetry data from the OpenTelemetry. It will send the telemetry data to the OpenTelemetry Processor.

OpenTelemetry Collector

Health Check

It will check the health of the servers. It will send the health status of the servers to the Load Balancer.

ASP.NET Core

Exporter

It will export the telemetry data to the OpenTelemetry Collector.

Grafana, Prometheus, Jaeger, Seq, Zipkin

Screenshots

Home page

Homepage

Lookup page

Lookup

Contact page

Contact

Login page

Login

Note If you want to see more, please visit the Getting Started section below.

Getting Started

💻 Infrastructure

  • Nx - Nx is a set of extensible dev tools for monorepos.
  • node.js - Node. js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
  • npm - npm is the package manager for the Node JavaScript platform.
  • Flutter - Flutter is Google's toolkit for creating sleek apps across mobile, web, and desktop from a single codebase.
  • Docker (Kubernetes Enabled) / Podman - Docker is an open platform for app development and management. Podman is a daemonless container engine for OCI Containers on Linux.
  • Kubernetes / AKS / Nomad - The container orchestration platform for Kubernetes, AKS, and Nomad.
  • Helm - Helm is the best way to find, share, and use software built for Kubernetes.
  • Tye - Tye is a tool that makes developing, testing, and deploying applications easier.
  • WSL 2 - Ubuntu OS - WSL 2 enables running Linux ELF64 binaries on Windows.
  • Visual Studio Code - Visual Studio Code is a code editor for modern web and cloud app development.
  • JetBrains Rider / Visual Studio 2022 - JetBrains Rider is a cross-platform .NET IDE built on IntelliJ and ReSharper. Visual Studio is Microsoft's IDE.
  • .NET Core 7 - .NET Framework and .NET Core, including ASP.NET and ASP.NET Core.
  • Python - Python is a programming language that lets you work quickly and integrate systems more effectively.

📦 Services

  • Render - Render is a unified platform for apps and websites with free SSL, global CDN, private networks, and Git auto-deploys.
  • Redis Labs - Redis Labs is the home of Redis, the world’s most popular in-memory database.
  • Azure - Azure is an ever-expanding set of cloud computing services to help your organization meet its business challenges.
  • CloudAMQP - CloudAMQP automates RabbitMQ setup, running, and scaling on all major platforms.
  • EMQX - EMQ X Broker is an open-source, scalable MQTT messaging broker for IoT, M2M, and mobile apps, handling millions of concurrent clients.
  • Google Cloud Platform - Google Cloud Platform (GCP) is a suite of cloud services running on the same infrastructure as Google's user products like Search, Gmail, and YouTube.
  • Supabase - Supabase is an open-source alternative to Firebase that adds real-time and RESTful APIs to your PostgreSQL database without any coding.
  • Twilio - Twilio is a cloud communications platform as a service company based in San Francisco, California.

🛠️ Setup

First, clone the repository to your local machine:

git clone https://github.com/HutechCJ/ProfioApp.git

Next, navigate to the root directory of the project and install the dependencies:

npm install --force

To learn more about the project, please visit the Wiki

🚀 Running the application

For the CMS, navigate to the apps/cms directory and run the following command:

npx nx serve cms --verbose

It will open the CMS in your browser at http://localhost:4200/.

For the API, navigate to the apps/Profio.Api directory and run the following command:

npx nx serve Profio.Api --verbose

It will open the API in your browser at http://localhost:9023/.

For the Proxy, navigate to the apps/Profio.Proxy directory and run the following command:

npx nx serve Profio.Proxy --verbose

It will open the Proxy in your browser at http://localhost:7221/.

For the Web App, navigate to the apps/Profio.Website directory and run the following command:

npx nx serve Profio.Website --verbose

It will open the Web App in your browser at http://localhost:5272/.

For the documentation, navigate to the apps/docs directory and run the following command:

npx nx serve docs --verbose

It will open the documentation in your browser at http://localhost:3000/.

For the Driver App, navigate to the apps/profio-app directory and run the following command:

npx nx serve profio-app --verbose

For running all applications, navigate to the root directory of the project and run the following command:

npx nx run-many --target=serve --all

For running by tye, navigate to the root directory of the project and run the following command:

tye run --dashboard

Warning All connections strings will be unavailable when this repository is public.

🐳 Running services with Container

For running all external services, navigate to the root directory of the project and run the following command:

podman-compose|docker-compose up -d

For running api & proxy, navigate to the root directory of the project and run the following command:

# Pull the latest images
docker pull ghcr.io/hutechcj/profio-api:latest
docker pull ghcr.io/hutechcj/profio-proxy:latest
docker pull ghcr.io/hutechcj/profio-cms:latest
docker pull ghcr.io/hutechcj/profio-webiste:latest

# Run the containers
docker run -d -p 5023:80 ghcr.io/hutechcj/profio-api:latest
docker run -d -p 7221:80 ghcr.io/hutechcj/profio-proxy:latest
docker run -d -p 4200:80 ghcr.io/hutechcj/profio-cms:latest
docker run -d -p 5272:80 ghcr.io/hutechcj/profio-webiste:latest

API development

We use Clean Architecture for the API development. You can read more about Clean Architecture here. The CQRS and Mediator patterns are also used in the API development. Besides, we also use some design patterns such as: Repository Pattern, Unit of Work, Specification Pattern, Inversion of Control / Dependency injection, Options Pattern.

Clean Architecture

Clean Architecture

CQRS

CQRS with Mediator

Open API

Open API

Note We have implemented Redoc to generate the API documentation.

Dependency Graph

You can see the dependency graph of the project by running the following command:

npx nx dep-graph

Here is the dependency graph of the project, generated by Nx:

Dependency Graph

CI/CD

Dependency Graph

External services

📦 Container Management

We used the Portainer service to manage the containers. Portainer is an open-source lightweight management UI which allows you to easily manage your Docker environments.

Dependency Graph

🧑‍⚕️ Health Check

For the API health check, We have used the ASP.NET Core Health Checks library to monitor the health of the application. The health check endpoint is exposed at /hc or /hc-ui and can be accessed via HTTP GET.

Dependency Graph

📊 Monitoring

For the monitoring service, We have used the Prometheus and Grafana services to collect and analyze metrics.

Prometheus

Grafana

📈 Tracing

For the tracing service, We have used the Jaeger service to collect and analyze traces.

Jaeger

We also set up the Zipkin service to collect and analyze traces.

Zipkin

📝 Logging

We set up the seq service to collect and analyze logs.

seq

📦 Database Management

For the database management service, We have used the PgAdmin service to manage the PostgreSQL database.

pg4admin

🔒 Identity Server

For the identity server, We have used the Keycloak service to manage the users. With SSO, you can log in to multiple applications with a single account. You can also use Keycloak to manage the users of your applications.

keycloak

Our Presentation

We have presented our project at the school-level finals and the city-level finals of the Code Your Future competition. We also presented our project at the final round of the Code Your Future competition.

Contributing

Wanna be here? Contribute.

  • Fork this repository.
  • Create your new branch with your feature: git checkout -b my-feature.
  • Commit your changes: git commit -am 'feat: My new feature'.
  • Push to the branch: git push origin my-feature.
  • Submit a pull request 👌.

Contributors

Thanks goes to these wonderful people (emoji key)


Xuan Nhan

💻 📖 🚇 🔧 🧑‍🏫


Hong Thai

💻 🚇 📆 🚧 👀


Truong Nhon

💻 🤔 🔣 💼


Tien Dat

💻 🎨 🖋 🚧


Thuc Van

💻 🎨 🖋 📢

Support and Organization

CJ CJ

License

This project is made available under the MIT license. See the LICENSE file for details

Project Reference