12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package commonbilling
- import (
- "context"
- "fmt"
- "github.com/ente-io/museum/pkg/repo"
- "github.com/ente-io/museum/pkg/repo/storagebonus"
- "github.com/ente-io/stacktrace"
- )
- type Controller struct {
- StorageBonusRepo *storagebonus.Repository
- UserRepo *repo.UserRepository
- UsageRepo *repo.UsageRepository
- }
- func NewController(
- storageBonusRepo *storagebonus.Repository,
- userRepo *repo.UserRepository,
- usageRepo *repo.UsageRepository,
- ) *Controller {
- return &Controller{
- StorageBonusRepo: storageBonusRepo,
- UserRepo: userRepo,
- UsageRepo: usageRepo,
- }
- }
- func (c *Controller) CanDowngradeToGivenStorage(newStorage int64, userID int64) (bool, error) {
- adminID, err := c.UserRepo.GetFamilyAdminID(userID)
- if err != nil {
- return false, stacktrace.Propagate(err, "")
- }
- if adminID == nil {
- bonusStorage, bonErr := c.StorageBonusRepo.GetPaidAddonSurplusStorage(context.Background(), userID)
- if bonErr != nil {
- return false, stacktrace.Propagate(err, "")
- }
- usage, err := c.UsageRepo.GetUsage(userID)
- if err != nil {
- return false, stacktrace.Propagate(err, "")
- }
- if usage > (newStorage + *bonusStorage) {
- return false, stacktrace.Propagate(err, fmt.Sprintf("user with %d usage can not downgrade to %d", usage, newStorage))
- }
- } else {
- bonusStorage, bonErr := c.StorageBonusRepo.GetPaidAddonSurplusStorage(context.Background(), *adminID)
- if bonErr != nil {
- return false, stacktrace.Propagate(err, "")
- }
- usage, err := c.UsageRepo.StorageForFamilyAdmin(*adminID)
- if err != nil {
- return false, stacktrace.Propagate(err, "")
- }
- if usage > (newStorage + *bonusStorage) {
- return false, stacktrace.Propagate(err, fmt.Sprintf("familyUser with %d usage can not downgrade to %d", usage, newStorage))
- }
- }
- return true, nil
- }
|