#ifndef AIRMAP_PILOTS_H_ #define AIRMAP_PILOTS_H_ #include #include #include #include #include #include #include #include #include #include namespace airmap { /// Pilots provides functionality to manage (the authorized) pilot. class Pilots : DoNotCopyOrMove { public: /// Exclude enumerates fields that can be excluded when querying pilot and aircraft properties. enum class Exclude { aircraft = 1 << 0, ///< Exclude aircraft data from results. user_metadata = 1 << 1, ///< Exclude user-specific metadata from results. app_metadata = 1 << 2, ///< Exclude app-specific metadata from results. authorized_apps = 1 << 3 ///< Exclude list of authorized apps from results. }; /// Authenticated bundles up types to ease interaction /// with Pilots::authenticated. struct Authenticated { /// Parameters bundles up input parameters. struct Parameters { std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. Optional exclude{}; ///< Exclude these fields from results. bool retrieve_statistics{false}; ///< If true, statistics about flights and aircrafts are requested. }; /// Result models the outcome of calling Pilots::authenticated. using Result = Outcome; /// Callback describes the function signature of the callback that is /// invoked when a call to Pilots::authenticated finishes. using Callback = std::function; }; /// ForId bundles up types to ease interaction /// with Pilots::for_id. struct ForId { /// Parameters bundles up input parameters. struct Parameters { std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. std::string id; ///< Searches for the specific pilot with this id. Optional exclude{}; ///< Exclude these fields from results. bool retrieve_statistics{false}; ///< If true, statistics about flights and aircrafts are requested. }; /// Result models the outcome of calling Pilots::for_id. using Result = Outcome; /// Callback describes the function signature of the callback that is /// invoked when a call to Pilots::for_id finishes. using Callback = std::function; }; /// UpdateForId bundles up types to ease interaction /// with Pilots::update_for_id. struct UpdateForId { /// Parameters bundles up input parameters. struct Parameters { std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. std::string id; ///< Updates the specific pilot with this id. std::string first_name; ///< The first name of the pilot. std::string last_name; ///< The last name of the pilot. std::string user_name; ///< The AirMap username of this pilot. std::string phone; ///< The phone number of the pilot. std::map app_metadata; ///< App-specific metadata associated to the pilot. std::map user_metadata; ///< User-specific metadata associated to the pilot. }; /// Result models the outcome of calling Pilots::update_for_id. using Result = Outcome; /// Callback describes the function signature of the callback that is /// invoked when a call to Pilots::update_for_id finishes. using Callback = std::function; }; /// StartVerifyPilotPhoneForId bundles up types to ease interaction /// with Pilots::start_verify_pilot_phone_for_id. struct StartVerifyPilotPhoneForId { /// Parameters bundles up input parameters. struct Parameters { std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. std::string id; ///< Verifies the phone number for the pilot with this id. }; struct Empty {}; /// Result models the outcome of calling Pilots::start_verify_pilot_phone_for_id. using Result = Outcome; /// Callback describes the function signature of the callback that is /// invoked when a call to Pilots::start_verify_pilot_phone_for_id finishes. using Callback = std::function; }; /// FinishVerifyPilotPhoneForId bundles up types to ease interaction /// with Pilots::finish_verify_pilot_phone_for_id. struct FinishVerifyPilotPhoneForId { /// Parameters bundles up input parameters. struct Parameters { std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. std::string id; ///< Verifies the phone number for the pilot with this id. std::uint32_t token; ///< The token that was received on the pilot's phone. }; struct Empty {}; /// Result models the outcome of calling Pilots::finish_verify_pilot_phone_for_id. using Result = Outcome; /// Callback describes the function signature of the callback that is /// invoked when a call to Pilots::finish_verify_pilot_phone_for_id finishes. using Callback = std::function; }; /// Aircrafts bundles up types to ease interaction /// with Pilots::aircrafts. struct Aircrafts { /// Parameters bundles up input parameters. struct Parameters { std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. std::string id; ///< Lists all aircrafts owned by the pilot with this id. }; /// Result models the outcome of calling Pilots::aircrafts. using Result = Outcome, Error>; /// Callback describes the function signature of the callback that is /// invoked when a call to Pilots::aircrafts finishes. using Callback = std::function; }; /// AddAircraft bundles up types to ease interaction /// with Pilots::add_aircraft. struct AddAircraft { /// Parameters bundles up input parameters. struct Parameters { std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. std::string id; ///< Adds an aircraft for the pilot with this id. std::string model_id; ///< The id of the model of the aircraft. std::string nick_name; ///< The nickname of the aircraft. }; /// Result models the outcome of calling Pilots::add_aircraft. using Result = Outcome; /// Callback describes the function signature of the callback that is /// invoked when a call to Pilots::add_aircraft finishes. using Callback = std::function; }; /// DeleteAircraft bundles up types to ease interaction /// with Pilots::delete_aircraft. struct DeleteAircraft { /// Parameters bundles up input parameters. struct Parameters { std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. std::string id; ///< Deletes an aircraft for the pilot with this id. std::string aircraft_id; ///< Deletes the specific aircraft with this id. }; struct Empty {}; /// Result models the outcome of calling Pilots::delete_aircraft. using Result = Outcome; /// Callback describes the function signature of the callback that is /// invoked when a call to Pilots::delete_aircraft finishes. using Callback = std::function; }; /// UpdateAircraft bundles up types to ease interaction /// with Pilots::update_aircraft. struct UpdateAircraft { /// Parameters bundles up input parameters. struct Parameters { std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. std::string id; ///< Updates an aircraft for the pilot with this id. std::string aircraft_id; ///< Update the specific aircraft with this id. std::string nick_name; ///< The new nick name for the aircraft. }; struct Empty {}; /// Result models the outcome of calling Pilots::update_aircraft. using Result = Outcome; /// Callback describes the function signature of the callback that is /// invoked when a call to Pilots::update_aircraft finishes. using Callback = std::function; }; /// current_user queries the AirMap services for the pilot profile /// connected to the authenticated user, reporting results to 'cb'. virtual void authenticated(const Authenticated::Parameters& parameters, const Authenticated::Callback& cb) = 0; /// for_id queries the AirMap services for the pilot profile /// with a given id, reporting results to 'cb'. virtual void for_id(const ForId::Parameters& parameters, const ForId::Callback& cb) = 0; /// update_for_id updates the pilot profile specified // by Parameters::id, reporting results to 'cb'. virtual void update_for_id(const UpdateForId::Parameters& parameters, const UpdateForId::Callback& cb) = 0; /// start_verify_pilot_phone_for_id sends a verification token to the phone /// number stored in the pilot profile, reporting results to 'cb'. virtual void start_verify_pilot_phone_for_id(const StartVerifyPilotPhoneForId::Parameters& parameters, const StartVerifyPilotPhoneForId::Callback& cb) = 0; /// finish_verify_pilot_phone_for_id responds to a verification request by /// sending back the token sent to the pilot's phone, reporting results to 'cb'. virtual void finish_verify_pilot_phone_for_id(const FinishVerifyPilotPhoneForId::Parameters& parameters, const FinishVerifyPilotPhoneForId::Callback& cb) = 0; /// aircrafts queries the list of aircrafts owned by a pilot, reporting results to 'cb'. virtual void aircrafts(const Aircrafts::Parameters& parameters, const Aircrafts::Callback& cb) = 0; /// add_aircraft associates a new aircraft with a pilot, reporting results to 'cb'. virtual void add_aircraft(const AddAircraft::Parameters& parameters, const AddAircraft::Callback& cb) = 0; /// delete_aircraft removes an aircraft from a pilot profile, reporting results to 'cb'. virtual void delete_aircraft(const DeleteAircraft::Parameters& parameters, const DeleteAircraft::Callback& cb) = 0; /// update_aircraft updates the properties of an aircraft associated with a pilot, reporting results to 'cb'. virtual void update_aircraft(const UpdateAircraft::Parameters& parameters, const UpdateAircraft::Callback& cb) = 0; protected: Pilots() = default; }; /// @cond Pilots::Exclude operator|(Pilots::Exclude, Pilots::Exclude); Pilots::Exclude operator&(Pilots::Exclude, Pilots::Exclude); std::ostream& operator<<(std::ostream& out, Pilots::Exclude exclude); /// @endcond } // namespace airmap #endif // AIRMAP_PILOTS_H_