Skip to content

Latest commit

 

History

History
123 lines (92 loc) · 7.72 KB

File metadata and controls

123 lines (92 loc) · 7.72 KB

Database - MariaDB

Panoramica

CineBase utilizza MariaDB 10.11 come database relazionale. L'accesso ai dati è mediato da Entity Framework Core con il provider Pomelo.EntityFrameworkCore.MySql. Il database contiene 27 tabelle organizzate in domini funzionali.

Connessione

La stringa di connessione è costruita dinamicamente da variabili d'ambiente:

Server={DB_HOST};Port={DB_PORT};Database={DB_NAME};User Id={DB_USER};Password={DB_PASSWORD};

Il server version può essere auto-rilevato (DB_USE_AUTODETECT=true) o specificato esplicitamente (DB_SERVER_VERSION=10.11.0-mariadb). In ambiente Docker si usa il valore esplicito per evitare latenza di auto-detection.

Tabelle

Catalogo

Tabella Descrizione Colonne principali
Registi Registi dei film Id, Nome, Cognome, DataNascita, Biografia, FotografiaUrl, CreatedAtUtc
Films Film in catalogo Id, Titolo, Descrizione, Durata, Anno, RegistaId (FK), CoverImagePath, TmdbId (unique), Stato (InCartellone/InArrivo/FuoriCatalogo), DataRilascio, RecentiGiorni
Categorie Generi cinematografici Id, Nome (unique)
FilmCategorie Many-to-many film/genere FilmId (FK), CategoriaId (FK) — composite PK

Sale e posti

Tabella Descrizione Colonne principali
Cinemas Cinema/sale cinematografiche Id, Nome, Indirizzo, Citta, Cap, Latitudine, Longitudine
Sale Sale interne ai cinema Id, CinemaId (FK), NumeroProgressivo (unique per cinema), Nome, Capienza, IsAttiva
SalaPosti Posti a sedere Id, SalaId (FK), Settore (Platea/Galleria/Vip), Fila, Numero, IsWheelchair, SeatCategory (Platea/Galleria/Vip/Access)

Programmazione

Tabella Descrizione Colonne principali
Shows Spettacoli programmati Id, FilmId (FK), CinemaId (FK), SalaId (FK), StartAtUtc, PrezzoBase, IsPublished, PublishAtUtc, PurchaseLockMinutes
ShowSeatPrices Prezzi per categoria di posto per show ShowId (FK), SeatCategory, Prezzo — unique su (ShowId, SeatCategory)
ShowPostiStato Stato dei posti per ogni show ShowId (FK), SalaPostoId (FK), Stato (Available/Held/Sold), UserId (FK), OrdineId (FK), HoldToken, ScadeAtUtc

Ordini e biglietti

Tabella Descrizione Colonne principali
Ordini Ordini di acquisto Id, CodiceOrdine (unique), IdempotencyKey (unique), UserId (FK), ShowId (FK), CinemaId (FK), SalaId (FK), FilmId (FK), Stato (Pending/Paid/Cancelled/...), MetodoPagamento, Totale, StripeSessionId, StripePaymentIntentId, HoldToken, ScadeAtUtc
Biglietti Biglietti emessi Id, CodiceBiglietto (unique), OrdineId (FK), ShowId (FK), SalaPostoId (FK), UserId (FK), QrCodeData, Validato (bool), ValidatoAtUtc, ValidatoDaUserId (FK), ValidatoCinemaId (FK)
OrdineRefunds Rimborsi per ordine Id, OrdineId (FK, unique), ShowCancellationId (FK), UserId (FK), TotaleRimborsato, StripeRefundId, CreditRefundMovementId (FK), Status
ShowCancellations Annullamenti show Id, ShowId (FK, unique), CancelledByUserId (FK), Motivazione, CancelledAtUtc
ManualRefundReviews Revisioni manuali rimborsi Id, ShowCancellationId (FK), OrdineId (FK), UserId (FK), Status, ReasonCode

Utenti e autenticazione

