diff --git a/README.md b/README.md index 9ef95394..1bc89000 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,9 @@ experiments with different development libraries and tools. - Jetpack Compose - Koin - Kotlin Coroutines -- Retrofit +- Ktor - OkHttp3 -- Gson +- Kotlin Serialization ## 🔬 Experiments, the purpose of the project @@ -61,7 +61,8 @@ Here's an example of an experiment that meets our rules: **Branch Name:** experiment/navigation-by-voyager-library\ **Purpose:** Check compose navigation with voyager library. Compare that with standard way.\ -**Goal:** To resolve which navigation is better for compose. What are the pros and cons of each way.\ +**Goal:** To resolve which navigation is better for compose. What are the pros and cons of each +way.\ **Method:** Implement navigation with voyager library. ## 🚀 Project setup @@ -71,8 +72,8 @@ In order to properly start the application and use it, the `LOUDIUS_CLIENT_SECRE * `LOUDIUS_CLIENT_SECRET` is a GitHub client secret key * `LOUDIUS_CLIENT_ID` is a GitHub client id -* -both are provided from ``Settings -> Developer Settings -> OAuth Apps -> my application``. + +Both are provided from ``Settings -> Developer Settings -> OAuth Apps -> my application``. If you're not AppUniter, here's a video to help you create such appliation: @@ -82,7 +83,8 @@ If you'd like to run end-to-end tests you'd also need `LOUDIUS_GITHUB_USER_NAME` `LOUDIUS_GITHUB_USER_PASSWORD` which are credentials to GitHub test account. This is just a standard GitHub account that you can create by yourself. -If you're AppUniter, you can find those secrets [here](https://www.notion.so/appunite/Github-Secrets-0c2c6c1b56e2472c8a4752241f1e20d3?pvs=4). +If you're AppUniter, you can find those +secrets [here](https://www.notion.so/appunite/Github-Secrets-0c2c6c1b56e2472c8a4752241f1e20d3?pvs=4). ### How to set environmental variable on mac? @@ -103,6 +105,11 @@ To do that - add `[New snapshots]` to the pull request title. Otherwise the snap We also are having [design system documentation](components/README.md). +## 🧐 Firebase Analytics + +Google Analytics serves as an application measurement solution, offering valuable insights into app +utilization and user engagement. Check out our [Analytics Documentation](docs/analytics.md)! + ## 🧑🏻‍🎓 Contributing We believe that there is no ideal code and that every code can be improved. Therefore, we welcome diff --git a/docs/analytics.md b/docs/analytics.md new file mode 100644 index 00000000..ffdf85c1 --- /dev/null +++ b/docs/analytics.md @@ -0,0 +1,57 @@ +## 🧐 Firebase Analytics + +Google Analytics helps you see how people use your Android app. It automatically tracks different +actions and user details. You can even create your own custom events to measure things that are +important to your app. Once it collects this info, you can check it out on a dashboard in the +Firebase console. + +| Description | Picture | +|:------------------------------------------------------------------:|:-------------------------------------------------------------------:| +| Users in last 30 minutes. | ![Last 30 minutes](analytics_imgs/reviewers/last_30_mins.png) | +| List of events from the selected period. | ![List of events](analytics_imgs/reviewers/list_of_events.png) | +| When you click on an event, you can see more detailed information. | ![Detailed information](analytics_imgs/reviewers/detailed_info.png) | + +### How to test? + +First, you should add commands to terminal which allow you logging events. + +``` +adb shell setprop log.tag.FA VERBOSE +adb shell setprop log.tag.FA-SVC VERBOSE +adb logcat -v time -s FA FA-SVC +``` + +Last command will print logs for the device. +If you have problems with adb command, those links can +help: [Not found adb Error](https://dev.to/ravics09/solution-of-command-not-found-adb-error-29e7) +and [StackOverflow question](https://stackoverflow.com/questions/50456824/adb-command-not-found-on-mac-computer). +Then, you can open the app and start testing! You should be able to see relevant events in Logcat. + +**❗️Be aware that you won't see analytics on dashboard immediately. Firebase needs about a few hours +to note it.❗️** + +### Documentation + +**Analytics Parameters** + +| Event parameter name | Type | Examples | Description | +|:--------------------:|:-------:|:--------------:|:---------------------------------------------------------------:| +| name | String | "button_click" | An important event in the application that you want to measure. | +| item_name | String | "notify" | Name of item that user interacted with during an event. | +| success | Boolean | `true` | Information whether the action was successful. | + +**Event Names** + +| Event name | Parameters | Description | +|:---------------------------------------------------:|-----------------------|---------------------------------------------------| +| [button_click](event_details/button_click.md) | item_name | Fired when a user clicked on a button or link. | +| [action_start](event_details/action_start.md) | item_name | Fired when we want to track start/finish actions. | +| [action_finished](event_details/action_finished.md) | item_name
success | Called when the action_start is finished. | +| [simple_action](event_details/simple_action.md) | item_name | Fired when single actions is happening. | +| [screen_opened](event_details/screen_opened.md) | item_name | Called when screen is opened. | + +**Screens** +* [Reviewers Screen](screens/reviewers_screen.md) +* [Pull Requests Screen](screens/pullrequests_screen.md) +* [Login Screen](screens/login_screen.md) +* [Authenticating](screens/authenticating.md) diff --git a/docs/analytics_imgs/login/github_auth.png b/docs/analytics_imgs/login/github_auth.png new file mode 100644 index 00000000..aa5c13ab Binary files /dev/null and b/docs/analytics_imgs/login/github_auth.png differ diff --git a/docs/analytics_imgs/login/login_screen.png b/docs/analytics_imgs/login/login_screen.png new file mode 100644 index 00000000..11587ae9 Binary files /dev/null and b/docs/analytics_imgs/login/login_screen.png differ diff --git a/docs/analytics_imgs/login/xiaomi_dialog_dismissed.png b/docs/analytics_imgs/login/xiaomi_dialog_dismissed.png new file mode 100644 index 00000000..c1f1dba4 Binary files /dev/null and b/docs/analytics_imgs/login/xiaomi_dialog_dismissed.png differ diff --git a/docs/analytics_imgs/login/xiaomi_permission_already_granted.png b/docs/analytics_imgs/login/xiaomi_permission_already_granted.png new file mode 100644 index 00000000..3ea796ad Binary files /dev/null and b/docs/analytics_imgs/login/xiaomi_permission_already_granted.png differ diff --git a/docs/analytics_imgs/login/xiaomi_permission_dialog.png b/docs/analytics_imgs/login/xiaomi_permission_dialog.png new file mode 100644 index 00000000..f3abda63 Binary files /dev/null and b/docs/analytics_imgs/login/xiaomi_permission_dialog.png differ diff --git a/docs/analytics_imgs/login/xiaomi_permission_granted.png b/docs/analytics_imgs/login/xiaomi_permission_granted.png new file mode 100644 index 00000000..f5eb235a Binary files /dev/null and b/docs/analytics_imgs/login/xiaomi_permission_granted.png differ diff --git a/docs/analytics_imgs/pull_requests/fetch_prs.png b/docs/analytics_imgs/pull_requests/fetch_prs.png new file mode 100644 index 00000000..5081beef Binary files /dev/null and b/docs/analytics_imgs/pull_requests/fetch_prs.png differ diff --git a/docs/analytics_imgs/pull_requests/fetch_prs_failure.png b/docs/analytics_imgs/pull_requests/fetch_prs_failure.png new file mode 100644 index 00000000..91faf889 Binary files /dev/null and b/docs/analytics_imgs/pull_requests/fetch_prs_failure.png differ diff --git a/docs/analytics_imgs/pull_requests/fetch_prs_success.png b/docs/analytics_imgs/pull_requests/fetch_prs_success.png new file mode 100644 index 00000000..5081beef Binary files /dev/null and b/docs/analytics_imgs/pull_requests/fetch_prs_success.png differ diff --git a/docs/analytics_imgs/pull_requests/navigate_to_reviewers.png b/docs/analytics_imgs/pull_requests/navigate_to_reviewers.png new file mode 100644 index 00000000..42c8111f Binary files /dev/null and b/docs/analytics_imgs/pull_requests/navigate_to_reviewers.png differ diff --git a/docs/analytics_imgs/pull_requests/prs_screen_opened.png b/docs/analytics_imgs/pull_requests/prs_screen_opened.png new file mode 100644 index 00000000..5081beef Binary files /dev/null and b/docs/analytics_imgs/pull_requests/prs_screen_opened.png differ diff --git a/docs/analytics_imgs/pull_requests/refresh_prs.png b/docs/analytics_imgs/pull_requests/refresh_prs.png new file mode 100644 index 00000000..64c35e00 Binary files /dev/null and b/docs/analytics_imgs/pull_requests/refresh_prs.png differ diff --git a/docs/analytics_imgs/pull_requests/refresh_prs_failure.png b/docs/analytics_imgs/pull_requests/refresh_prs_failure.png new file mode 100644 index 00000000..91faf889 Binary files /dev/null and b/docs/analytics_imgs/pull_requests/refresh_prs_failure.png differ diff --git a/docs/analytics_imgs/pull_requests/refresh_prs_success.png b/docs/analytics_imgs/pull_requests/refresh_prs_success.png new file mode 100644 index 00000000..5081beef Binary files /dev/null and b/docs/analytics_imgs/pull_requests/refresh_prs_success.png differ diff --git a/docs/analytics_imgs/reviewers/after_notify_error.png b/docs/analytics_imgs/reviewers/after_notify_error.png new file mode 100644 index 00000000..18945417 Binary files /dev/null and b/docs/analytics_imgs/reviewers/after_notify_error.png differ diff --git a/docs/analytics_imgs/reviewers/after_notify_success.png b/docs/analytics_imgs/reviewers/after_notify_success.png new file mode 100644 index 00000000..792643f4 Binary files /dev/null and b/docs/analytics_imgs/reviewers/after_notify_success.png differ diff --git a/docs/analytics_imgs/reviewers/detailed_info.png b/docs/analytics_imgs/reviewers/detailed_info.png new file mode 100644 index 00000000..8f424d49 Binary files /dev/null and b/docs/analytics_imgs/reviewers/detailed_info.png differ diff --git a/docs/analytics_imgs/reviewers/fetch_with_error.png b/docs/analytics_imgs/reviewers/fetch_with_error.png new file mode 100644 index 00000000..b4cb8e6b Binary files /dev/null and b/docs/analytics_imgs/reviewers/fetch_with_error.png differ diff --git a/docs/analytics_imgs/reviewers/fetch_with_success.png b/docs/analytics_imgs/reviewers/fetch_with_success.png new file mode 100644 index 00000000..c408a994 Binary files /dev/null and b/docs/analytics_imgs/reviewers/fetch_with_success.png differ diff --git a/docs/analytics_imgs/reviewers/last_30_mins.png b/docs/analytics_imgs/reviewers/last_30_mins.png new file mode 100644 index 00000000..c7b6c902 Binary files /dev/null and b/docs/analytics_imgs/reviewers/last_30_mins.png differ diff --git a/docs/analytics_imgs/reviewers/list_of_events.png b/docs/analytics_imgs/reviewers/list_of_events.png new file mode 100644 index 00000000..4644677b Binary files /dev/null and b/docs/analytics_imgs/reviewers/list_of_events.png differ diff --git a/docs/analytics_imgs/reviewers/pull_to_refresh.png b/docs/analytics_imgs/reviewers/pull_to_refresh.png new file mode 100644 index 00000000..06721df3 Binary files /dev/null and b/docs/analytics_imgs/reviewers/pull_to_refresh.png differ diff --git a/docs/analytics_imgs/reviewers/refresh_with_error.png b/docs/analytics_imgs/reviewers/refresh_with_error.png new file mode 100644 index 00000000..b4cb8e6b Binary files /dev/null and b/docs/analytics_imgs/reviewers/refresh_with_error.png differ diff --git a/docs/analytics_imgs/reviewers/refresh_with_success.png b/docs/analytics_imgs/reviewers/refresh_with_success.png new file mode 100644 index 00000000..c408a994 Binary files /dev/null and b/docs/analytics_imgs/reviewers/refresh_with_success.png differ diff --git a/docs/analytics_imgs/reviewers/reviewers_screen.png b/docs/analytics_imgs/reviewers/reviewers_screen.png new file mode 100644 index 00000000..c408a994 Binary files /dev/null and b/docs/analytics_imgs/reviewers/reviewers_screen.png differ diff --git a/docs/analytics_imgs/reviewers/when_user_clicks_notify.png b/docs/analytics_imgs/reviewers/when_user_clicks_notify.png new file mode 100644 index 00000000..2de25903 Binary files /dev/null and b/docs/analytics_imgs/reviewers/when_user_clicks_notify.png differ diff --git a/docs/event_details/action_finished.md b/docs/event_details/action_finished.md new file mode 100644 index 00000000..25c18a60 --- /dev/null +++ b/docs/event_details/action_finished.md @@ -0,0 +1,37 @@ +# action_finished + +## When the event is called + +Called when the "action_start" is finished. + +## Parameters + +- event_name (required) - Always “action_finished”. +- item_name (required) - Unique action name. The same value as in "action_start". +- success (required) - True if action succeeded and false if not. + +## Examples + +```json +{ + "event_name": "action_finished", + "item_name": "Downloading User Profile", + "success": true, +} +``` + +or + +```json +{ + "event_name": "action_finished", + "item_name": "Downloading User Profile", + "success": false, +} +``` + +## Why this metric is tracked + +- We can measure how many interactions has finished. +- We can measure how many actions were successful. +- In case of debugging errors, we can measure user interactions that are preceding the failure event. diff --git a/docs/event_details/action_start.md b/docs/event_details/action_start.md new file mode 100644 index 00000000..5f6b0049 --- /dev/null +++ b/docs/event_details/action_start.md @@ -0,0 +1,24 @@ +# action_start + +## When the event is called + +This event should be tracked only if is followed by action_finished event. If you don’t want to track finish, you should use simple_action event. + +## Parameters + +- event_name (required) - Always “action_start”. +- item_name (required) - Unique action name. The same item_name should be used in action_finished event. + +## Examples + +```json +{ + "event_name": "action_start", + "item_name": "Downloading User Profile" +} +``` + +## Why this metric is tracked + +- We can measure how many interactions has started. +- By checking "action_finished", we can measure how many actions were successful. diff --git a/docs/event_details/button_click.md b/docs/event_details/button_click.md new file mode 100644 index 00000000..4aee9d4f --- /dev/null +++ b/docs/event_details/button_click.md @@ -0,0 +1,25 @@ +# button_click + +## When the event is called + +Fired when a user clicked on a button or link. + +## Parameters + +- event_name (required) - Always “button_click”. +- item_name (required) - Name of the button or link that user clicked. Keep in mind, it should uniquely identify every button on every screen. So if there are two buttons with the same name, you need to add some suffix to the event. If the text on the button changes, it’s usually better to keep the “item_name” the same, so we can keep analytics dashboard simpler. + +## Examples + +```json +{ + "event_name": "button_click", + "item_name": "Check-in button", +} +``` + +## Why this metric is tracked + +- We can check if users clicks on given button/link. +- We can check what buttons are most important for our users. +- By very low conversion, we might find an opportunity for improving the button placement or UI. diff --git a/docs/event_details/screen_opened.md b/docs/event_details/screen_opened.md new file mode 100644 index 00000000..a55393c4 --- /dev/null +++ b/docs/event_details/screen_opened.md @@ -0,0 +1,23 @@ +# screen_opened + +## When the event is called + +If you’d like to track when screen is opened. + +## Parameters + +- event_name (required) - Always “screen_opened”. +- item_name (required) - Unique name of the screen that is opened. + +## Examples + +```json +{ + "event_name": "screen_opened", + "item_name": "reviewers_screen" +} +``` + +## Why this metric is tracked + +- We can track when user open screen. diff --git a/docs/event_details/simple_action.md b/docs/event_details/simple_action.md new file mode 100644 index 00000000..4ed19a44 --- /dev/null +++ b/docs/event_details/simple_action.md @@ -0,0 +1,24 @@ +# simple_action + +## When the event is called + +If you’d like to track action start and action finish. You should use "action_start" events. + +## Parameters + +- event_name (required) - Always “simple_action”. +- item_name (required) - Unique name of the action that is happening. + +## Examples + +```json +{ + "event_name": "simple_action", + "item_name": "User is checked-in" +} +``` + +## Why this metric is tracked + +- We can track important interactions within the app and measure its occurrences. +- Can be used for measuring important conversions. diff --git a/docs/screens/authenticating.md b/docs/screens/authenticating.md new file mode 100644 index 00000000..b80221ec --- /dev/null +++ b/docs/screens/authenticating.md @@ -0,0 +1,27 @@ +# Authenticating + +## Documentation + +| When authentication started. |
{
"name": "action_start"
"item_name": "authentication"
}
 |
