-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
[Feat/#45] 온보딩 개발
- Loading branch information
Showing
35 changed files
with
914 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
<plist version="1.0"> | ||
<dict> | ||
<key>com.apple.developer.applesignin</key> | ||
<array> | ||
<string>Default</string> | ||
</array> | ||
</dict> | ||
</plist> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 12 additions & 0 deletions
12
Targets/D3N/Resources/Assets.xcassets/Logo.imageset/Contents.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
{ | ||
"images" : [ | ||
{ | ||
"filename" : "1024.png", | ||
"idiom" : "universal" | ||
} | ||
], | ||
"info" : { | ||
"author" : "xcode", | ||
"version" : 1 | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
// | ||
// AuthClient.swift | ||
// D3N | ||
// | ||
// Created by 송영모 on 11/3/23. | ||
// Copyright © 2023 sju. All rights reserved. | ||
// | ||
|
||
import Foundation | ||
|
||
import ComposableArchitecture | ||
import Moya | ||
|
||
struct AuthClient { | ||
var appleLogin: (_ code: String, _ idToken: String) async -> Result<AuthEntity, D3NAPIError> | ||
var appleUnlink: () async -> Result<AuthEntity, Error> | ||
var refresh: () async -> Result<AuthEntity, Error> | ||
var userOnboard: (_ nickname: String, _ gender: Gender, _ birthYear: Int, _ categoryList: [NewsField]) async -> Result<UserEntity, D3NAPIError> | ||
} | ||
|
||
extension AuthClient: TestDependencyKey { | ||
static let previewValue = Self( | ||
appleLogin: { code, idToken in | ||
return .success(.init(accessToken: "", refreshToken: "")) | ||
}, | ||
appleUnlink: { .init(.success(.init(accessToken: "", refreshToken: ""))) }, | ||
refresh: { .init(.success(.init(accessToken: "", refreshToken: ""))) }, | ||
userOnboard: { nickname, gender, birthYear, categoryList in .failure(.none) } | ||
) | ||
|
||
static let testValue = Self( | ||
appleLogin: unimplemented("\(Self.self).appleLogin"), | ||
appleUnlink: unimplemented("\(Self.self).appleUnlink"), | ||
refresh: unimplemented("\(Self.self).refresh"), | ||
userOnboard: unimplemented("\(Self.self).userOnboard") | ||
) | ||
} | ||
|
||
extension DependencyValues { | ||
var authClient: AuthClient { | ||
get { self[AuthClient.self] } | ||
set { self[AuthClient.self] = newValue } | ||
} | ||
} | ||
|
||
// MARK: - Live API implementation | ||
|
||
extension AuthClient: DependencyKey { | ||
static let liveValue = AuthClient( | ||
appleLogin: { code, idToken in | ||
let target: TargetType = AuthService.appleLogin(code: code, idToken: idToken) | ||
let response: Result<AppleLoginResponseDTO, D3NAPIError> = await D3NAPIkProvider.reqeust(target: target) | ||
return response.map { $0.toEntity() } | ||
}, | ||
appleUnlink: { | ||
return .success(.init(accessToken: "", refreshToken: "")) | ||
|
||
}, | ||
refresh: { | ||
return .success(.init(accessToken: "", refreshToken: "")) | ||
}, | ||
userOnboard: { nickname, gender, birthYear, categoryList in | ||
let target: TargetType = AuthService.userOnboard(nickname: nickname, gender: gender, birthYear: birthYear, categoryList: categoryList) | ||
let response: Result<UserOnboardResponseDTO, D3NAPIError> = await D3NAPIkProvider.reqeust(target: target) | ||
return response.map { $0.toEntity() } | ||
} | ||
) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
// | ||
// AuthService.swift | ||
// D3N | ||
// | ||
// Created by 송영모 on 11/3/23. | ||
// Copyright © 2023 sju. All rights reserved. | ||
// | ||
|
||
import Foundation | ||
import Moya | ||
|
||
public enum AuthService { | ||
case appleLogin(code: String, idToken: String) | ||
case appleUnlink | ||
case refresh | ||
case userOnboard(nickname: String, gender: Gender, birthYear: Int, categoryList: [NewsField]) | ||
} | ||
|
||
extension AuthService: TargetType { | ||
public var baseURL: URL { URL(string: Environment.baseURL)! } | ||
|
||
public var path: String { | ||
switch self { | ||
case .appleLogin: return "auth/apple/login" | ||
case .appleUnlink: return "auth/apple/unlink" | ||
case .refresh: return "auth/refresh" | ||
case .userOnboard: return "user/onboard" | ||
} | ||
} | ||
public var method: Moya.Method { | ||
switch self { | ||
case .appleLogin: return .post | ||
case .appleUnlink: return .delete | ||
case .refresh: return .get | ||
case .userOnboard: return .post | ||
} | ||
} | ||
public var task: Task { | ||
switch self { | ||
case let .appleLogin(code: code, idToken: idToken): | ||
return .requestJSONEncodable(AppleLoginRequestDTO(code: code, idToken: idToken)) | ||
case .appleUnlink: | ||
return .requestPlain | ||
case .refresh: | ||
return .requestPlain | ||
case let .userOnboard(nickname: nickname, gender: gender, birthYear: birthYear, categoryList: categoryList): | ||
return .requestJSONEncodable(UserOnboardRequestDTO(nickname: nickname, gender: gender, birthYear: birthYear, categoryList: categoryList)) | ||
} | ||
} | ||
|
||
public var headers: [String: String]? { | ||
return ["Authorization": "Bearer \(LocalStorageManager.load(.accessToken))"] | ||
} | ||
} |
18 changes: 18 additions & 0 deletions
18
Targets/D3N/Sources/Domain/Auth/DTO/AppleLoginRequestDTO.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// | ||
// AppleLoginRequestDTO.swift | ||
// D3N | ||
// | ||
// Created by 송영모 on 11/3/23. | ||
// Copyright © 2023 sju. All rights reserved. | ||
// | ||
|
||
import Foundation | ||
|
||
struct AppleLoginRequestDTO: Codable { | ||
let code, idToken: String | ||
|
||
enum CodingKeys: String, CodingKey { | ||
case code | ||
case idToken = "id_token" | ||
} | ||
} |
28 changes: 28 additions & 0 deletions
28
Targets/D3N/Sources/Domain/Auth/DTO/AppleLoginResponseDTO.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
// | ||
// AuthResponseDTO.swift | ||
// D3N | ||
// | ||
// Created by 송영모 on 11/3/23. | ||
// Copyright © 2023 sju. All rights reserved. | ||
// | ||
|
||
import Foundation | ||
|
||
struct AppleLoginResponseDTO: Codable { | ||
let appToken: String | ||
let refreshToken: String | ||
} | ||
|
||
extension AppleLoginResponseDTO { | ||
func toEntity(isShouldSaveAtLocalStorage: Bool = true) -> AuthEntity { | ||
if isShouldSaveAtLocalStorage { | ||
LocalStorageManager.save(.accessToken, value: self.appToken) | ||
LocalStorageManager.save(.refreshToken, value: self.refreshToken) | ||
} | ||
|
||
return .init( | ||
accessToken: self.appToken, | ||
refreshToken: self.refreshToken | ||
) | ||
} | ||
} |
16 changes: 16 additions & 0 deletions
16
Targets/D3N/Sources/Domain/Auth/DTO/UserOnboardRequestDTO.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// | ||
// UserOnboardRequestDTO.swift | ||
// D3N | ||
// | ||
// Created by 송영모 on 11/4/23. | ||
// Copyright © 2023 sju. All rights reserved. | ||
// | ||
|
||
import Foundation | ||
|
||
struct UserOnboardRequestDTO: Codable { | ||
let nickname: String | ||
let gender: Gender | ||
let birthYear: Int | ||
let categoryList: [NewsField] | ||
} |
45 changes: 45 additions & 0 deletions
45
Targets/D3N/Sources/Domain/Auth/DTO/UserOnboardResponseDTO.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
// | ||
// UserOnboardResponseDTO.swift | ||
// D3N | ||
// | ||
// Created by 송영모 on 11/4/23. | ||
// Copyright © 2023 sju. All rights reserved. | ||
// | ||
|
||
import Foundation | ||
|
||
import Foundation | ||
|
||
struct UserOnboardResponseDTO: Codable { | ||
let createdAt, modifiedAt, id, nickname: String | ||
let gender: Gender | ||
let birthYear: Int | ||
let categoryList: [NewsField] | ||
let scrapList: [Int] | ||
let appleRefreshToken, refreshToken, memberProvider, roleType: String | ||
let solvedQuizList: [UserOnboardResponseSolvedQuizDTO] | ||
} | ||
|
||
extension UserOnboardResponseDTO { | ||
func toEntity() -> UserEntity { | ||
return .init( | ||
nickname: self.nickname, | ||
gender: self.gender, | ||
birthYear: self.birthYear, | ||
categoryList: self.categoryList) | ||
} | ||
} | ||
|
||
internal struct UserOnboardResponseSolvedQuizDTO: Codable { | ||
let createdAt, modifiedAt: String | ||
let id: Int | ||
let user: String | ||
let quizID, selectedAnswer, quizAnswer: Int | ||
let quizResult: Bool | ||
|
||
enum CodingKeys: String, CodingKey { | ||
case createdAt, modifiedAt, id, user | ||
case quizID = "quizId" | ||
case selectedAnswer, quizAnswer, quizResult | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
// | ||
// AuthEntity.swift | ||
// D3N | ||
// | ||
// Created by 송영모 on 11/3/23. | ||
// Copyright © 2023 sju. All rights reserved. | ||
// | ||
|
||
import Foundation | ||
|
||
public struct AuthEntity: Codable, Equatable { | ||
let accessToken: String | ||
let refreshToken: String | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// | ||
// UserEntity.swift | ||
// D3N | ||
// | ||
// Created by 송영모 on 11/4/23. | ||
// Copyright © 2023 sju. All rights reserved. | ||
// | ||
|
||
import Foundation | ||
|
||
struct UserEntity: Codable { | ||
let nickname: String | ||
let gender: Gender | ||
let birthYear: Int | ||
let categoryList: [NewsField] | ||
} |
Oops, something went wrong.