Tabella Descrizione Colonne principali
Users Utenti della piattaforma Id, Email (unique), NormalizedEmail (unique), PasswordHash, Nome, Cognome, Telefono, Ruolo (User/PowerUser/Admin/CinemaStaff), LocalCredentialsEnabled, EmailVerifiedAtUtc, AuthVersion, IsDisabled, AnonymizedAtUtc, LastLoginAtUtc, LastLoginProvider, PrivacyPolicyVersion, PrivacyPolicyAcceptedAtUtc, TermsAcceptedVersion, TermsAcceptedAtUtc, CinemaPreferitoId (FK), MustChangePassword, PasswordChangedAtUtc, DataRegistrazione
RefreshTokens Refresh token per JWT Id, Token (unique, SHA256 hash), UserId (FK), DeviceId, ExpiresAt, CreatedAt, RevokedAt
UserExternalLogins Login con provider esterni Id, UserId (FK), Provider, ProviderUserId, ProviderTenantId, EmailAtLogin, LinkedAtUtc, LastLoginAtUtc, RevokedAtUtc
UserCinemaAssignments Assegnazioni staff-cinema Id, UserId (FK), CinemaId (FK), IsActive, CreatedByUserId (FK), RevokedByUserId (FK)

Flussi di autenticazione

Tabella Descrizione Colonne principali
AccountActionTokens Token monouso per azioni account Id, TokenHash (unique), UserId (FK), Purpose (EmailVerification/PasswordReset/SetPassword/AdminInvite/DeleteAccount), ExpiresAtUtc, ConsumedAtUtc, CreatedByUserId (FK)
ExternalAuthStates Stato OAuth (PKCE) Id, StateHash (unique), Provider, CodeVerifier, Nonce, RedirectPath, ExpiresAtUtc, ConsumedAtUtc, RequestIp, UserAgent
ExternalAuthExchangeCodes Codice di scambio temporaneo Id, CodeHash (unique), UserId (FK), RedirectPath, ExpiresAtUtc, ConsumedAtUtc, Provider

Finanza

Tabella Descrizione Colonne principali
MovimentiCredito Movimenti di credito utente Id, UserId (FK), Tipo (Ricarica/Acquisto/Rimborso), Importo, SaldoDopo, Descrizione, OperatoreUserId (FK), CinemaId (FK), OrdineId (FK), CreatedAtUtc

Sicurezza e configurazione

Tabella Descrizione Colonne principali
UserSecurityAuditLogs Audit trail sicurezza Id, UserId (FK), ActorUserId (FK), EventType, Provider, IpAddress, UserAgent, MetadataJson, CreatedAtUtc
PlatformSettings Configurazione globale Id, Key (unique), Value, UpdatedAtUtc, UpdatedByUserId

Indici principali

  • Users: unique su Email, NormalizedEmail
  • Shows: unique su (CinemaId, SalaId, StartAtUtc)
  • SalaPosto: unique su (SalaId, Settore, Fila, Numero)
  • Ordine: unique su CodiceOrdine, IdempotencyKey
  • Biglietto: unique su (ShowId, SalaPostoId), CodiceBiglietto
  • ShowPostoStato: unique su (ShowId, SalaPostoId), indici su HoldToken, ScadeAtUtc
  • RefreshToken: composite su (UserId, DeviceId)
  • ExternalAuthState: unique su StateHash
  • ExternalAuthExchangeCode: unique su CodeHash

Relazioni principali

Regista ──1:N──► Film ──1:N──► FilmCategoria ◄──N:1── Categoria
Film ──1:N──► Show ◄──N:1── Cinema
Cinema ──1:N──► Sala ──1:N──► SalaPosto
Show ──1:N──► ShowPostoStato ◄──N:1── SalaPosto
Show ──1:N──► ShowSeatPrice
Show ──1:N──► Ordine ──1:N──► Biglietto
User ──1:N──► Ordine
User ──1:N──► Biglietto
User ──1:N──► RefreshToken
User ──1:N──► UserExternalLogin
User ──1:N──► MovimentoCredito
Show ──1:0,1──► ShowCancellation ──1:N──► OrdineRefund

Migrazioni EF Core

Il progetto contiene 18 migrazioni in backend/FilmAPI/Migrations/. La migrazione iniziale InitialCreate risale al 2026-03-12. Le migrazioni più recenti includono:

  • AddShowPublicationFields (2026-06-02): campi IsPublished/PublishAtUtc per show
  • AddShowPurchaseLockMinutes (2026-06-02): blocco acquisto show passati
  • AddFilmStatusAndTmdbId (2026-05-23): stato film (InArrivo/InCartellone/FuoriCatalogo) e TMDB ID
  • AddSeatCategoryAndShowSeatPrices (2026-05-20): prezzi per categoria posto
  • AddShowCancellationAndRefunds (2026-05-10): annullamento show e rimborsi

Il database viene migrato automaticamente all'avvio dell'applicazione tramite DatabaseBootstrap.BootstrapAsync().