+|:----------------------------:|------------------------------------------------------------------------------------------|
+
+| When authentication finished with success. | 
{
"name": "action_finished"
"item_name": "authentication"
"success": true
}
 |
+|:------------------------------------------:|---------------------------------------------------------------------------------------------------------------------|
+
+| When authentication finished with failure. | 
{
"name": "action_finished"
"item_name": "authentication"
"success": false
}
 |
+|:------------------------------------------:|----------------------------------------------------------------------------------------------------------------------|
+
+| When get access token started. | 
{
"name": "action_start"
"item_name": "get_access_token"
}
 |
+|:------------------------------:|--------------------------------------------------------------------------------------------|
+
+| When get access token finished with success. | 
{
"name": "action_finished"
"item_name": "get_access_token"
"success": true
}
 |
+|:--------------------------------------------:|-----------------------------------------------------------------------------------------------------------------------|
+
+| When get access token finished with failure. | 
{
"name": "action_finished"
"item_name": "get_access_token"
"success": false
}
 |
+|:--------------------------------------------:|------------------------------------------------------------------------------------------------------------------------|
+
+| When login error is shown. | 
{
"name": "screen_opened"
"item_name": "login_error"
}
 |
+|:--------------------------:|----------------------------------------------------------------------------------------|
+
+| When generic error is shown. | 
{
"name": "screen_opened"
"item_name": "generic_error"
}
 |
