Software as a Service (SaaS) = leasing = access to software with an end date.
Client is charged
to postpone the end date
.
From this perspective, a "One-time payment" = subscription with lifetime access.
Minimalistic Database representation:
Example: Spotify subscription
In this case a user can buy a premium
subscription for $12,11
for a limited time 1 month
to remove adds
.
Here's how it will work:
# user.rb
# email :string
# ends_at :datetime
def premium_price
# how much to charge for postponing ends_at
# always keep money in integer. last 2 digits are cents
1299.to_i
end
def premium_interval
# by how long to postpone the ends_at
# monthly or yearly or forever
1.month
end
def active_subscription?
ends_at > Time.now
end
def show_annoying_adds?
# business logic
unless active_subscription?
end
# charge.rb
# user_id :integer
# amount :integer # to track how much was paid at this moment of time
belongs_to :user
# charges_controller.rb
def create
@charge.amount = current_user.premium_price
# PAYMENT PROVIDER LOGIC GOES HERE
if @charge.save
current_user.update(ends_at: Time.now + current_user.premium_interval)
end
end
This way whenever a user makes a payment and creates a charge
,
his subscription ends_at
is set to a later date based on premium_interval
.
Of course, in this simple example charges
are not automatic and the user has to explicitly create
a charge
.
That's it! ðŸ¤
Liked this article? Please follow me! It will really motivate me to post more fun stuff!
Top comments (0)