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.
2. 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.
3. 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 /
4. ➢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
5. 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
6. 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
7. Let’s break the above
requirements into two groups
● Model layer changes
● Request layer changes
8. 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
9. 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
10. 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
Request Layer Changes
11. 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
12. 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
13. 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
14. Whatweneed
➔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
15. 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