+|:----------------------------:|------------------------------------------------------------------------------------------|
diff --git a/docs/screens/login_screen.md b/docs/screens/login_screen.md
new file mode 100644
index 00000000..1eefb1aa
--- /dev/null
+++ b/docs/screens/login_screen.md
@@ -0,0 +1,29 @@
+# Login Screen
+
+
+
+## Documentation
+
+|                         When user clicks log in.                          | Specification                                                                    |
+|:-------------------------------------------------------------------------:|----------------------------------------------------------------------------------|
+|  | 
{
"name": "button_click"
"item_name": "log_in"
}
 |
+
+|                         When github auth opens.                          | Specification                                                                               |
+|:------------------------------------------------------------------------:|---------------------------------------------------------------------------------------------|
+|  | 
{
"name": "simple_action"
"item_name": "open_github_auth"
}
 |
+
+|                       When user clicks log in on xiaomi device.                       | Specification                                                                                            |
+|:-------------------------------------------------------------------------------------:|----------------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "simple_action"
"item_name": "show_xiaomi_permission_dialog"
}
 |
+
+|                         When user dismiss permission dialog.                         | Specification                                                                                                 |
+|:------------------------------------------------------------------------------------:|---------------------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "simple_action"
"item_name": "xiaomi_permission_dialog_dismissed"
}
 |
