mirror of
https://github.com/standardnotes/server
synced 2026-08-02 12:15:56 -04:00
52 lines
2.2 KiB
TypeScript
52 lines
2.2 KiB
TypeScript
import { Uuid } from '@standardnotes/common'
|
|
import { PredicateName, PredicateVerificationResult } from '@standardnotes/predicates'
|
|
import { EmailBackupFrequency, SettingName } from '@standardnotes/settings'
|
|
import { inject, injectable } from 'inversify'
|
|
|
|
import TYPES from '../../../Bootstrap/Types'
|
|
import { SettingRepositoryInterface } from '../../Setting/SettingRepositoryInterface'
|
|
import { UserSubscriptionRepositoryInterface } from '../../Subscription/UserSubscriptionRepositoryInterface'
|
|
import { UseCaseInterface } from '../UseCaseInterface'
|
|
|
|
import { VerifyPredicateDTO } from './VerifyPredicateDTO'
|
|
import { VerifyPredicateResponse } from './VerifyPredicateResponse'
|
|
|
|
@injectable()
|
|
export class VerifyPredicate implements UseCaseInterface {
|
|
constructor(
|
|
@inject(TYPES.SettingRepository) private settingRepository: SettingRepositoryInterface,
|
|
@inject(TYPES.UserSubscriptionRepository) private userSubscriptionRepository: UserSubscriptionRepositoryInterface,
|
|
) {}
|
|
|
|
async execute(dto: VerifyPredicateDTO): Promise<VerifyPredicateResponse> {
|
|
switch (dto.predicate.name) {
|
|
case PredicateName.EmailBackupsEnabled:
|
|
return (await this.hasUserEnabledEmailBackups(dto.userUuid))
|
|
? { predicateVerificationResult: PredicateVerificationResult.Affirmed }
|
|
: { predicateVerificationResult: PredicateVerificationResult.Denied }
|
|
case PredicateName.SubscriptionPurchased:
|
|
return (await this.hasUserBoughtASubscription(dto.userUuid))
|
|
? { predicateVerificationResult: PredicateVerificationResult.Affirmed }
|
|
: { predicateVerificationResult: PredicateVerificationResult.Denied }
|
|
default:
|
|
throw new Error(`Predicate not supported: ${dto.predicate.name}`)
|
|
}
|
|
}
|
|
|
|
private async hasUserBoughtASubscription(userUuid: Uuid): Promise<boolean> {
|
|
const subscription = await this.userSubscriptionRepository.findOneByUserUuid(userUuid)
|
|
|
|
return subscription !== null
|
|
}
|
|
|
|
private async hasUserEnabledEmailBackups(userUuid: Uuid): Promise<boolean> {
|
|
const setting = await this.settingRepository.findOneByNameAndUserUuid(SettingName.EmailBackupFrequency, userUuid)
|
|
|
|
if (setting === null || setting.value === EmailBackupFrequency.Disabled) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
}
|