MIT License
$ git clone https://github.com/ulises-jeremias/acme-bros-pictures
$ cd acme-bros-pictures
$ cd server
$ echo "DB_PASS=postgres\nDB_HOST=db" > .env
$ docker-compose -f docker-compose.yml up --build
Once the server is running, the available endpoints can be known at localhost:3000/swagger.
En the following file you can find a complete guide about how to start the api and related scripts.
$ cd client
$ export API_BASE_URL=http://localhost:3000/api/v1/
$ yarn docker:dev # or yarn docker:build && yarn docker:start
Then the app will be running at localhost:8091
In the following file you can find a complete guide about how to start the client app and related scripts.
The data model used for the implementation of ACME BROS Pictures App can be seen in the following diagram,
It shows a summary of what the "complete" model could be, which would be defined taking into account different aspects of the domain and business, such as the presence of roles for the different users, permissions for resources access, dynamic definition of execution status of a given workflow task, etc.
The full API specification can be found in the following file.
Generated with swagger-markdown.
Based on the suggested technologies and the proposed data model, the following stack of technologies is chosen.
Project layout generated by using react-redux-webpack-starter.
Proposal
To give immediate visibility on the changes in the status of the workflow, the use of FCM is proposed.
Firebase Cloud Messaging (FCM) offers a broad range of messaging options and capabilities.
FMC offers two types of messages: notification messages and data messages. With them you can notify the change of the status of the workflow or even send the corresponding client the information that allows you to determine which tasks of the workflow to update to keep the data always updated.
For this, the current data model presents in the relationship between projects and users the attribute "watching" that allows determining the degree of interest of a user regarding the changes of state in the workflows for each project.