Apex Fitness
1 / 2Features
Shipped14
- Abonamente
- Admin Dashboard
- Analytics Admin
- Auth
- Badges & Achievements
- Cos
- Dark Mode
- Footer
- Galerie
- Home
- Locatie
- Navbar
- QR Acces
- Statistici Membri
In Progress4
- Antrenori
- Booking Sesiuni
- Locatii
- Profil
Database schema
Utilizator principal. role: MEMBER | TRAINER | ADMIN | HR_MANAGER. Hub central — toate entitățile au relație cu User.
Conturi OAuth legate la User (Google etc.). PK compus: [provider, providerAccountId].
Sesiuni NextAuth active. Token unic per sesiune de browser.
Token pentru verificare email. PK compus: [identifier, token].
Token de reset parolă generat la cerere. Un utilizator poate avea mai multe tokene active.
Categorii de abonament: fitness, zumba, aerobic, cycling. slug unic pentru URL.
Plan individual dintr-o categorie. planType: ENTRIES (nr intrări) | MONTHLY (lunar). Legat la OrderItem.
Cod promoțional aplicabil la checkout. Reducere fie procentuală, fie sumă fixă. Referit din Order.discountCode.
Comandă de cumpărare. status: PENDING | PAID | CANCELLED | EXPIRED. Conține unul sau mai multe OrderItem.
Linie din comandă. planName/categoryName salvate denormalizat pentru istoric. CheckIn-urile consumă intrările din acest item.
Intrare QR la sală. scannedById = staff care a scanat codul. Consumă o intrare din OrderItem.
Locație fizică a sălii. schedule = JSON cu orele de funcționare. amenities = dotări disponibile.
Profil antrenor. Poate fi legat la un cont User (userId unique). Aparține unei locații.
Recenzie lăsată de un membru pentru un antrenor. Unique pe (trainerId, userId) — un singur review per pereche.
Sesiune de clasă de grup programată. status: SCHEDULED | CANCELLED | COMPLETED. Membrii se înscriu prin ClassBooking.
Rezervare a unui User la o ClassSession. status: CONFIRMED | CANCELLED. Unique pe (sessionId, userId).
Cerere pentru ședință personală cu un antrenor. status: PENDING | ACCEPTED | REJECTED | CANCELLED.
Cont corporativ B2B. hrManagerId unique — un singur HR Manager per companie. status: ACTIVE | SUSPENDED | CANCELLED.
Angajat activ într-un CorporateAccount. Unique pe (corporateAccountId, userId). revokedAt setat la revocare.
Invitație trimisă pe email unui angajat. Acceptată la /corporate/invite/[token]. acceptedAt null = în așteptare.
Profil creat prin AI onboarding chat. Un profil per User. rawConversation = istoricul complet al conversației cu AI.
Rezultat quiz AI pentru recomandare abonament. userId opțional (și utilizatori neautentificați pot da quiz). convertedAt = cumpărat ulterior.
Log email de retenție trimis automat de AI. Unique pe (userId, triggerType, sentAt) pentru a preveni spam.
Badge/achievement deblocat de un utilizator. badgeId referă definițiile din codul aplicației (IBadgeDefinition). Unique pe (userId, badgeId).
Fotografie din galeria sălii. url = cale publică în /public/gallery/. Afișată în pagina /galerie cu modal intercepting route.