From e0bf998211dc8ade0e96d3bca5b2a2a3113cec14 Mon Sep 17 00:00:00 2001 From: David Dal Busco Date: Thu, 2 May 2024 16:37:31 +0200 Subject: [PATCH 1/2] feat: redo to not expose enum in api endpoints Signed-off-by: David Dal Busco --- src/orbiter/src/analytics.rs | 29 +++++++++---------------- src/orbiter/src/impls.rs | 4 ++-- src/orbiter/src/lib.rs | 6 +++--- src/orbiter/src/store.rs | 42 ++++++++++++++++++++++++------------ 4 files changed, 43 insertions(+), 38 deletions(-) diff --git a/src/orbiter/src/analytics.rs b/src/orbiter/src/analytics.rs index 9cbd9fcdb..ef47791b0 100644 --- a/src/orbiter/src/analytics.rs +++ b/src/orbiter/src/analytics.rs @@ -2,7 +2,6 @@ use crate::types::interface::{ AnalyticsBrowsersPageViews, AnalyticsClientsPageViews, AnalyticsDevicesPageViews, AnalyticsMetricsPageViews, AnalyticsTop10PageViews, AnalyticsTrackEvents, }; -use crate::types::memory::{StoredPageView, StoredTrackEvent}; use crate::types::state::{AnalyticKey, PageView, TrackEvent}; use junobuild_shared::day::calendar_date; use junobuild_shared::types::utils::CalendarDate; @@ -38,7 +37,7 @@ struct BrowsersRegex { } pub fn analytics_page_views_metrics( - page_views: &Vec<(AnalyticKey, StoredPageView)>, + page_views: &Vec<(AnalyticKey, PageView)>, ) -> AnalyticsMetricsPageViews { let mut daily_total_page_views: HashMap = HashMap::new(); let mut unique_sessions = HashSet::new(); @@ -50,13 +49,11 @@ pub fn analytics_page_views_metrics( collected_at, key: _, }, - page_view, + PageView { + session_id, href, .. + }, ) in page_views { - let PageView { - session_id, href, .. - } = page_view.inner(); - analytics_metrics( collected_at, session_id, @@ -98,14 +95,12 @@ pub fn analytics_page_views_metrics( } pub fn analytics_page_views_top_10( - page_views: &Vec<(AnalyticKey, StoredPageView)>, + page_views: &Vec<(AnalyticKey, PageView)>, ) -> AnalyticsTop10PageViews { let mut referrers: HashMap = HashMap::new(); let mut pages: HashMap = HashMap::new(); - for (_, page_view) in page_views { - let PageView { referrer, href, .. } = page_view.inner(); - + for (_, PageView { referrer, href, .. }) in page_views { analytics_referrers(referrer, &mut referrers); analytics_pages(href, &mut pages); } @@ -123,7 +118,7 @@ pub fn analytics_page_views_top_10( } pub fn analytics_page_views_clients( - page_views: &Vec<(AnalyticKey, StoredPageView)>, + page_views: &Vec<(AnalyticKey, PageView)>, ) -> AnalyticsClientsPageViews { let mut total_devices = Devices { mobile: 0, @@ -152,9 +147,7 @@ pub fn analytics_page_views_clients( safari: Regex::new(r"(?i)safari").unwrap(), }; - for (_, page_view) in page_views { - let PageView { user_agent, .. } = page_view.inner(); - + for (_, PageView { user_agent, .. }) in page_views { analytics_devices(user_agent, &devices_regex, &mut total_devices); analytics_browsers(user_agent, &browsers_regex, &mut total_browsers); } @@ -211,13 +204,11 @@ pub fn analytics_page_views_clients( } pub fn analytics_track_events( - track_events: &Vec<(AnalyticKey, StoredTrackEvent)>, + track_events: &Vec<(AnalyticKey, TrackEvent)>, ) -> AnalyticsTrackEvents { let mut total_track_events: HashMap = HashMap::new(); - for (_, track_event) in track_events { - let TrackEvent { name, .. } = track_event.inner(); - + for (_, TrackEvent { name, .. }) in track_events { let count = total_track_events.entry(name.clone()).or_insert(0); *count += 1; } diff --git a/src/orbiter/src/impls.rs b/src/orbiter/src/impls.rs index f0da641c1..b1f6e5c21 100644 --- a/src/orbiter/src/impls.rs +++ b/src/orbiter/src/impls.rs @@ -47,7 +47,7 @@ impl Storable for StoredPageView { } impl StoredPageView { - pub fn inner(&self) -> &PageView { + pub fn inner(self) -> PageView { match self { StoredPageView::Unbounded(page_view) | StoredPageView::Bounded(page_view) => page_view, } @@ -76,7 +76,7 @@ impl Storable for StoredTrackEvent { } impl StoredTrackEvent { - pub fn inner(&self) -> &TrackEvent { + pub fn inner(self) -> TrackEvent { match self { StoredTrackEvent::Unbounded(track_event) | StoredTrackEvent::Bounded(track_event) => { track_event diff --git a/src/orbiter/src/lib.rs b/src/orbiter/src/lib.rs index f5c89d23e..dbba753d9 100644 --- a/src/orbiter/src/lib.rs +++ b/src/orbiter/src/lib.rs @@ -36,7 +36,7 @@ use crate::types::interface::{ AnalyticsTrackEvents, DelSatelliteConfig, GetAnalytics, SetPageView, SetSatelliteConfig, SetTrackEvent, }; -use crate::types::memory::{Memory, StoredPageView, StoredTrackEvent}; +use crate::types::memory::Memory; use crate::types::state::{AnalyticKey, HeapState, PageView, SatelliteConfigs, State, TrackEvent}; use ciborium::{from_reader, into_writer}; use ic_cdk::api::call::arg_data; @@ -154,7 +154,7 @@ fn set_page_views( } #[query(guard = "caller_is_controller")] -fn get_page_views(filter: GetAnalytics) -> Vec<(AnalyticKey, StoredPageView)> { +fn get_page_views(filter: GetAnalytics) -> Vec<(AnalyticKey, PageView)> { get_page_views_store(&filter) } @@ -213,7 +213,7 @@ fn set_track_events( } #[query(guard = "caller_is_controller")] -fn get_track_events(filter: GetAnalytics) -> Vec<(AnalyticKey, StoredTrackEvent)> { +fn get_track_events(filter: GetAnalytics) -> Vec<(AnalyticKey, TrackEvent)> { get_track_events_store(&filter) } diff --git a/src/orbiter/src/store.rs b/src/orbiter/src/store.rs index 4426c131d..735b14c24 100644 --- a/src/orbiter/src/store.rs +++ b/src/orbiter/src/store.rs @@ -119,7 +119,10 @@ fn insert_track_event_impl( match current_track_event.clone() { None => (), Some(current_track_event) => { - match assert_timestamp(track_event.updated_at, current_track_event.inner().updated_at) { + match assert_timestamp( + track_event.updated_at, + current_track_event.inner().updated_at, + ) { Ok(_) => (), Err(e) => { return Err(e); @@ -132,7 +135,10 @@ fn insert_track_event_impl( match current_track_event.clone() { None => (), Some(current_track_event) => { - assert_session_id(&track_event.session_id, ¤t_track_event.inner().session_id)?; + assert_session_id( + &track_event.session_id, + ¤t_track_event.inner().session_id, + )?; } } @@ -140,7 +146,10 @@ fn insert_track_event_impl( match current_track_event.clone() { None => (), Some(current_track_event) => { - assert_satellite_id(track_event.satellite_id, current_track_event.inner().satellite_id)?; + assert_satellite_id( + track_event.satellite_id, + current_track_event.inner().satellite_id, + )?; } } @@ -186,16 +195,17 @@ fn insert_track_event_impl( Ok(new_track_event.clone()) } -pub fn get_page_views(filter: &GetAnalytics) -> Vec<(AnalyticKey, StoredPageView)> { +pub fn get_page_views(filter: &GetAnalytics) -> Vec<(AnalyticKey, PageView)> { STATE.with(|state| get_page_views_impl(filter, &state.borrow_mut().stable)) } -fn get_page_views_impl( - filter: &GetAnalytics, - state: &StableState, -) -> Vec<(AnalyticKey, StoredPageView)> { +fn get_page_views_impl(filter: &GetAnalytics, state: &StableState) -> Vec<(AnalyticKey, PageView)> { match filter.satellite_id { - None => state.page_views.range(filter_analytics(filter)).collect(), + None => state + .page_views + .range(filter_analytics(filter)) + .map(|(key, page_view)| (key, page_view.inner())) + .collect(), Some(satellite_id) => { let satellites_keys: Vec<(AnalyticSatelliteKey, AnalyticKey)> = state .satellites_page_views @@ -205,23 +215,27 @@ fn get_page_views_impl( .iter() .filter_map(|(_, key)| { let page_view = state.page_views.get(key); - page_view.map(|page_view| (key.clone(), page_view)) + page_view.map(|page_view| (key.clone(), page_view.inner())) }) .collect() } } } -pub fn get_track_events(filter: &GetAnalytics) -> Vec<(AnalyticKey, StoredTrackEvent)> { +pub fn get_track_events(filter: &GetAnalytics) -> Vec<(AnalyticKey, TrackEvent)> { STATE.with(|state| get_track_events_impl(filter, &state.borrow_mut().stable)) } fn get_track_events_impl( filter: &GetAnalytics, state: &StableState, -) -> Vec<(AnalyticKey, StoredTrackEvent)> { +) -> Vec<(AnalyticKey, TrackEvent)> { match filter.satellite_id { - None => state.track_events.range(filter_analytics(filter)).collect(), + None => state + .track_events + .range(filter_analytics(filter)) + .map(|(key, track_event)| (key.clone(), track_event.inner())) + .collect(), Some(satellite_id) => { let satellites_keys: Vec<(AnalyticSatelliteKey, AnalyticKey)> = state .satellites_track_events @@ -231,7 +245,7 @@ fn get_track_events_impl( .iter() .filter_map(|(_, key)| { let track_event = state.track_events.get(key); - track_event.map(|track_event| (key.clone(), track_event)) + track_event.map(|track_event| (key.clone(), track_event.inner())) }) .collect() } From 21d939464cd055f4dd1ea0523602319da807eed6 Mon Sep 17 00:00:00 2001 From: David Dal Busco Date: Thu, 2 May 2024 16:39:35 +0200 Subject: [PATCH 2/2] feat: redo no inner typo Signed-off-by: David Dal Busco --- src/declarations/orbiter/orbiter.did.d.ts | 6 ++-- .../orbiter/orbiter.factory.did.js | 12 ++------ .../orbiter/orbiter.factory.did.mjs | 12 ++------ src/orbiter/orbiter.did | 9 ++---- src/tests/orbiter.upgrade.spec.ts | 28 +++---------------- 5 files changed, 12 insertions(+), 55 deletions(-) diff --git a/src/declarations/orbiter/orbiter.did.d.ts b/src/declarations/orbiter/orbiter.did.d.ts index 147a6ad14..158d35cca 100644 --- a/src/declarations/orbiter/orbiter.did.d.ts +++ b/src/declarations/orbiter/orbiter.did.d.ts @@ -125,8 +125,6 @@ export interface SetTrackEvent { satellite_id: Principal; user_agent: [] | [string]; } -export type StoredPageView = { Unbounded: PageView } | { Bounded: PageView }; -export type StoredTrackEvent = { Unbounded: TrackEvent } | { Bounded: TrackEvent }; export interface TrackEvent { updated_at: bigint; session_id: string; @@ -139,11 +137,11 @@ export interface _SERVICE { del_controllers: ActorMethod<[DeleteControllersArgs], Array<[Principal, Controller]>>; del_satellite_config: ActorMethod<[Principal, DelSatelliteConfig], undefined>; deposit_cycles: ActorMethod<[DepositCyclesArgs], undefined>; - get_page_views: ActorMethod<[GetAnalytics], Array<[AnalyticKey, StoredPageView]>>; + get_page_views: ActorMethod<[GetAnalytics], Array<[AnalyticKey, PageView]>>; get_page_views_analytics_clients: ActorMethod<[GetAnalytics], AnalyticsClientsPageViews>; get_page_views_analytics_metrics: ActorMethod<[GetAnalytics], AnalyticsMetricsPageViews>; get_page_views_analytics_top_10: ActorMethod<[GetAnalytics], AnalyticsTop10PageViews>; - get_track_events: ActorMethod<[GetAnalytics], Array<[AnalyticKey, StoredTrackEvent]>>; + get_track_events: ActorMethod<[GetAnalytics], Array<[AnalyticKey, TrackEvent]>>; get_track_events_analytics: ActorMethod<[GetAnalytics], AnalyticsTrackEvents>; list_controllers: ActorMethod<[], Array<[Principal, Controller]>>; list_satellite_configs: ActorMethod<[], Array<[Principal, OrbiterSatelliteConfig]>>; diff --git a/src/declarations/orbiter/orbiter.factory.did.js b/src/declarations/orbiter/orbiter.factory.did.js index c2dc41af3..5bac8026e 100644 --- a/src/declarations/orbiter/orbiter.factory.did.js +++ b/src/declarations/orbiter/orbiter.factory.did.js @@ -44,10 +44,6 @@ export const idlFactory = ({ IDL }) => { device: PageViewDevice, user_agent: IDL.Opt(IDL.Text) }); - const StoredPageView = IDL.Variant({ - Unbounded: PageView, - Bounded: PageView - }); const AnalyticsBrowsersPageViews = IDL.Record({ safari: IDL.Float64, opera: IDL.Float64, @@ -89,10 +85,6 @@ export const idlFactory = ({ IDL }) => { created_at: IDL.Nat64, satellite_id: IDL.Principal }); - const StoredTrackEvent = IDL.Variant({ - Unbounded: TrackEvent, - Bounded: TrackEvent - }); const AnalyticsTrackEvents = IDL.Record({ total: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Nat32)) }); @@ -150,7 +142,7 @@ export const idlFactory = ({ IDL }) => { deposit_cycles: IDL.Func([DepositCyclesArgs], [], []), get_page_views: IDL.Func( [GetAnalytics], - [IDL.Vec(IDL.Tuple(AnalyticKey, StoredPageView))], + [IDL.Vec(IDL.Tuple(AnalyticKey, PageView))], ['query'] ), get_page_views_analytics_clients: IDL.Func( @@ -166,7 +158,7 @@ export const idlFactory = ({ IDL }) => { get_page_views_analytics_top_10: IDL.Func([GetAnalytics], [AnalyticsTop10PageViews], ['query']), get_track_events: IDL.Func( [GetAnalytics], - [IDL.Vec(IDL.Tuple(AnalyticKey, StoredTrackEvent))], + [IDL.Vec(IDL.Tuple(AnalyticKey, TrackEvent))], ['query'] ), get_track_events_analytics: IDL.Func([GetAnalytics], [AnalyticsTrackEvents], ['query']), diff --git a/src/declarations/orbiter/orbiter.factory.did.mjs b/src/declarations/orbiter/orbiter.factory.did.mjs index c2dc41af3..5bac8026e 100644 --- a/src/declarations/orbiter/orbiter.factory.did.mjs +++ b/src/declarations/orbiter/orbiter.factory.did.mjs @@ -44,10 +44,6 @@ export const idlFactory = ({ IDL }) => { device: PageViewDevice, user_agent: IDL.Opt(IDL.Text) }); - const StoredPageView = IDL.Variant({ - Unbounded: PageView, - Bounded: PageView - }); const AnalyticsBrowsersPageViews = IDL.Record({ safari: IDL.Float64, opera: IDL.Float64, @@ -89,10 +85,6 @@ export const idlFactory = ({ IDL }) => { created_at: IDL.Nat64, satellite_id: IDL.Principal }); - const StoredTrackEvent = IDL.Variant({ - Unbounded: TrackEvent, - Bounded: TrackEvent - }); const AnalyticsTrackEvents = IDL.Record({ total: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Nat32)) }); @@ -150,7 +142,7 @@ export const idlFactory = ({ IDL }) => { deposit_cycles: IDL.Func([DepositCyclesArgs], [], []), get_page_views: IDL.Func( [GetAnalytics], - [IDL.Vec(IDL.Tuple(AnalyticKey, StoredPageView))], + [IDL.Vec(IDL.Tuple(AnalyticKey, PageView))], ['query'] ), get_page_views_analytics_clients: IDL.Func( @@ -166,7 +158,7 @@ export const idlFactory = ({ IDL }) => { get_page_views_analytics_top_10: IDL.Func([GetAnalytics], [AnalyticsTop10PageViews], ['query']), get_track_events: IDL.Func( [GetAnalytics], - [IDL.Vec(IDL.Tuple(AnalyticKey, StoredTrackEvent))], + [IDL.Vec(IDL.Tuple(AnalyticKey, TrackEvent))], ['query'] ), get_track_events_analytics: IDL.Func([GetAnalytics], [AnalyticsTrackEvents], ['query']), diff --git a/src/orbiter/orbiter.did b/src/orbiter/orbiter.did index 4150e8b42..913fa96c2 100644 --- a/src/orbiter/orbiter.did +++ b/src/orbiter/orbiter.did @@ -96,11 +96,6 @@ type SetTrackEvent = record { satellite_id : principal; user_agent : opt text; }; -type StoredPageView = variant { Unbounded : PageView; Bounded : PageView }; -type StoredTrackEvent = variant { - Unbounded : TrackEvent; - Bounded : TrackEvent; -}; type TrackEvent = record { updated_at : nat64; session_id : text; @@ -116,7 +111,7 @@ service : () -> { del_satellite_config : (principal, DelSatelliteConfig) -> (); deposit_cycles : (DepositCyclesArgs) -> (); get_page_views : (GetAnalytics) -> ( - vec record { AnalyticKey; StoredPageView }, + vec record { AnalyticKey; PageView }, ) query; get_page_views_analytics_clients : (GetAnalytics) -> ( AnalyticsClientsPageViews, @@ -128,7 +123,7 @@ service : () -> { AnalyticsTop10PageViews, ) query; get_track_events : (GetAnalytics) -> ( - vec record { AnalyticKey; StoredTrackEvent }, + vec record { AnalyticKey; TrackEvent }, ) query; get_track_events_analytics : (GetAnalytics) -> (AnalyticsTrackEvents) query; list_controllers : () -> (vec record { principal; Controller }) query; diff --git a/src/tests/orbiter.upgrade.spec.ts b/src/tests/orbiter.upgrade.spec.ts index cf2022103..a8ed751bc 100644 --- a/src/tests/orbiter.upgrade.spec.ts +++ b/src/tests/orbiter.upgrade.spec.ts @@ -116,17 +116,10 @@ describe('Orbiter upgrade', () => { expect(result).not.toBeUndefined(); - const [{ collected_at }, storedPageView] = result!; + const [{ collected_at }, pageView] = result!; expect(collected_at).toEqual(key.collected_at); - const pageView = - 'Bounded' in storedPageView - ? storedPageView.Bounded - : 'Unbounded' in storedPageView - ? storedPageView.Unbounded - : storedPageView; - expect(pageView.title).toEqual(pageViewMock.title); expect(pageView.referrer).toEqual(pageViewMock.referrer); expect(pageView.time_zone).toEqual(pageViewMock.time_zone); @@ -203,17 +196,10 @@ describe('Orbiter upgrade', () => { expect(result).not.toBeUndefined(); - const [{ collected_at }, storedTrackEvent] = result!; + const [{ collected_at }, trackEvent] = result!; expect(collected_at).toEqual(key.collected_at); - const trackEvent = - 'Bounded' in storedTrackEvent - ? storedTrackEvent.Bounded - : 'Unbounded' in storedTrackEvent - ? storedTrackEvent.Unbounded - : storedTrackEvent; - expect(trackEvent.name).toEqual(trackEventMock.name); expect(fromNullable(trackEvent.metadata)!.sort()).toEqual( fromNullable(trackEventMock.metadata)!.sort() @@ -299,15 +285,12 @@ describe('Orbiter upgrade', () => { const { set_page_views, get_page_views } = newActor; - const [[__, storedPageView]] = await get_page_views({ + const [[__, { updated_at }]] = await get_page_views({ to: toNullable(), from: toNullable(), satellite_id: toNullable() }); - const { updated_at } = - 'Bounded' in storedPageView ? storedPageView.Bounded : storedPageView.Unbounded; - const [key, _] = keysBeforeUpgrade; const results = await set_page_views([ @@ -369,15 +352,12 @@ describe('Orbiter upgrade', () => { const { set_track_events, get_track_events } = newActor; - const [[__, storedTrackEvent]] = await get_track_events({ + const [[__, { updated_at }]] = await get_track_events({ to: toNullable(), from: toNullable(), satellite_id: toNullable() }); - const { updated_at } = - 'Bounded' in storedTrackEvent ? storedTrackEvent.Bounded : storedTrackEvent.Unbounded; - const [key, _] = keysBeforeUpgrade; const results = await set_track_events([