+
+|                      When user clicks grant on permission dialog.                      | Specification                                                                                                          |
+|:--------------------------------------------------------------------------------------:|------------------------------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "simple_action"
"item_name": "xiaomi_permission_dialog_permission_granted"
}
 |
+
+|                     When user clicks already granted on permission dialog.                     | Specification                                                                                                                  |
+|:----------------------------------------------------------------------------------------------:|--------------------------------------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "simple_action"
"item_name": "xiaomi_permission_dialog_permission_already_granted"
}
 |
diff --git a/docs/screens/pullrequests_screen.md b/docs/screens/pullrequests_screen.md
new file mode 100644
index 00000000..feb608af
--- /dev/null
+++ b/docs/screens/pullrequests_screen.md
@@ -0,0 +1,37 @@
+# Pull Requests Screen
+
+
+
+## Documentation
+
+|                           When user pulls to refresh.                            | Specification                                                                                        |
+|:--------------------------------------------------------------------------------:|------------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "action_start"
"item_name": "refresh_pull_requests_data"
}
 |
+
+|                         When refresh data finished with success.                         | Specification                                                                                                                   |
+|:----------------------------------------------------------------------------------------:|---------------------------------------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "action_finished"
"item_name": "refresh_pull_requests_data"
"success": true
}
 |
