Skip to content

Commit 78b0919

Browse files
authored
Merge pull request #62 from YAPP-Github/TNT-213-TrainerTraineeList
[TNT-213] ํŠธ๋ ˆ์ด๋„ˆ ํšŒ์›๋ชฉ๋ก ํŽ˜์ด์ง€ ์ž‘์„ฑ
2 parents f75cf83 + b04683d commit 78b0919

File tree

12 files changed

+409
-1
lines changed

12 files changed

+409
-1
lines changed

โ€ŽTnT/Projects/DIContainer/Sources/DIContainer.swiftโ€Ž

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ private enum SocialUseCaseKey: DependencyKey {
3030
static let liveValue: SocialLoginUseCase = SocialLoginUseCase(socialLoginRepository: SocialLogInRepositoryImpl(loginManager: SNSLoginManager()))
3131
}
3232

33+
private enum TrainerUseCaseRepoKey: DependencyKey {
34+
static let liveValue: TrainerRepository = DefaultTrainerUseCase(trainerRepository: TrainerRepositoryImpl())
35+
}
36+
3337
private enum KeyChainManagerKey: DependencyKey {
3438
static let liveValue: KeyChainManager = keyChainManager
3539
}
@@ -60,4 +64,9 @@ public extension DependencyValues {
6064
get { self[SocialUseCaseKey.self] }
6165
set { self[SocialUseCaseKey.self] = newValue }
6266
}
67+
68+
var trainerRepoUseCase: TrainerRepository {
69+
get { self[TrainerUseCaseRepoKey.self] }
70+
set { self[TrainerUseCaseRepoKey.self] = newValue }
71+
}
6372
}

โ€ŽTnT/Projects/Data/Sources/Network/Service/Trainer/TrainerRepositoryImpl.swiftโ€Ž

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,11 @@ public struct TrainerRepositoryImpl: TrainerRepository {
4545
decodingType: GetDateSessionListDTO.self
4646
)
4747
}
48+
49+
public func getMembersList() async throws -> GetMembersListDTO {
50+
return try await networkService.request(
51+
TrainerTargetType.getMemebersList,
52+
decodingType: GetMembersListDTO.self
53+
)
54+
}
4855
}

โ€ŽTnT/Projects/Data/Sources/Network/Service/Trainer/TrainerTargetType.swiftโ€Ž

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public enum TrainerTargetType {
2020
case getDateLessionList(date: String)
2121
/// ํŠธ๋ ˆ์ด๋„ˆ ์ดˆ๋Œ€์ฝ”๋“œ ์žฌ๋ฐœ๊ธ‰
2222
case getReissuanceInvitationCode
23+
/// ํšŒ์› ์กฐํฌ
24+
case getMemebersList
2325
}
2426

2527
extension TrainerTargetType: TargetType {
@@ -38,6 +40,8 @@ extension TrainerTargetType: TargetType {
3840
return "/lessions/\(date)"
3941
case .getReissuanceInvitationCode:
4042
return "/invitation-code/reissue"
43+
case .getMemebersList:
44+
return "/members"
4145
}
4246
}
4347

@@ -51,6 +55,8 @@ extension TrainerTargetType: TargetType {
5155
return .get
5256
case .getReissuanceInvitationCode:
5357
return .put
58+
case .getMemebersList:
59+
return .get
5460
}
5561
}
5662

@@ -64,6 +70,8 @@ extension TrainerTargetType: TargetType {
6470
return .requestPlain
6571
case .getReissuanceInvitationCode:
6672
return .requestPlain
73+
case .getMemebersList:
74+
return .requestPlain
6775
}
6876
}
6977

@@ -77,6 +85,8 @@ extension TrainerTargetType: TargetType {
7785
return ["Content-Type": "application/json"]
7886
case .getReissuanceInvitationCode:
7987
return ["Content-Type": "application/json"]
88+
case .getMemebersList:
89+
return ["Content-Type": "application/json"]
8090
}
8191
}
8292

โ€ŽTnT/Projects/DesignSystem/Sources/Navigation/TNavigation.swiftโ€Ž

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,16 @@ public struct TNavigation: View {
6464
Rectangle()
6565
.fill(Color.clear)
6666
.frame(width: 32, height: 32)
67+
68+
case .LTextRButtonTitle(let leftTitle, let pointText, _):
69+
HStack(spacing: 6){
70+
Text(leftTitle)
71+
.typographyStyle(.heading2, with: .neutral900)
72+
if let pointText = pointText {
73+
Text(pointText)
74+
.typographyStyle(.heading2, with: .red500)
75+
} else { EmptyView() }
76+
}
6777
}
6878
}
6979

