I need to build an hierarchical tree which is dynamic and stored in one or more tables in Postgres SQL.
This hierarchical tree need to be built as :
• Works Centers
o Works Units
Each of these level can use some “Attributes” which are defined as user-types. These user-types can extend their own definition.
Each of these levels can be instantiated as new class. We don’t know the number of Areas, Work Centers, Works Units. Till example, an Area can have 1 Work Center only, and 100 Work-Units, when another Area can have 20 Works Centers , and 10 works-units each.
Each of these levels can have dynamic attributes. We can have a list of predefined attributes.
The attributes list can be from 10 to 100 attributes for each, and have their own definition. Each definition can be extended and when they are extended they must be reflected on the whole tree. Example a Work-Unit can use 100 different attributes, and some of them as (name, value) , and we can decide to adjust one attribute with some extended fields as (name, value, range-min, range-max) and one other attribute as (name, value, description).
The work-units can have “connection”. A connection should be defined between works-units.
Extremely fast performance required!
- 1 Project C# for Simulation for testing
- 1 Project C# for “Contract” that can be pushed as Nugets (not public)
- 1 Project C# to send data on the message queuing Rabbit MQ
o This project use the Contract
- 1 Project C# to receive data from the message queuing Rabbit MQ
o This project use the Contract
- 1 Database in Postgres SQL
- 1 Project API to request the Database with different functions for different levels of Requests (Enterprise, Area, Work Center, Work Units, Attributes, Name, Description, etc…)
Project C# for “Contract”
- Defines the contract JSON with dynamic visibility as “reflection” in C#.
o This mean that the schema Json is exposed as “intellisense” dynamically when the schema is read from the Database.
- We can have different levels access for the contract, example Contract for Area, Contract for Work Center, etc…
Project C# to “send Data” on Message Queue
- This project get the notification once a change appear in the database. It’s is dynamic, meaning we don’t read the database at frequent interval, but it’s the database that send a notification to this service.
- Example :
o [login to view URL]
Project C# to “Receive Data” from the Message Queue
- Read the Data once they are available from the queue, with different pattern (example, if we got 1 notification that only 1 work-unit has been changed, or 1 notification that 1 entire Area has been changed)
Project C# API for Request
- To be able to have many functions as we see how we can query the Postgres SQL Database
Project Simulation for Test
- Create several dataset based on for example on multiple-pattern (this can be multiple database):
o Performance for Small : a tree of (1 Area, 5 Work-Center, 10 Units, 500 Attributes each)
o Performance for Medium : (10 Areas, 5 Work-Center each, 30 Units each, 100 Attributes each)
o Performance for Big : (20 Areas, 10 Work-Center each, 100 Units each, 500 Attributes each)
- Generate simulated connection between Work-Units too
- Object Oriented Model with Instantiation and Inheritance.
- .NET Core 3.1 C#
- Message queuing with Rabbit MQ
- JSON Objects with Postgres SQL
- Postgres SQL
- Code Coverage
Unit-Tests , Integration Tests:
- Each project need a full coverage of the code with the tests done
- The projects must run separately without any “single solution” for all C# Project
- Each project must have their own Unit Test fulfill 100% tests
- Each Swagger development need to included clear comments and description usage of each functions
- Full Documentation must be provided