Skip to content

Commit

Permalink
Update continue course pressed analytics event (#985)
Browse files Browse the repository at this point in the history
* Update Continue course pressed event
  • Loading branch information
ivan-magda authored Jun 2, 2021
1 parent bf7b0ae commit 3169536
Show file tree
Hide file tree
Showing 26 changed files with 142 additions and 40 deletions.
13 changes: 10 additions & 3 deletions Stepic/Legacy/Analytics/Events/AmplitudeAnalyticsEvents.swift
Original file line number Diff line number Diff line change
Expand Up @@ -99,13 +99,19 @@ extension AnalyticsEvent {
)
}

static func courseContinuePressed(source: CourseContinueSource, id: Int, title: String) -> AmplitudeAnalyticsEvent {
static func courseContinuePressed(
id: Int,
title: String,
source: CourseContinueSource,
viewSource: CourseViewSource
) -> AmplitudeAnalyticsEvent {
AmplitudeAnalyticsEvent(
name: "Continue course pressed",
parameters: [
"source": source.rawValue,
"course": id,
"title": title
"title": title,
"source": source.rawValue,
"view_source": viewSource.name
]
)
}
Expand All @@ -115,6 +121,7 @@ extension AnalyticsEvent {
case homeWidget = "home_widget"
case courseScreen = "course_screen"
case homeScreenWidget = "ios_home_screen_widget"
case applicationShortcut = "ios_application_shortcut"
}

static func courseBuyPressed(source: CourseBuySource, id: Int) -> AmplitudeAnalyticsEvent {
Expand Down
18 changes: 14 additions & 4 deletions Stepic/Legacy/TransitionRouters/LastStepRouter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,19 @@ final class LastStepRouter {
didJustSubscribe: Bool = false,
using navigationController: UINavigationController,
skipSyllabus: Bool = false,
courseViewSource: AnalyticsEvent.CourseViewSource,
source: AnalyticsEvent.CourseContinueSource,
viewSource: AnalyticsEvent.CourseViewSource,
lessonModuleOutput: LessonOutputProtocol? = nil
) {
StepikAnalytics.shared.send(
.courseContinuePressed(
id: course.id,
title: course.title,
source: source,
viewSource: viewSource
)
)

if skipSyllabus == true && lessonModuleOutput == nil {
assert(false, "You need to provide LessonOutputProtocol when skipping syllabus!")
}
Expand All @@ -33,7 +43,7 @@ final class LastStepRouter {
return self.fallbackToCourseInfo(
courseID: course.id,
initialTab: .info,
courseViewSource: courseViewSource,
courseViewSource: viewSource,
navigationController: navigationController
)
}
Expand All @@ -42,7 +52,7 @@ final class LastStepRouter {
let lastStepID = course.lastStepId else {
return self.fallbackToSyllabus(
courseID: course.id,
courseViewSource: courseViewSource,
courseViewSource: viewSource,
navigationController: navigationController
)
}
Expand All @@ -66,7 +76,7 @@ final class LastStepRouter {
didJustSubscribe: didJustSubscribe,
using: navigationController,
skipSyllabus: skipSyllabus,
courseViewSource: courseViewSource,
courseViewSource: viewSource,
lessonModuleOutput: lessonModuleOutput
)
}.catch { error in
Expand Down
2 changes: 2 additions & 0 deletions Stepic/Sources/Modules/BaseExplore/BaseExploreDataFlow.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ enum BaseExplore {
struct Response {
let course: Course
let isAdaptive: Bool
let courseContinueSource: AnalyticsEvent.CourseContinueSource
let courseViewSource: AnalyticsEvent.CourseViewSource
}

Expand All @@ -60,6 +61,7 @@ enum BaseExplore {
let course: Course
@available(*, deprecated, message: "Target modules can't be initialized w/o model")
let isAdaptive: Bool
let courseContinueSource: AnalyticsEvent.CourseContinueSource
let courseViewSource: AnalyticsEvent.CourseViewSource
}
}
Expand Down
14 changes: 12 additions & 2 deletions Stepic/Sources/Modules/BaseExplore/BaseExploreInteractor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,19 @@ class BaseExploreInteractor: BaseExploreInteractorProtocol, CourseListOutputProt
self.presenter.presentCourseSyllabus(response: .init(course: course, courseViewSource: viewSource))
}

func presentLastStep(course: Course, isAdaptive: Bool, viewSource: AnalyticsEvent.CourseViewSource) {
func presentLastStep(
course: Course,
isAdaptive: Bool,
source: AnalyticsEvent.CourseContinueSource,
viewSource: AnalyticsEvent.CourseViewSource
) {
self.presenter.presentLastStep(
response: .init(course: course, isAdaptive: isAdaptive, courseViewSource: viewSource)
response: .init(
course: course,
isAdaptive: isAdaptive,
courseContinueSource: source,
courseViewSource: viewSource
)
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ class BaseExplorePresenter: BaseExplorePresenterProtocol {
viewModel: .init(
course: response.course,
isAdaptive: response.isAdaptive,
courseContinueSource: response.courseContinueSource,
courseViewSource: response.courseViewSource
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,8 @@ extension BaseExploreViewController: BaseExploreViewControllerProtocol {
for: viewModel.course,
isAdaptive: viewModel.isAdaptive,
using: navigationController,
courseViewSource: viewModel.courseViewSource
source: viewModel.courseContinueSource,
viewSource: viewModel.courseViewSource
)
}

Expand Down
2 changes: 2 additions & 0 deletions Stepic/Sources/Modules/CourseInfo/CourseInfoDataFlow.swift
Original file line number Diff line number Diff line change
Expand Up @@ -116,13 +116,15 @@ enum CourseInfo {
struct Response {
let course: Course
let isAdaptive: Bool
let courseViewSource: AnalyticsEvent.CourseViewSource
}

struct ViewModel {
@available(*, deprecated, message: "Target modules can't be initialized w/o model")
let course: Course
@available(*, deprecated, message: "Target modules can't be initialized w/o model")
let isAdaptive: Bool
let courseViewSource: AnalyticsEvent.CourseViewSource
}
}

Expand Down
6 changes: 4 additions & 2 deletions Stepic/Sources/Modules/CourseInfo/CourseInfoInteractor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,8 @@ final class CourseInfoInteractor: CourseInfoInteractorProtocol {
course: course,
isAdaptive: self.adaptiveStorageManager.canOpenInAdaptiveMode(
courseId: course.id
)
),
courseViewSource: self.courseViewSource
)
)
} else {
Expand Down Expand Up @@ -286,7 +287,8 @@ final class CourseInfoInteractor: CourseInfoInteractorProtocol {
course: course,
isAdaptive: self.adaptiveStorageManager.canOpenInAdaptiveMode(
courseId: course.id
)
),
courseViewSource: self.courseViewSource
)
)
}.ensure {
Expand Down
3 changes: 2 additions & 1 deletion Stepic/Sources/Modules/CourseInfo/CourseInfoPresenter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ final class CourseInfoPresenter: CourseInfoPresenterProtocol {
self.viewController?.displayLastStep(
viewModel: .init(
course: response.course,
isAdaptive: response.isAdaptive
isAdaptive: response.isAdaptive,
courseViewSource: response.courseViewSource
)
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -558,7 +558,8 @@ extension CourseInfoViewController: CourseInfoViewControllerProtocol {
isAdaptive: viewModel.isAdaptive,
using: navigationController,
skipSyllabus: true,
courseViewSource: .unknown,
source: .courseScreen,
viewSource: viewModel.courseViewSource,
lessonModuleOutput: self.interactor as? LessonOutputProtocol
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@ import Foundation
protocol CourseListOutputProtocol: AnyObject {
func presentCourseInfo(course: Course, viewSource: AnalyticsEvent.CourseViewSource)
func presentCourseSyllabus(course: Course, viewSource: AnalyticsEvent.CourseViewSource)
func presentLastStep(course: Course, isAdaptive: Bool, viewSource: AnalyticsEvent.CourseViewSource)
func presentLastStep(
course: Course,
isAdaptive: Bool,
source: AnalyticsEvent.CourseContinueSource,
viewSource: AnalyticsEvent.CourseViewSource
)
func presentAuthorization()
func presentPaidCourseInfo(course: Course)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,7 @@ final class CourseListInteractor: CourseListInteractorProtocol {
isAdaptive: self.adaptiveStorageManager.canOpenInAdaptiveMode(
courseId: targetCourse.id
),
source: .courseWidget,
viewSource: self.courseViewSource
)
} else {
Expand All @@ -225,14 +226,13 @@ final class CourseListInteractor: CourseListInteractorProtocol {
self.courseSubscriber.join(course: targetCourse, source: .widget).done { course in
self.currentCourses[targetIndex].1 = course

self.analytics.send(.courseContinuePressed(source: .courseWidget, id: course.id, title: course.title))

self.presenter.presentWaitingState(response: .init(shouldDismiss: true))
self.moduleOutput?.presentLastStep(
course: targetCourse,
isAdaptive: self.adaptiveStorageManager.canOpenInAdaptiveMode(
courseId: targetCourse.id
),
source: .courseWidget,
viewSource: self.courseViewSource
)
}.catch { _ in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,18 @@ extension CatalogBlocksInteractor: CourseListOutputProtocol {
self.moduleOutput?.presentCourseSyllabus(course: course, viewSource: viewSource)
}

func presentLastStep(course: Course, isAdaptive: Bool, viewSource: AnalyticsEvent.CourseViewSource) {
self.moduleOutput?.presentLastStep(course: course, isAdaptive: isAdaptive, viewSource: viewSource)
func presentLastStep(
course: Course,
isAdaptive: Bool,
source: AnalyticsEvent.CourseContinueSource,
viewSource: AnalyticsEvent.CourseViewSource
) {
self.moduleOutput?.presentLastStep(
course: course,
isAdaptive: isAdaptive,
source: source,
viewSource: viewSource
)
}

func presentAuthorization() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,14 @@ final class ContinueCourseInteractor: ContinueCourseInteractorProtocol {
return
}

self.analytics.send(
.courseContinuePressed(source: .homeWidget, id: currentCourse.id, title: currentCourse.title)
)

let isAdaptive = self.adaptiveStorageManager.canOpenInAdaptiveMode(courseId: currentCourse.id)
self.moduleOutput?.presentLastStep(course: currentCourse, isAdaptive: isAdaptive, viewSource: .fastContinue)

self.moduleOutput?.presentLastStep(
course: currentCourse,
isAdaptive: isAdaptive,
source: .homeWidget,
viewSource: .fastContinue
)
}

func doTooltipAvailabilityCheck(request: ContinueCourse.TooltipAvailabilityCheck.Request) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,10 @@ import Foundation

protocol ContinueCourseOutputProtocol: AnyObject {
func hideContinueCourse()
func presentLastStep(course: Course, isAdaptive: Bool, viewSource: AnalyticsEvent.CourseViewSource)
func presentLastStep(
course: Course,
isAdaptive: Bool,
source: AnalyticsEvent.CourseContinueSource,
viewSource: AnalyticsEvent.CourseViewSource
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,18 @@ extension CourseListsCollectionInteractor: CourseListOutputProtocol {
self.moduleOutput?.presentCourseSyllabus(course: course, viewSource: viewSource)
}

func presentLastStep(course: Course, isAdaptive: Bool, viewSource: AnalyticsEvent.CourseViewSource) {
self.moduleOutput?.presentLastStep(course: course, isAdaptive: isAdaptive, viewSource: viewSource)
func presentLastStep(
course: Course,
isAdaptive: Bool,
source: AnalyticsEvent.CourseContinueSource,
viewSource: AnalyticsEvent.CourseViewSource
) {
self.moduleOutput?.presentLastStep(
course: course,
isAdaptive: isAdaptive,
source: source,
viewSource: viewSource
)
}

func presentAuthorization() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ enum FullscreenCourseList {
struct Response {
let course: Course
let isAdaptive: Bool
let courseContinueSource: AnalyticsEvent.CourseContinueSource
let courseViewSource: AnalyticsEvent.CourseViewSource
}

Expand All @@ -42,6 +43,7 @@ enum FullscreenCourseList {
let course: Course
@available(*, deprecated, message: "Target modules can't be initialized w/o model")
let isAdaptive: Bool
let courseContinueSource: AnalyticsEvent.CourseContinueSource
let courseViewSource: AnalyticsEvent.CourseViewSource
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,19 @@ final class FullscreenCourseListInteractor: FullscreenCourseListInteractorProtoc
self.presenter.presentCourseSyllabus(response: .init(course: course, courseViewSource: viewSource))
}

func presentLastStep(course: Course, isAdaptive: Bool, viewSource: AnalyticsEvent.CourseViewSource) {
func presentLastStep(
course: Course,
isAdaptive: Bool,
source: AnalyticsEvent.CourseContinueSource,
viewSource: AnalyticsEvent.CourseViewSource
) {
self.presenter.presentLastStep(
response: .init(course: course, isAdaptive: isAdaptive, courseViewSource: viewSource)
response: .init(
course: course,
isAdaptive: isAdaptive,
courseContinueSource: source,
courseViewSource: viewSource
)
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ final class FullscreenCourseListPresenter: FullscreenCourseListPresenterProtocol
viewModel: .init(
course: response.course,
isAdaptive: response.isAdaptive,
courseContinueSource: response.courseContinueSource,
courseViewSource: response.courseViewSource
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,8 @@ extension FullscreenCourseListViewController: FullscreenCourseListViewController
for: viewModel.course,
isAdaptive: viewModel.isAdaptive,
using: navigationController,
courseViewSource: viewModel.courseViewSource
source: viewModel.courseContinueSource,
viewSource: viewModel.courseViewSource
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ enum NewProfileCreatedCourses {
struct Response {
let course: Course
let isAdaptive: Bool
let courseContinueSource: AnalyticsEvent.CourseContinueSource
let courseViewSource: AnalyticsEvent.CourseViewSource
}

Expand All @@ -60,6 +61,7 @@ enum NewProfileCreatedCourses {
let course: Course
@available(*, deprecated, message: "Target modules can't be initialized w/o model")
let isAdaptive: Bool
let courseContinueSource: AnalyticsEvent.CourseContinueSource
let courseViewSource: AnalyticsEvent.CourseViewSource
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,19 @@ extension NewProfileCreatedCoursesInteractor: CourseListOutputProtocol {
self.presenter.presentCourseSyllabus(response: .init(course: course, courseViewSource: viewSource))
}

func presentLastStep(course: Course, isAdaptive: Bool, viewSource: AnalyticsEvent.CourseViewSource) {
func presentLastStep(
course: Course,
isAdaptive: Bool,
source: AnalyticsEvent.CourseContinueSource,
viewSource: AnalyticsEvent.CourseViewSource
) {
self.presenter.presentLastStep(
response: .init(course: course, isAdaptive: isAdaptive, courseViewSource: viewSource)
response: .init(
course: course,
isAdaptive: isAdaptive,
courseContinueSource: source,
courseViewSource: viewSource
)
)
}

Expand Down
Loading

0 comments on commit 3169536

Please sign in to comment.