RFC: Explicit "donor" status/record for users who donate, to identify among /differentiate from contributors
Problem
We do not currently have a way to easily differentiate donors among all project/organization contributors. We can technically do so by inferring through subscriptions, but it's not straightforward.
The way this works has not been fully decided yet.
Is a donor status something that's "on" while a donation is active, or if a donation has ever been active? I'll assume the second choice, considering the option of 1-off donations in the future.
My suggested implementation would be
MVP
-
4 hours we add a
ProjectDonationrecord, associated toProjectandUser. - 2 hours when a donation occurs, this record is found or created for the user donating and the project being donated to
Optional
-
? hours not MVP the record could potentially hold additional information such as
total_recurring_amountandtotal_non_recurring_amount, which could be useful - 2 hours we can switch our total donations code to use the above record, once the extra fields are added
- 1 hour when a subscription get's cancelled (we are not handling this properly yet), we simply nullify the recurring donations field, instead of deleting the record
@JoshSmith This needs breaking apart, and it might be a good idea to break it off into a milestone to. Let me know what you think.
Hmm so part of what I was thinking here initially was a ProjectDonor record. I'm not sure if this matters too much in practice, but we should probably zoom back out and determine what this would do for us, what questions does it answer?
Here's an (incomplete) list of some things we can't do right now, but would be nice:
Everyone
- see a list all of the current donors to a project
Donors
- see a list of projects you're currently donating to
- see a list of projects you donated to in the past
- manage your donations (cancel, pause, restart, increase, decrease, rebalance, etc)
- see a list of all your past receipts
Projects
- message all of your current donors
A ProjectDonor could do all these things same as computing that status manually.
However, an explicit record would greatly reduce the pain for us internally, I think, so I would definitely go with that.
That being said, a ProjectDonor implies just a record indicating that someone at some point donated to a project.
A ProjectDonation stills belongs to a Project and a Donor (User) and offers the same options but implies it can hold more information. I find that name to be more descriptive of what we use it for. We can use it to potentially see
- a total of how much a user is donating to a project in a recurring form at the moment (by keeping it updated)
- a total of how much they've donated in a non-recurring form
- a total of recurring donations already donated, etc.
We can then aggregate over these records from a Project POV, across all "donors", as well as from a User POV across all projects.