160 likes | 241 Views
Let’s validate and list the capabilities needed in Extension Framework through an extension which provides feature to mark a product as user’s favorite.<br>
E N D
Let’s validate and list the capabilities needed in Extension Framework through an extension which provides feature to mark a product as user’s favorite.
Favorite Product Extension Requirements: Ability to mark and unmark a Product as favorite • a View probably showing all products with Ability to mark/unmark product as favorite • a controller action preparing the view • a route exposing the controller / view through Web • a controller action handling mark product as favorite • a route exposing the controller / view through Web
a controller action removing product from the list of favorites • a route exposing the controller / view through Web • a model interfacing with database to store product favorited by user • a migration to create join table in database • a join table storing product_id and user_id
Showing All Products favorited by a User • association in User to get favorite products • a View showing list of Favorite Products • a controller preparing the view • a route exposing the controller / view through Web
Showing Users who favorited a particular Product • association in Product to get users who favorited • a View showing list of Users who favorited • a controller preparing the view • a Route exposing the controller / view through Web • Ability to test the integration of above mentioned requirements
Let’s break the above requirements into two groups • Model layer changes • Request layer changes
Model Layer Changes Ability to mark and unmark a Product as favorite • a model interfacing with database to store product favorited by user • a migration to create join table in database • a join table storing product_id and user_id Showing All Products favorited by a User • association in User to get favorite products Showing Users who favorited a particular Product • association in Product to get users who favorited
translates to Ability to mark and unmark a Product as favorite • New Ecto Model with user_id and product_id fields • Ecto migration to create join table storing product_id and user_id Showing All Products favorited by a User • extending User schema to have associations as needed • support functions in User Model to retrieve all products favorited by a user Showing Users who favorited a particular Product • extending Product schema to have associations as needed • support functions in Product Model too retrieve all users who favorited a product
Request Layer Changes Ability to mark and unmark a Product as favorite • a View probably showing all products with ability to mark/unmark product as favorite • a controller action preparing the view • a route exposing the controller / view through Web • a controller action handling mark product as favorite • a route exposing the controller / view through Web • a controller action removing product from the list of favorites • a route exposing the controllerontroller / view through Web
Showing All Products favorited by a User • a View showing list of Products • a controller preparing the view • already route exposing the controller / view through Web Showing Users who favorited a particular Product • a View showing list of Users • a controller preparing the view • a route exposing the controller / view through Web
translates to Ability to mark and unmark a Product as favorite • a View probably showing all products with ability to mark/unmark product as favorite • a controller with index / create / delete action • a route exposingposing index / create / delete action
Showing All Products favorited by a User • a View showing list of Products • a controller preparing the viewew • a route exposing the controller / view through Web Showing Users who favorited a particular Product • a View showing list of Users • a controller preparing the view • a route exposing throughe controller / view through Web
way to extend schema definitions for existing models • way to add new functions in existing models • way to add routes • way to add controller / views for newly added routes • way to extend views • way to reuse layouts • way to reuse already available routes What we need
How we attempt to solve • Elixir Metaprogramming • Elixir umbrella app dependencies to share and reuse code among Nectar & Extensions using ExtensionManager • Extensions as Phoenix project leveraging NectarCommerce