@@ -78,7 +88,7 @@ public struct TNavigation: View {
7888
Text(centerTitle)
7989
.typographyStyle(.heading4, with: .neutral900)
8090
.frame(maxWidth: .infinity, alignment: .center)
81-
case .LButton:
91+
case .LButton, .LTextRButtonTitle(_, _, _):
8292
EmptyView()
8393
}
8494
}
@@ -105,6 +115,14 @@ public struct TNavigation: View {
105115
Rectangle()
106116
.fill(Color.clear)
107117
.frame(width: 32, height: 32)
118+
119+
case .LTextRButtonTitle(_, _, let rightButton):
120+
TButton(
121+
title: rightButton,
122+
config: .small,
123+
state: .disable(.gray(isEnabled: true))) {
124+
rightAction?()
125+
}
108126
}
109127
}
110128
}
@@ -143,4 +161,6 @@ public enum TNavigationCase {
143161
case Title(centerTitle: String)
144162
/// ์™ผ์ชฝ ์ด๋ฏธ์ง€
145163
case LButton(leftImage: ImageResource)
164+
/// ์™ผ์ชฝ ํ…์ŠคํŠธ, ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ
165+
case LTextRButtonTitle(leftTitle: String, pointText: String?, rightButton: String)
146166
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
//
2+
// GetMembersListDTO.swift
3+
// Domain
4+
//
5+
// Created by ๋ฐ•์„œ์—ฐ on 2/8/25.
6+
// Copyright ยฉ 2025 yapp25thTeamTnT. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
/// ํŠธ๋ ˆ์ด๋„ˆ ํšŒ์› ์กฐํšŒ DTO
12+
public struct GetMembersListDTO: Decodable {
13+
/// ์ด๋ฆ„
14+
public let name: String
15+
/// ์ด๋ฉ”์ผ
16+
public let email: String
17+
/// ํ”„๋กœํ•„ ์‚ฌ์ง„
18+
public let profileImageUrl: String
19+
/// ์ƒ๋…„์›”์ผ
20+
public let birthday: String?
21+
/// ์œ ์ € ํƒ€์ž… (ํŠธ๋ ˆ์ด๋„ˆ/ํŠธ๋ ˆ์ด๋‹ˆ)
22+
public let memberType: String
23+
/// ์†Œ์…œ ๋กœ๊ทธ์ธ ํƒ€์ž…
24+
public let socialType: String
25+
/// ๊ด€๋ฆฌ์ค‘์ธ ํšŒ์›์˜ ์ˆ˜
26+
public let managementMember: Int
27+
/// ํ•จ๊ป˜ํ–ˆ๋˜ ํšŒ์›์˜ ์ˆ˜
28+
public let fellowMember: Int
29+
/// ํŠธ๋ ˆ์ด๋„ˆ ID
30+
public let trainerId: String
31+
/// ํŠธ๋ ˆ์ด๋‹ˆ ํ‚ค
32+
public let height: Double?
33+
/// ํŠธ๋ ˆ์ด๋‹ˆ ๋ฌด๊ฒŒ
34+
public let weight: Double?
35+
/// ์ฃผ์˜์‚ฌํ•ญ
36+
public let cautionNote: String?
37+
/// PT ๋ชฉํ‘œ
38+
public let goalContents: [String]
39+
}
40+
41+
public extension GetMembersListDTO {
42+
public static func toEntity(resEntity: GetMembersListDTO) -> GetMembersListEntity {
43+
return GetMembersListEntity(
44+
name: resEntity.name,
45+
email: resEntity.email,
46+
profileImageUrl: resEntity.profileImageUrl,
47+
birthday: resEntity.birthday ?? "",
48+
memberType: resEntity.memberType,
49+
socialType: resEntity.socialType,
50+
managementMember: resEntity.managementMember,
51+
fellowMember: resEntity.fellowMember,
52+
trainerId: resEntity.trainerId,
53+
height: resEntity.height ?? 0.0,
54+
weight: resEntity.weight ?? 0.0,
55+
cautionNote: resEntity.cautionNote ?? "",
56+
goalContents: resEntity.goalContents
57+
)
58+
}
59+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
//
2+
// GetMembersListEntity.swift
3+
// Domain
4+
//
5+
// Created by ๋ฐ•์„œ์—ฐ on 2/8/25.
6+
// Copyright ยฉ 2025 yapp25thTeamTnT. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
/// ํŠธ๋ ˆ์ด๋„ˆ ํšŒ์› ์กฐํšŒ DTO
12+
public struct GetMembersListEntity: Encodable, Equatable {
13+
/// ID ๊ฐ’ ํ™œ์šฉ์„ ์œ„ํ•œ ์ถ”๊ฐ€
14+
public let id: String
15+
/// ์ด๋ฆ„
16+
public let name: String
17+
/// ์ด๋ฉ”์ผ
18+
public let email: String
19+
/// ํ”„๋กœํ•„ ์‚ฌ์ง„
20+
public let profileImageUrl: String
21+
/// ์ƒ๋…„์›”์ผ
22+
public let birthday: String?
23+
/// ์œ ์ € ํƒ€์ž… (ํŠธ๋ ˆ์ด๋„ˆ/ํŠธ๋ ˆ์ด๋‹ˆ)
24+
public let memberType: String
25+
/// ์†Œ์…œ ๋กœ๊ทธ์ธ ํƒ€์ž…
26+
public let socialType: String
27+
/// ๊ด€๋ฆฌ์ค‘์ธ ํšŒ์›์˜ ์ˆ˜
28+
public let managementMember: Int
29+
/// ํ•จ๊ป˜ํ–ˆ๋˜ ํšŒ์›์˜ ์ˆ˜
30+
public let fellowMember: Int
31+
/// ํŠธ๋ ˆ์ด๋„ˆ ID
32+
public let trainerId: String
33+
/// ํŠธ๋ ˆ์ด๋‹ˆ ํ‚ค
34+
public let height: Double?
35+
/// ํŠธ๋ ˆ์ด๋‹ˆ ๋ฌด๊ฒŒ
36+
public let weight: Double?
37+
/// ์ฃผ์˜์‚ฌํ•ญ
38+
public let cautionNote: String?
39+
/// PT ๋ชฉํ‘œ
40+
public let goalContents: [String]
41+
42+
public init(
43+
id: String = UUID().uuidString,
44+
name: String,
45+
email: String,
46+
profileImageUrl: String,
47+
birthday: String?,
48+
memberType: String,
49+
socialType: String,
50+
managementMember: Int,
51+
fellowMember: Int,
52+
trainerId: String,
53+
height: Double?,
54+
weight: Double?,
55+
cautionNote: String?,
56+
goalContents: [String]
57+
) {
58+
self.id = id
59+
self.name = name
60+
self.email = email
61+
self.profileImageUrl = profileImageUrl
62+
self.birthday = birthday
63+
self.memberType = memberType
64+
self.socialType = socialType
65+
self.managementMember = managementMember
66+
self.fellowMember = fellowMember
67+
self.trainerId = trainerId
68+
self.height = height
69+
self.weight = weight
70+
self.cautionNote = cautionNote
71+
self.goalContents = goalContents
72+
}
73+
}
74+
75+
extension GetMembersListEntity {
76+
static func toDTO(entity: GetMembersListEntity) -> GetMembersListDTO {
77+
return GetMembersListDTO(
78+
name: entity.name,
79+
email: entity.email,
80+
profileImageUrl: entity.profileImageUrl,
81+
birthday: entity.birthday ?? "",
82+
memberType: entity.memberType,
83+
socialType: entity.socialType,
84+
managementMember: entity.managementMember,
85+
fellowMember: entity.fellowMember,
86+
trainerId: entity.trainerId,
87+
height: entity.height ?? 0.0,
88+
weight: entity.weight ?? 0.0,
89+
cautionNote: entity.cautionNote ?? "",
90+
goalContents: entity.goalContents)
91+
}
92+
}
File renamed without changes.
File renamed without changes.

โ€ŽTnT/Projects/Domain/Sources/Repository/TrainerRepository.swiftโ€Ž

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,7 @@ public protocol TrainerRepository {
2525

2626
/// ํŠธ๋ ˆ์ด๋„ˆ ์บ˜๋ฆฐ๋”์— ํŠน์ • ๋‚ ์งœ์˜ ์ˆ˜์—… ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
2727
func getDateSessionList(date: String) async throws -> GetDateSessionListDTO
28+
29+
/// ํšŒ์› ์กฐํฌ
30+
func getMembersList() async throws -> GetMembersListDTO
2831
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//
2+
// TrainerUseCase.swift
3+
// Domain
4+
//
5+
// Created by ๋ฐ•์„œ์—ฐ on 2/8/25.
6+
// Copyright ยฉ 2025 yapp25thTeamTnT. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
// MARK: - TrainerUseCase Default ๊ตฌํ˜„์ฒด
12+
public struct DefaultTrainerUseCase: TrainerRepository {
13+
14+
private let trainerRepository: TrainerRepository
15+
16+
public init (trainerRepository: TrainerRepository) {
17+
self.trainerRepository = trainerRepository
18+
}
19+
20+
public func getVerifyInvitationCode(code: String) async throws -> GetVerifyInvitationCodeResDTO {
21+
return try await trainerRepository.getVerifyInvitationCode(code: code)
22+
}
23+
24+
public func getTheFirstInvitationCode() async throws -> GetTheFirstInvitationCodeDTO {
25+
return try await trainerRepository.getTheFirstInvitationCode()
26+
}
27+
28+
public func getReissuanceInvitationCode() async throws -> GetReissuanceInvitationCodeDTO {
29+
return try await trainerRepository.getReissuanceInvitationCode()
30+
}
31+
32+
public func getDateSessionList(date: String) async throws -> GetDateSessionListDTO {
33+
return try await trainerRepository.getDateSessionList(date: date)
34+
}
35+
36+
public func getMembersList() async throws -> GetMembersListDTO {
37+
return try await trainerRepository.getMembersList()
38+
}
39+
}

0 commit comments

Comments
ย (0)