Skip to content
Open
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,9 @@ public extension TargetDependency.Projcet {
target: "Data",
path: .relativeToRoot("Projects/Data")
)

static let SWMLogging = TargetDependency.project(
target: "SWMLogging",
path: .relativeToRoot("Projects/SWMLogging")
)
}
7 changes: 5 additions & 2 deletions Projects/App/Sources/DI/DomainAssembly.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,12 @@

import Domain
import Swinject
import SWMLogging

public struct DomainAssembly: Assembly {

let logger: SWMLogger

public func assemble(container: Container) {
// ------------------------ Common ------------------------
container.register(ExampleUseCase.self) { resolver in
Expand All @@ -34,7 +37,7 @@ public struct DomainAssembly: Assembly {
// ------------------------ First Tab ------------------------
container.register(LearningHomeUseCase.self) { resolver in
let repository = resolver.resolve(ProblemRepository.self)!
return DefaultLearningHomeUseCase(repository: repository)
return DefaultLearningHomeUseCase(repository: repository, logger: logger)
}
container.register(ProblemDetailUseCase.self) { resolver in
let repository = resolver.resolve(ProblemRepository.self)!
Expand All @@ -46,7 +49,7 @@ public struct DomainAssembly: Assembly {
}
container.register(SolvingProblemListUseCase.self) { resolver in
let repository = resolver.resolve(ProblemRepository.self)!
return DefaultSolvingProblemListUseCase(repository: repository)
return DefaultSolvingProblemListUseCase(repository: repository, logger: logger)
}
container.register(FavoriteProblemListUseCase.self) { resolver in
let repository = resolver.resolve(ProblemRepository.self)!
Expand Down
4 changes: 3 additions & 1 deletion Projects/App/Sources/DI/PresentationAssembly.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@
import Swinject
import Domain
import Presentation
import SWMLogging

public struct PresentationAssembly: Assembly {

let coordinator: Coordinator
let toastHelper: ToastHelper
let logger: SWMLogger

public func assemble(container: Container) {
// ------------------------ Common ------------------------
Expand Down Expand Up @@ -79,7 +81,7 @@ public struct PresentationAssembly: Assembly {
// SolvingProblemList
container.register(SolvingProblemListViewModel.self) { resolver in
let useCase = resolver.resolve(SolvingProblemListUseCase.self)!
return SolvingProblemListViewModel(useCase: useCase, coordinator: coordinator, toastHelper: toastHelper)
return SolvingProblemListViewModel(useCase: useCase, coordinator: coordinator, toastHelper: toastHelper, logger: logger)
}

container.register(SolvingProblemListView.self) { resolver in
Expand Down
8 changes: 6 additions & 2 deletions Projects/App/Sources/LitoApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Presentation
import Domain
import Swinject
import KakaoSDKCommon
import SWMLogging

@main
struct LitoApp: App {
Expand All @@ -19,11 +20,14 @@ struct LitoApp: App {
injector = DependencyInjector(container: Container())
toastHelper = ToastHelper()
coordinator = Coordinator(.loginScene)
injector.assemble([DomainAssembly(),
// TODO: 우리 서버 API에 맞게 주소 변경 필요
let logger = SWMLogger(serverUrl: "https://dev.swm-lgtm.com", serverPath: "/v1/log", OSNameAndVersion: "iOS 16", appVersion: "1.0")
injector.assemble([DomainAssembly(logger: logger),
DataAssembly(),
PresentationAssembly(
coordinator: coordinator,
toastHelper: toastHelper
toastHelper: toastHelper,
logger: logger
)])
coordinator.injector = injector
if KeyChainManager.isPossibleAutoLogin {
Expand Down
1 change: 1 addition & 0 deletions Projects/Domain/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ let project = Project.makeModule(
platform: .iOS,
product: .staticFramework,
dependencies: [
.Projcet.SWMLogging
]
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
//
// ProblemClickedScheme.swift
// Domain
//
// Created by 김동락 on 2023/10/11.
// Copyright © 2023 com.lito. All rights reserved.
//

import Foundation
import SWMLogging

public struct LearningHomeRecommendedProblemClickedScheme: ClickScheme {

public var eventLogName = "LearningHomeRecommendedProblemClicked"
public var screenName = "LearningHome"
public var logVersion = 1
public var logData: [String: AnyEncodable] = [:]

// 학습목표, 학습퍼센트, 풀던문제 존재 여부, 문제 id, 문제 카테고리, 문제 질문, 찜여부
public init(learningGoal: Int?, learningPercent: Float?, isSolvingProblemExist: Bool?, problemId: Int?, problemCategory: String?, problemQuestion: String?, problemFavorite: Bool?) {
if let learningGoal = learningGoal { self.logData["learningGoal"] = .int(learningGoal)}
if let learningPercent = learningPercent { self.logData["learningPercent"] = .float(learningPercent)}
if let isSolvingProblemExist = isSolvingProblemExist { self.logData["isSolvingProblemExist"] = .bool(isSolvingProblemExist)}
if let problemId = problemId { self.logData["problemId"] = .int(problemId)}
if let problemCategory = problemCategory { self.logData["problemCategory"] = .string(problemCategory)}
if let problemQuestion = problemQuestion { self.logData["problemQuestion"] = .string(problemQuestion)}
if let problemFavorite = problemFavorite { self.logData["problemFavorite"] = .bool(problemFavorite)}
}

public class Builder {
var learningGoal: Int?
var learningPercent: Float?
var isSolvingProblemExist: Bool?
var problemId: Int?
var problemCategory: String?
var problemQuestion: String?
var problemFavorite: Bool?

public init() { }

public func setLearningGoal(_ learningGoal: Int) -> Builder {
self.learningGoal = learningGoal
return self
}
public func setLearningPercent(_ learningPercent: Float) -> Builder {
self.learningPercent = learningPercent
return self
}
public func setIsSolvingProblemExist(_ isSolvingProblemExist: Bool) -> Builder {
self.isSolvingProblemExist = isSolvingProblemExist
return self
}
public func setProblemId(_ problemId: Int) -> Builder {
self.problemId = problemId
return self
}
public func setProblemCategory(_ problemCategory: String) -> Builder {
self.problemCategory = problemCategory
return self
}
public func setProblemQuestion(_ problemQuestion: String) -> Builder {
self.problemQuestion = problemQuestion
return self
}
public func setProblemFavorite(_ problemFavorite: Bool) -> Builder {
self.problemFavorite = problemFavorite
return self
}
public func build() -> SWMLoggingScheme {
return LearningHomeRecommendedProblemClickedScheme(learningGoal: learningGoal, learningPercent: learningPercent, isSolvingProblemExist: isSolvingProblemExist, problemId: problemId, problemCategory: problemCategory, problemQuestion: problemQuestion, problemFavorite: problemFavorite)
}

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
//
// LearningHomeSolvingProblemClickedScheme.swift
// Domain
//
// Created by 김동락 on 2023/10/11.
// Copyright © 2023 com.lito. All rights reserved.
//

import Foundation
import SWMLogging

public struct LearningHomeSolvingProblemClickedScheme: ClickScheme {

public var eventLogName = "LearningHomeSolvingProblemClicked"
public var screenName = "LearningHome"
public var logVersion = 1
public var logData: [String: AnyEncodable] = [:]

// 학습목표, 학습퍼센트, 추천문제 개수, 추천문제 풀이한 개수, 문제 id, 문제 카테고리, 문제 질문, 찜여부
public init(learningGoal: Int?, learningPercent: Float?, recommendedProblemsCount: Int?, recommendedProblemsSolvedCount: Int?, problemId: Int?, problemCategory: String?, problemQuestion: String?, problemFavorite: Bool?) {
if let learningGoal = learningGoal { self.logData["learningGoal"] = .int(learningGoal)}
if let learningPercent = learningPercent { self.logData["learningPercent"] = .float(learningPercent)}
if let recommendedProblemsCount = recommendedProblemsCount { self.logData["recommendedProblemsCount"] = .int(recommendedProblemsCount)}
if let recommendedProblemsSolvedCount = recommendedProblemsSolvedCount { self.logData["recommendedProblemsSolvedCount"] = .int(recommendedProblemsSolvedCount)}
if let problemId = problemId { self.logData["problemId"] = .int(problemId)}
if let problemCategory = problemCategory { self.logData["problemCategory"] = .string(problemCategory)}
if let problemQuestion = problemQuestion { self.logData["problemQuestion"] = .string(problemQuestion)}
if let problemFavorite = problemFavorite { self.logData["problemFavorite"] = .bool(problemFavorite)}
}

public class Builder {
var learningGoal: Int?
var learningPercent: Float?
var recommendedProblemsCount: Int?
var recommendedProblemsSolvedCount: Int?
var problemId: Int?
var problemCategory: String?
var problemQuestion: String?
var problemFavorite: Bool?

public init() { }

public func setLearningGoal(_ learningGoal: Int) -> Builder {
self.learningGoal = learningGoal
return self
}
public func setLearningPercent(_ learningPercent: Float) -> Builder {
self.learningPercent = learningPercent
return self
}
public func setRecommendedProblemsCount(_ recommendedProblemsCount: Int) -> Builder {
self.recommendedProblemsCount = recommendedProblemsCount
return self
}
public func setrecommendedProblemsSolvedCount(_ recommendedProblemsSolvedCount: Int) -> Builder {
self.recommendedProblemsSolvedCount = recommendedProblemsSolvedCount
return self
}
public func setProblemId(_ problemId: Int) -> Builder {
self.problemId = problemId
return self
}
public func setProblemCategory(_ problemCategory: String) -> Builder {
self.problemCategory = problemCategory
return self
}
public func setProblemQuestion(_ problemQuestion: String) -> Builder {
self.problemQuestion = problemQuestion
return self
}
public func setProblemFavorite(_ problemFavorite: Bool) -> Builder {
self.problemFavorite = problemFavorite
return self
}
public func build() -> SWMLoggingScheme {
return LearningHomeSolvingProblemClickedScheme(learningGoal: learningGoal, learningPercent: learningPercent, recommendedProblemsCount: recommendedProblemsCount, recommendedProblemsSolvedCount: recommendedProblemsSolvedCount, problemId: problemId, problemCategory: problemCategory, problemQuestion: problemQuestion, problemFavorite: problemFavorite)
}

}

}

57 changes: 57 additions & 0 deletions Projects/Domain/Sources/Logging/OrderClickedScheme.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
//
// OrderClickedScheme.swift
// Domain
//
// Created by Lee Myeonghwan on 2023/10/02.
// Copyright © 2023 com.lito. All rights reserved.
//

import Foundation
import SWMLogging

public struct OrderClickedScheme: ClickScheme {

public var eventLogName = "missionClick"
public var screenName = "SolvingProblemListView"
public var logVersion = 1
public var logData: [String: AnyEncodable] = [:]

public init(userId: Int?, gender: String?, age: Int?) {

// logData 만들기
self.logData["userId"] = .int(userId ?? -1)
self.logData["gender"] = .string(gender ?? "")
self.logData["age"] = .int(age ?? -1)

}

public class Builder {
var userId: Int?
var gender: String?
var age: Int?

public func setGender(gender: String) -> Builder {
self.gender = gender
return self
}
public func setAge(age: Int) -> Builder {
self.age = age
return self
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

setUserId 메소드가 필요할거같네요.

public func setUserId(userId: Int) -> Builder {
self.userId = userId
return self
}

public func userId(id: Int) -> Builder {
self.userId = id
return self
}

public func build() -> SWMLoggingScheme {
return OrderClickedScheme(userId: userId, gender: gender, age: age)
}

}

}
13 changes: 12 additions & 1 deletion Projects/Domain/Sources/UseCase/LearningHomeUseCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,23 @@

import Combine
import Foundation
import SWMLogging

public protocol LearningHomeUseCase {
func getProfileAndProblems() -> AnyPublisher<LearningHomeVO, Error>
func toggleProblemFavorite(id: Int) -> AnyPublisher<Void, Error>
func setProblemGoalCount(problemGoalCount: Int)
func getProblemGoalCount() -> Int
func fireLogging(scheme: SWMLogging.SWMLoggingScheme)
}

public final class DefaultLearningHomeUseCase: LearningHomeUseCase {
private let repository: ProblemRepository
private let logger: SWMLogger

public init(repository: ProblemRepository) {
public init(repository: ProblemRepository, logger: SWMLogger) {
self.repository = repository
self.logger = logger
}

public func getProfileAndProblems() -> AnyPublisher<LearningHomeVO, Error> {
Expand All @@ -38,4 +42,11 @@ public final class DefaultLearningHomeUseCase: LearningHomeUseCase {
public func getProblemGoalCount() -> Int {
repository.getProblemGoalCount()
}
public func fireLogging(scheme: SWMLogging.SWMLoggingScheme) {
do {
try logger.shotLogging(scheme, authorization: KeyChainManager.read(key: .accessToken) ?? "")
} catch {

}
}
}
5 changes: 4 additions & 1 deletion Projects/Domain/Sources/UseCase/SovingProblemUseCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import Combine
import Foundation
import SWMLogging

public protocol SolvingProblemListUseCase {
func toggleProblemFavorite(id: Int) -> AnyPublisher<Void, Error>
Expand All @@ -16,9 +17,11 @@ public protocol SolvingProblemListUseCase {

public final class DefaultSolvingProblemListUseCase: SolvingProblemListUseCase {
private let repository: ProblemRepository
private let logger: SWMLogger

public init(repository: ProblemRepository) {
public init(repository: ProblemRepository, logger: SWMLogger) {
self.repository = repository
self.logger = logger
}

public func toggleProblemFavorite(id: Int) -> AnyPublisher<Void, Error> {
Expand Down
Loading