# project Falcon ## Flow - Happy path > We'll also need a query for fetching max number of patients for selected testStation ```plantuml actor "User/Frontend" as u boundary Backend as b @startuml == Authing user and adding patient data == u -> b: 1. <b>We need your phone number</b>\nuser submits phone number for OTP session note over u #99FF99 mutation { newOtpSession(phoneNumber: "${phone_number}", userAgnostic: <u><b>false</b></u>) { otpCode } } end note note over b backend creates or updates user... end note b->u: sends SMS u->b: 2. <b>Confirm SMS code</b>\nuser submits OTP code note over u #99FF99 mutation { signInUserOtp(phoneNumber: "+4791222121", code: "5987") { id firstName lastName patient { // you can fetch patient data associated to user id name email phoneNumber } } } end note b->u: backend returns <b>User</b> object (with optional Patient obj) u->b: 4. system checks if he has some appointments already note over u #FFAAAA <b>@TODO!</b> (multiple times, as many times as there are patients, albeit it can be squashed into 1 request) mutation { upcomingAppointments(patientId) { // (list of appointment data) } } end note == ...if there are no upcoming appointments... == u->b: 5. system fetches available slots note over u #99FF99 query { testAvailabilityCalendar( serviceCenterIds: [1], dateFrom: "2022-01-29", dateTo: "2022-01-31", requiredCapacity: 5, hourFrom: "09:00", hourTo: "12:00") { serviceCenter { id name title street zip city googlePlaceId lat lng } availability } } end note b->u: backend returns availability data note over u <b>Select a time for testing at XYZ center</b> user chooses some available slot end note u->b: 3. <b>Tell us who you are</b>\nuser checks and updates his info note over u #FFAAAA <b>by now we DO have access to already existing user</b> mutation { updateUser(userAttributes...) { id } } <b>it should, in fact update User as well as User's patient object</b> end note u->b: 4. <b>Other patients</b>\nuser adds his co-patients note over u #FFAAAA <b>@TODO!</b> (multiple times) these will be patients dependant on user's patients mutation { createPatients(patientAttributes[]...) { id } } we must allow duplicated record end note u->b: 6.user creates a TestAppointment note over u <b>@TODO: needs modifications to accept patientIds<b/> mutation { createAppointment( productSlug: "loc-tst-c19-pu", serviceCenterId: 1, date: "2022-01-26", hour: "12:00", patientIds: [3331,3332,3333,3334], ) { id date hour } } end note b->u: response with TestAppointments objects u->u: final success screen @enduml ```