Solution
The developed solution aims to provide an intuitive platform capable of meeting the requirements for flexibility in data management, interactivity in data visualization, and easy export of results into a wide range of formats.
The project is a web application developed using C# (ASP.NET Core) for the back-end and Angular for the front-end. Solutions
Dynamic Report Generation
The developed solution provides complete flexibility in generating dynamic reports. Users can import data from external sources (APIs) or local sources and create customized reports.
Each column in the report is fully configurable—users can set custom names, styles, and apply complex calculation formulas that integrate data from different sources.
Example formula: Users can combine data from Excel files with external data using formulas like =SUM([0] + {1}), where [0] represents the first column of external data, and {1} represents the second column of the exported Excel file.
Dynamic Chart Creation & Configuration
Users can create dynamic charts based on the generated reports. Every element of a chart—from the X and Y axes to labels and colors—can be individually configured.
For advanced customization, users have the option to create and arrange groups of charts on the page using custom HTML code, thereby adapting the layout to their specific needs.
Interactive Charts
In addition to being fully customizable, the charts are also interactive. Users can click on specific datasets within the chart to access additional information related to the displayed data. This functionality allows for more detailed and dynamic data exploration, contributing to a more interactive and informative experience.
Real-time Data Communication with NATS
To ensure a smooth and interactive experience, the application uses NATS, a scalable messaging system, to transmit data in real-time between the server and the front end. Users benefit from automatic updates to reports and charts without needing to refresh the page manually.
Example: In Angular, the application connects to data streams using the nats.ws package, which allows for the automatic reloading of visual components when changes occur.
Elasticsearch for Efficient Data Search
To handle large volumes of data and enable fast queries, we integrated Elasticsearch. This solution allows efficient searches and rapid analysis of recorded data, especially in the context of log management and auditing.
Scheduled Tasks with Quartz.NET
To manage and automate the periodic calculation of complex reports and the generation of temporary tables (cache), we used Quartz.NET. This framework allows scheduling and execution of recurring tasks, such as the automatic generation and caching of reports, optimizing the application's overall performance.
Simplified Request Management with MediatR
By using MediatR, we simplified request and response management within the application, applying the principle of decoupling between components. This solution reduced code complexity and facilitated the integration of the CQRS (Command Query Responsibility Segregation) model.
Excel Integration with EPPlus
To allow users to export generated reports and charts into a usable and easily shareable format, we integrated the EPPlus library. This provides the ability to generate Excel files that include both the source data and the visualized charts.
Database Interaction with Entity Framework Core
The application uses Entity Framework Core for managing database interactions, enabling simplified mapping of C# classes to database tables. This eliminates the need for manual SQL code writing and ensures automatic migration of changes to the database structure. PostgreSQL
The application uses PostgreSQL as its relational database management system. PostgreSQL is an open-source software known for its reliability, scalability, and performance. Main Advantages:
- Performance and Scalability: PostgreSQL efficiently handles large volumes of data and performs excellently in large production environments.
- Extensibility: It supports advanced extensions and data types such as JSON, making it ideal for modern and flexible applications.
Concourse (CI/CD)
Concourse CI is used to automate Continuous Integration and Continuous Deployment
(CI/CD) processes.
With every code change on GitLab, Docker images are automatically created. Before each deployment process, a backup of the database is automatically made, and SQL scripts for database migration are executed automatically.
The automated workflow operates as follows: - Automatic Database Backup: A script is executed that saves the current database
to an external server.
- Running SQL Scripts: After the backup, the necessary SQL scripts for updates or migrations are automatically run.
- Automatic Application Deployment: Once the database is updated, the application is automatically built and deployed.