+
+|                         When refresh data finished with failure.                         | Specification                                                                                                                    |
+|:----------------------------------------------------------------------------------------:|----------------------------------------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "action_finished"
"item_name": "refresh_pull_requests_data"
"success": false
}
 |
+
+|                     When user opens pull requests screen.                      | Specification                                                                                      |
+|:------------------------------------------------------------------------------:|----------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "action_start"
"item_name": "fetch_pull_requests_data"
}
 |
+
+|                         When fetch data finished with success.                         | Specification                                                                                                                 |
+|:--------------------------------------------------------------------------------------:|-------------------------------------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "action_finished"
"item_name": "fetch_pull_requests_data"
"success": true
}
 |
+
+|                         When fetch data finished with failure.                         | Specification                                                                                                                  |
+|:--------------------------------------------------------------------------------------:|--------------------------------------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "action_finished"
"item_name": "fetch_pull_requests_data"
"success": false
}
 |
+
+|                           When user clicks on pull request item.                           | Specification                                                                        |
+|:------------------------------------------------------------------------------------------:|--------------------------------------------------------------------------------------|
+|  | 
{
"name": "item_click"
"item_name": "pull_request"
}
 |
+
+|                           When pull requests screen opened.                            | Specification                                                                                   |
+|:--------------------------------------------------------------------------------------:|-------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "screen_opened"
"item_name": "pull_requests_screen"
}
 |
