Redeemify: let users redeem "bundles" of offers
How it works:
A user receives a "redemption code" (AKA "Redeemify Code" like a gift card code), perhaps because they paid for it, or perhaps as a result of buying something.
User creates an account on Redeemify by presenting that redemption code and then "linking" it to whatever SSO they login with (Google, GitHub, Facebook, etc.) (Without a redemption code, a user can't create an account.)
That redemption code "unlocks" a list of additional redemption codes from different vendors, to be redeemed at their respective sites.
Terminology and model names
For this discussion, we'll use the following specific use case:
User buys a copy of "Engineering Software as a Service" on Amazon
User receives a redemption code via separate email from Amazon after purchase
User signs up on Redeemify with that code and their Facebook credentials.
Once in their account, user sees promo codes for GitHub (1 month of free Micro), CodeClimate (1 seat for 1 month), and TravisCI (Premium account for 1 month).
The user logs in or signs up on GitHub, CodeClimate, and Travis, and redeems the respective codes.
In this scenario:
Useris someone who has an account on Redeemify. An
AdminUser(different model) is a user who can administer the site.
Amazon.com is the
Provider: the entity that provides a redemption code that will allow the user to sign up here. A Provider provides a list of valid redemption codes. The idea is one code is handed out with each purchase, and that code enables a
Userto login to Redeemify with their choice of 3rd party auth. Once a particular code has been associated with an identity on Redeemify, it can't be associated with another identity, i.e. a
RedeemifyCodecan only be redeemed once.
GitHub, CodeClimate, etc. are each a
Vendor: an entity that provides some promotion that is part of a redemption bundle. The promotion is represented by a
VendorCode. For example, a GitHub
VendorCodemight be a string that can be redeemed as a promo code on GitHub for a month of free Micro account.