This is a demo of web-store's backend divided on independent modules. The design of application supposes to follow the SOLID principles regarding on common Laravel practises.
The application's API should implement these methods:
- return the list of products
- return the list of currencies
- update the currency sign($) by id
The application should perform in the background these actions:
- sync currencies with third-party API
- sync products with third-party API
- notify web store administrator about new products and currencies added while sync
- Application should be divided into Modules
- Modules must be completely decoupled, each Module should not know anything about other ones
- all interactions between Modules must be performed via App Contracts (Contracts placed on App level)
- App DTO classes (DTO placed on app level) must be used to transfer data between Modules
- App Contracts could know only about other App Contracts and App DTO classes
- App DTO classes could know only about the other App DTO Classes
- none of the Module related parts should be placed in the App level
- each Module must have one Main Service Provider extending Illuminate\Support\ServiceProvider
- Module's Main Service Provider could include the other Module's Service Providers
- Database Driver (Eloquent by default) should be replaceable
Encapsulates all work with the database. Implemented one provider (Eloquent) which could be replaced by another one
Implement CRUD functionality (create, read, update, all methods)
Implement search functionality
Implements api/Store Endpoint and sync products with third-party API
Implements api/MultiCurrencies Endpoint and sync currencies with third-party API
One place to send different notifications to store administrator