11#include " EventDataParser.h"
2+ #include " ConcreteApiElementCollection.h"
23#include " ECFMP/log/Logger.h"
34#include " date/ParseDateStrings.h"
45#include " event/ConcreteEvent.h"
56#include " nlohmann/json.hpp"
67
78namespace ECFMP ::Api {
89
9- EventDataParser::EventDataParser (
10- std::shared_ptr<InternalEventCollection> events,
11- std::shared_ptr<const InternalFlightInformationRegionCollection> firs, std::shared_ptr<Log::Logger> logger
12- )
13- : events(std::move(events)), firs(std::move(firs)), logger(std::move(logger))
14- {}
10+ EventDataParser::EventDataParser (std::shared_ptr<Log::Logger> logger) : logger(std::move(logger))
11+ {
12+ assert (this ->logger != nullptr && " Logger cannot be null" );
13+ }
1514
16- void EventDataParser::OnEvent (const nlohmann::json& data)
15+ auto EventDataParser::ParseEvents (const nlohmann::json& data, const InternalFlightInformationRegionCollection& firs)
16+ -> std::shared_ptr<InternalEventCollection>
1717 {
18+ auto events = std::make_shared<Api::ConcreteApiElementCollection<Event::Event>>();
1819 logger->Debug (" Updating event data" );
1920 if (!DataIsValid (data)) {
2021 logger->Error (" Invalid event data from API" );
21- return ;
22+ return nullptr ;
2223 }
2324
2425 for (const auto & event: data.at (" events" )) {
25- if (!EventDataIsValid (event)) {
26+ if (!EventDataIsValid (event, firs )) {
2627 logger->Error (" Invalid event in event data from API" );
2728 logger->Debug (" Failed updating event: " + event.dump ());
2829 continue ;
@@ -32,26 +33,29 @@ namespace ECFMP::Api {
3233 event.at (" id" ).get <int >(), event.at (" name" ).get <std::string>(),
3334 Date::TimePointFromDateString (event.at (" date_start" ).get <std::string>()),
3435 Date::TimePointFromDateString (event.at (" date_end" ).get <std::string>()),
35- firs-> Get (event.at (" flight_information_region_id" ).get <int >()),
36+ firs. Get (event.at (" flight_information_region_id" ).get <int >()),
3637 event.at (" vatcan_code" ).is_null () ? " " : event.at (" vatcan_code" ).get <std::string>()
3738 ));
3839 }
3940
4041 logger->Debug (" Finished updating events" );
42+ return events;
4143 }
4244
4345 auto EventDataParser::DataIsValid (const nlohmann::json& data) -> bool
4446 {
4547 return data.is_object () && data.contains (" events" ) && data.at (" events" ).is_array ();
4648 }
4749
48- auto EventDataParser::EventDataIsValid (const nlohmann::json& data) -> bool
50+ auto
51+ EventDataParser::EventDataIsValid (const nlohmann::json& data, const InternalFlightInformationRegionCollection& firs)
52+ -> bool
4953 {
5054 return data.is_object () && data.contains (" id" ) && data.at (" id" ).is_number_integer () && data.contains (" name" )
5155 && data.at (" name" ).is_string () && DateValid (data, " date_start" ) && DateValid (data, " date_end" )
5256 && data.contains (" flight_information_region_id" )
5357 && data.at (" flight_information_region_id" ).is_number_integer ()
54- && firs-> Get (data.at (" flight_information_region_id" ).get <int >()) != nullptr
58+ && firs. Get (data.at (" flight_information_region_id" ).get <int >()) != nullptr
5559 && (data.contains (" vatcan_code" )
5660 && (data.at (" vatcan_code" ).is_null () || data.at (" vatcan_code" ).is_string ()))
5761 && data.contains (" participants" ) && ParticipantsValid (data.at (" participants" ));
0 commit comments