package Ġcom . him an shu . new sp oint . feature . auth . ui . register Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . vin ners . new sp oint . core . Single Live Event Ċ import Ġcom . vin ners . new sp oint . core . task State . L ce Ċ import Ġcom . vin ners . new sp oint . core . task State . L se Ċ import Ġcom . vin ners . new sp oint . data . models . auth . Register Request Ċ import Ġcom . vin ners . new sp oint . data . models . state And City . City Ċ import Ġcom . vin ners . new sp oint . data . models . state And City . Pin code Ċ import Ġcom . vin ners . new sp oint . data . models . state And City . State Ċ import Ġcom . vin ners . new sp oint . data . models . state And City . Work Category Ċ import Ġcom . vin ners . new sp oint . data . repository . Auth Repository Ċ import Ġcom . vin ners . new sp oint . data . session Management . User Session Manager Ċ import Ġcom . vin ners . new sp oint . feature . auth . ui . Auth ViewModel Ċ import Ġcom . vin ners . new sp oint . feature . auth . ui . register . valid ations . Register Validation Ċ import Ġcom . vin ners . new sp oint . feature . auth . ui . register . valid ations . Register ValidationException Ċ import Ġcom . vin ners . new sp oint . feature . auth . ui . register . valid ations . Register Validation Result Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ sealed Ġclass ĠValidate State Ġ{ ĊĠĠĠ Ġdata Ġclass ĠValidate Failed ( val Ġresult : ĠRegister Validation Result ) Ġ: ĠValidate State () ĊĊĠĠĠ Ġobject ĠSuccess Ġ: ĠValidate State () Ċ } Ċ Ċ interface ĠRegistration Events Ġ{ ĊĠĠĠ Ġval Ġregister State : ĠLive Data < L se > ĊĊĠĠĠ Ġval Ġstate : ĠLive Data < L ce < List < State >>> ĊĊĠĠĠ Ġval Ġcity : ĠLive Data < L ce < List < City >>> ĊĊĠĠĠ Ġval Ġpin code : ĠLive Data < L ce < List < Pin code >>> ĊĊĠĠĠ Ġval Ġwork Category : ĠLive Data < L ce < List < Work Category >>> ĊĊĠĠĠ Ġval Ġindividual Basic Validate : ĠLive Data < Validate State > ĊĊĠĠĠ Ġval Ġagency Basics Validate : ĠLive Data < Validate State > Ċ } Ċ Ċ class ĠRegister ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġauth Repository : ĠAuth Repository , ĊĠĠĠ Ġprivate Ġval Ġuser Session Manager : ĠUser Session Manager Ċ ) Ġ: ĠAuth ViewModel ( user Session Manager ), ĠRegistration Events Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval Ġ_ register State Ġ= ĠSingle Live Event < L se >() ĊĠĠĠ Ġoverride Ġval Ġregister State : ĠLive Data < L se > Ġ= Ġ_ register State ĊĊĠĠĠ Ġprivate Ġval Ġ_ state Ġ= ĠSingle Live Event < L ce < List < State >> >() ĊĠĠĠ Ġoverride Ġval Ġstate : ĠLive Data < L ce < List < State >>> Ġ= Ġ_ state ĊĊĠĠĠ Ġprivate Ġval Ġ_ city Ġ= ĠSingle Live Event < L ce < List < City >> >() ĊĠĠĠ Ġoverride Ġval Ġcity : ĠLive Data < L ce < List < City >>> Ġ= Ġ_ city ĊĊĠĠĠ Ġprivate Ġval Ġ_ pin code Ġ= ĠSingle Live Event < L ce < List < Pin code >> >() ĊĠĠĠ Ġoverride Ġval Ġpin code : ĠLive Data < L ce < List < Pin code >>> Ġ= Ġ_ pin code ĊĊĠĠĠ Ġprivate Ġval Ġ_ work Category Ġ= ĠSingle Live Event < L ce < List < Work Category >> >() ĊĠĠĠ Ġoverride Ġval Ġwork Category : ĠLive Data < L ce < List < Work Category >>> Ġ= Ġ_ work Category ĊĊĊĠĠĠ Ġfun Ġregister ( register Request : ĠRegister Request ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ register State . value Ġ= ĠL se . Loading ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Repository . register ( register Request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ register State . post Value ( L se . success ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ register State . post Value ( L se . Error ( e . localized Message )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetState () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ state . value Ġ= ĠL ce . Loading ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġauth Repository . getState () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ state . post Value ( L ce . Content ( response )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ state . post Value ( L ce . Error ( e . localized Message )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget City ( state Id : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ city . value Ġ= ĠL ce . Loading ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġauth Repository . get City ( state Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ city . post Value ( L ce . Content ( response )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ city . post Value ( L ce . Error ( e . localized Message )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Pin code ( district Id : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ pin code . value Ġ= ĠL ce . Loading ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġauth Repository . get Pin code ( district Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ pin code . post Value ( L ce . Content ( response )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ pin code . post Value ( L ce . Error ( e . localized Message )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Work Category () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ work Category . value Ġ= ĠL ce . loading () ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġauth Repository . get Work Category () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ work Category . post Value ( L ce . Content ( response )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ work Category . post Value ( L ce . Error ( e . localized Message )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Individual ĠBas ics Ġvalidation Ġfields ĊĊĠĠĠ Ġprivate Ġval Ġ_ individual Basics Validate Ġ= ĠSingle Live Event < Validate State >() ĊĠĠĠ Ġoverride Ġval Ġindividual Basic Validate : ĠLive Data < Validate State > Ġ= Ġ_ individual Basics Validate ĊĊĠĠĠ Ġfun Ġvalidate Ind vid ual Basics ( firstName : ĠString , email : ĠString , date OfBirth : ĠDate ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRegister Validation . validate Individual basics ( firstName , email , date OfBirth ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ individual Basics Validate . post Value ( Validate State . Success ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRegister ValidationException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ individual Basics Validate . post Value ( Validate State . Validate Failed ( e . result )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ag ency ĠBas ics ĠValidation ĠFields ĊĊĠĠĠ Ġprivate Ġval Ġ_ agency Basics Validate Ġ= ĠSingle Live Event < Validate State >() ĊĠĠĠ Ġoverride Ġval Ġagency Basics Validate : ĠLive Data < Validate State > Ġ= Ġ_ agency Basics Validate ĊĊĠĠĠ Ġfun Ġvalidate Ag ency Basics ( agency Name : ĠString , firstName : ĠString , email : ĠString ){ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRegister Validation . validate Ag ency Basics ( agency Name , firstName , email ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ agency Basics Validate . post Value ( Validate State . Success ) ĊĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠRegister ValidationException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ agency Basics Validate . post Value ( Validate State . Validate Failed ( e . result )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