diff --git a/docs/screens/reviewers_screen.md b/docs/screens/reviewers_screen.md
new file mode 100644
index 00000000..251efe3e
--- /dev/null
+++ b/docs/screens/reviewers_screen.md
@@ -0,0 +1,41 @@
+# Reviewers Screen
+
+
+
+## Documentation
+
+|                         When user clicks notify.                         | Specification                                                                    |
+|:------------------------------------------------------------------------:|----------------------------------------------------------------------------------|
+| ![Click notify](../analytics_imgs/reviewers/when_user_clicks_notify.png) | 
{
"name": "button_click"
"item_name": "notify"
}
 |
+
+|            After user clicks notify, action finished with success.            | Specification                                                                                               |
+|:-----------------------------------------------------------------------------:|-------------------------------------------------------------------------------------------------------------|
+| ![Success after notify](../analytics_imgs/reviewers/after_notify_success.png) | 
{
"name": "action_finished"
"item_name": "notify"
"success": true
}
 |
+
+|           After user clicks notify, action finished with error.           | Specification                                                                                                |
+|:-------------------------------------------------------------------------:|--------------------------------------------------------------------------------------------------------------|
+| ![Error after notify](../analytics_imgs/reviewers/after_notify_error.png) | 
{
"name": "action_finished"
"item_name": "notify"
"success": false
}
 |
+
+|                           When user pulls to refresh.                            | Specification                                                                                    |
+|:--------------------------------------------------------------------------------:|--------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "action_start"
"item_name": "refresh_reviewers_data"
}
 |
+
+|                       When refresh data finished with success.                        | Specification                                                                                                               |
+|:-------------------------------------------------------------------------------------:|-----------------------------------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "action_finished"
"item_name": "refresh_reviewers_data"
"success": true
}
 |
+
+|                       When refresh data finished with error.                        | Specification                                                                                                                |
+|:-----------------------------------------------------------------------------------:|------------------------------------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "action_finished"
"item_name": "refresh_reviewers_data"
"success": false
}
 |
+
+|                         When user opens reviewers screen.                         | Specification                                                                                  |
+|:---------------------------------------------------------------------------------:|------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "action_start"
"item_name": "fetch_reviewers_data"
}
 |
+
+|                       When fetch data finished with success.                        | Specification                                                                                                             |
+|:-----------------------------------------------------------------------------------:|---------------------------------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "action_finished"
"item_name": "fetch_reviewers_data"
"success": true
}
 |
+
+|                       When fetch data finished with error.                        | Specification                                                                                                              |
+|:---------------------------------------------------------------------------------:|----------------------------------------------------------------------------------------------------------------------------|
+|  | 
{
"name": "action_finished"
"item_name": "fetch_reviewers_data"
"success": false
}
 |