class FeatureAccessManager {
constructor(userProfile) {
this.profile = userProfile;
}
canCreateAppointments() {
// Requires active subscription and verified email
return this.profile.isVerified &&
this.profile.subscriptionActive &&
new Date(this.profile.subscriptionExpiry) > new Date();
}
canUseAIFeatures() {
// Premium AI features require active subscription
return this.canCreateAppointments();
}
canUploadRecordings() {
// Basic recording upload requires verification
return this.profile.isVerified;
}
getUploadLimits() {
if (!this.profile.subscriptionActive) {
return {
maxFileSize: '50MB',
maxFiles: 5,
allowedFormats: ['wav', 'mp3']
};
}
return {
maxFileSize: '500MB',
maxFiles: 100,
allowedFormats: ['wav', 'mp3', 'm4a']
};
}
getFeatureFlags() {
return {
appointments: this.canCreateAppointments(),
aiNotes: this.canUseAIFeatures(),
recordings: this.canUploadRecordings(),
realTimeTranscription: this.canUseAIFeatures(),
doctorLetters: this.canUseAIFeatures(),
analytics: this.profile.subscriptionActive
};
}
}
// Usage with profile
const userProfile = new UserProfile('token', 'user_id');
await userProfile.fetchProfile();
const accessManager = new FeatureAccessManager(userProfile.profile);
const features = accessManager.getFeatureFlags();
console.log('Available features:', features);
if (!features.appointments) {
console.log('Upgrade subscription to create appointments');
}
if (!features.aiNotes) {
console.log('AI features require active subscription');
}