---
# System prepended metadata

title: User Stories

---

Reservation:
- uuid
- deposit_price
- price
- start_date
- status // 'pending' | 'active' | 'canceled'
- end_date
- room_uuid
- created_at
- updated_at
- deleted_at


Payment:
- uuid
- payment_intent_id (Id of Stripe's PaymentIntent)
- status
- reservation_uuid
- customer_uuid
- created_at
- updated_at
- deleted_at

Customer
- uuid
- first_name
- last_name
- email
- phone
- created_at
- updated_at
- deleted_at


Link utili:
- https://stripe.com/docs/payments/capture-later#authorize-only
- https://stripe.com/docs/stripe-js/react
- https://medium.com/javascript-in-plain-english/stripe-payment-form-with-reactjs-and-material-ui-part-4-118e60fca962


# User Stories

## Customer


## Backoffice



# Scenari [TBD]

#### Scenario 1: il client non riesce a contattare l'endpoint `POST /rooms/:roomId/payment-intents`

GIVEN L'utente ha acceduto la pagina della stanza AND il componente per il 
pagament viene renderrizzato nel modo corretto
WHEN La chiamata per la creazione del payment intent fallisce per problemi di comunicazione tra backend e frontend
THEN Il client frontend visualizza un messaggio di errore **AND** 
    non permette all'utente di pagare

#### Scenario 2: il client riesce a contattare l'endpoint `POST /rooms/:roomId/payment-intent`, ma il servizio backend non riesce a rispondere

GIVEN 
WHEN
THEN

#### Scenario 3: il client fallisce la finalizzazione del Payment Intent

GIVEN Il form di pagamento è correttamente inizializzato AND il client ha accesso al Payment Intent AND l'utente clicca sul bottone paga
WHEN Il client non riesce a contattare Stripe
THEN il client mostra un messaggio di errore AND il client permette nuovamente all'utente di finalizzare il Payment Intent

#### Scenario 4: il client finalizza il Payment Intent, ma non riesce a contattare il servizio di backend

GIVEN La finalizzazione del Payment Intent è avvenuta AND il client cerca di contattare il servizio di backend
WHEN la comunicazione con il servizio di backend fallisce
THEN 

R                            V
r -----+++++++++++++--------
p --=====------------------- t
p ---==================----- t
p -------=========---------- t
p ---------------======----- t
p ===----------------------- f
p --------------------====== f
  

(r.end >= p.start AND r.start <= p.end )