feat: Implement subscription management and article saving features

- Added subscriptionPlan and subscriptionExpiresAt fields to UserProfile model.
- Enhanced profile routes to handle subscription state updates and expiration logic.
- Introduced email and password validation during user registration.
- Implemented link stripping for processed articles in the articles route.
- Added save article functionality with appropriate UI feedback in the frontend.
- Updated AccountSettings and FeedContent components to reflect subscription state and saved articles.
- Improved error handling and local storage management for user preferences.
This commit is contained in:
Nicolo-Salvafiorita
2026-05-07 11:56:14 +02:00
parent 249db76341
commit 54ae86a88a
18 changed files with 548 additions and 63 deletions
@@ -4,13 +4,15 @@ type AccountSettingsProps = {
username: string
email: string
subscriptionState: SubscriptionState
subscriptionExpiresAt?: string | null
onUpgrade: () => void
onCancelSubscription: () => void
}
// Sezione account: mostra profilo e gestisce in modo condizionale il piano attivo.
function AccountSettings({username, email, subscriptionState, onUpgrade, onCancelSubscription}: AccountSettingsProps) {
function AccountSettings({username, email, subscriptionState, subscriptionExpiresAt, onUpgrade, onCancelSubscription}: AccountSettingsProps) {
const isProPlan = subscriptionState === 'pro'
const expires = subscriptionExpiresAt ? new Date(subscriptionExpiresAt) : null
return (
<section className="settings-stack" aria-label="Profilo">
@@ -48,7 +50,7 @@ function AccountSettings({username, email, subscriptionState, onUpgrade, onCance
{isProPlan ? 'Piano Pro' : 'Piano Gratuito'}
</span>
{isProPlan ? (
<p>Scade il 12/12/2026</p>
<p>{expires ? `Scade il ${expires.toLocaleDateString()}` : 'Piano Pro attivo'}</p>
) : (
<p>Passa al Pro per sbloccare monitoraggio e analisi avanzate.</p>
)}