Skip to content
This repository has been archived by the owner on Dec 7, 2024. It is now read-only.

Commit

Permalink
✨ :: [#195] 프로필 이미지 수정을 위한 파일들을 다시 추가합니다
Browse files Browse the repository at this point in the history
  • Loading branch information
junseopark0331 committed Feb 4, 2024
1 parent e2af994 commit 13dc126
Show file tree
Hide file tree
Showing 7 changed files with 135 additions and 27 deletions.
18 changes: 11 additions & 7 deletions Service/Sources/DI/DataSourceAssembly.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,35 @@ public final class DataSourceAssembly: Assembly {
container.register(KeychainLocalProtocol.self) { _ in
KeychainLocal()
}

container.register(RealmTaskType.self) { _ in
RealmTask()
}

container.register(AuthRemoteProtocol.self) { r in
AuthRemote(keychainLocal: r.resolve(KeychainLocalProtocol.self)!)
}

container.register(ClubLocalProtocol.self) { r in
ClubLocal(realmTask: r.resolve(RealmTaskType.self)!)
}

container.register(ClubApplicantRemoteProtocol.self) { r in
ClubApplicantRemote(keychainLocal: r.resolve(KeychainLocalProtocol.self)!)
}

container.register(ClubMemberRemoteProtocol.self) { r in
ClubMemberRemote(keychainLocal: r.resolve(KeychainLocalProtocol.self)!)
}

container.register(ClubRemoteProtocol.self) { r in
ClubRemote(keychainLocal: r.resolve(KeychainLocalProtocol.self)!)
}


container.register(ImageRemoteProtocol.self) { r in
ImageRemote(keychainLocal: r.resolve(KeychainLocalProtocol.self)!)
}

container.register(UserRemoteProtocol.self) { r in
UserRemote(keychainLocal: r.resolve(KeychainLocalProtocol.self)!)
}
Expand Down
3 changes: 3 additions & 0 deletions Service/Sources/DI/RepositoryAssembly.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ public final class RepositoryAssembly: Assembly {
container.register(UserRepository.self) { r in
DefaultUserRepository(userRemote: r.resolve(UserRemoteProtocol.self)!)
}
container.register(ImageRepository.self) { r in
DefaultImageRepository(imageRemote: r.resolve(ImageRemoteProtocol.self)!)
}
container.register(ClubApplicantRepository.self) { r in
DefaultClubApplicantRepository(clubApplicantRemote: r.resolve(ClubApplicantRemoteProtocol.self)!)
}
Expand Down
47 changes: 27 additions & 20 deletions Service/Sources/DI/UseCaseAssembly.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,49 +5,49 @@ public final class UseCaseAssembly: Assembly {
public func assemble(container: Container) {
// MARK: - Auth
container.register(LoginUseCase.self) { r in
LoginUseCase(
LoginUseCase(
authRepository: r.resolve(AuthRepository.self)!
)
}
container.register(CheckIsLoginedUseCase.self) { r in
CheckIsLoginedUseCase(
CheckIsLoginedUseCase(
authRepository: r.resolve(AuthRepository.self)!
)
}
container.register(LogoutUseCase.self) { r in
LogoutUseCase(
LogoutUseCase(
authRepository: r.resolve(AuthRepository.self)!
)
}

// MARK: - Club
container.register(ClubOpenUseCase.self) { r in
ClubOpenUseCase(
ClubOpenUseCase(
clubRepository: r.resolve(ClubRepository.self)!
)
}
container.register(ClubCloseUseCase.self) { r in
ClubCloseUseCase(
ClubCloseUseCase(
clubRepository: r.resolve(ClubRepository.self)!
)
}
container.register(FetchClubListUseCase.self) { r in
FetchClubListUseCase(
FetchClubListUseCase(
clubRepository: r.resolve(ClubRepository.self)!
)
}
container.register(FetchClubMemberUseCase.self) { r in
FetchClubMemberUseCase(
FetchClubMemberUseCase(
clubMemberRepository: r.resolve(ClubMemberRepository.self)!
)
}
container.register(FetchClubApplicantUseCase.self) { r in
FetchClubApplicantUseCase(
FetchClubApplicantUseCase(
clubApplicantRepository: r.resolve(ClubApplicantRepository.self)!
)
}
container.register(FetchDetailClubUseCase.self) { r in
FetchDetailClubUseCase(
FetchDetailClubUseCase(
clubRepository: r.resolve(ClubRepository.self)!
)
}
Expand All @@ -57,49 +57,49 @@ public final class UseCaseAssembly: Assembly {
)
}
container.register(UserAcceptUseCase.self) { r in
UserAcceptUseCase(
UserAcceptUseCase(
clubApplicantRepository: r.resolve(ClubApplicantRepository.self)!
)
}
container.register(UserRejectUseCase.self) { r in
UserRejectUseCase(
UserRejectUseCase(
clubApplicantRepository: r.resolve(ClubApplicantRepository.self)!
)
}
container.register(UserKickUseCase.self) { r in
UserKickUseCase(
UserKickUseCase(
clubMemberRepository: r.resolve(ClubMemberRepository.self)!
)
}
container.register(ClubApplyUseCase.self) { r in
ClubApplyUseCase(
ClubApplyUseCase(
clubApplicantRepository: r.resolve(ClubApplicantRepository.self)!
)
}
container.register(ClubCancelUseCase.self) { r in
ClubCancelUseCase(
ClubCancelUseCase(
clubApplicantRepository: r.resolve(ClubApplicantRepository.self)!
)
}
container.register(ClubDelegationUseCase.self) { r in
ClubDelegationUseCase(
ClubDelegationUseCase(
clubMemberRepository: r.resolve(ClubMemberRepository.self)!
)
}

// MARK: - User
container.register(FetchProfileUseCase.self) { r in
FetchProfileUseCase(
FetchProfileUseCase(
userRepository: r.resolve(UserRepository.self)!
)
}
container.register(UpdateProfileImageUseCase.self) { r in
UpdateProfileImageUseCase(
UpdateProfileImageUseCase(
userRepository: r.resolve(UserRepository.self)!
)
}
container.register(SearchUserUseCase.self) { r in
SearchUserUseCase(
SearchUserUseCase(
userRepository: r.resolve(UserRepository.self)!
)
}
Expand All @@ -113,5 +113,12 @@ public final class UseCaseAssembly: Assembly {
userRepository: r.resolve(UserRepository.self)!
)
}

// MARK: - Image
container.register(UploadImagesUseCase.self) { r in
UploadImagesUseCase(
imageRepository: r.resolve(ImageRepository.self)!
)
}
}
}
62 changes: 62 additions & 0 deletions Service/Sources/Data/DataSource/Remote/API/ImageAPI.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import Moya
import Foundation

enum ImageAPI {
case uploadImages([Data])
}

extension ImageAPI: GCMSAPI {

var domain: GCMSDomain {
return .image
}
var urlPath: String {
switch self {
case .uploadImages:
return ""
}
}
var method: Moya.Method {
switch self {
case .uploadImages:
return .post
}
}
var task: Task {
switch self {
case let .uploadImages(datas):
let multiparts = datas.map { data -> MultipartFormData in
let uuid = UUID().uuidString
return MultipartFormData(
provider: .data(data),
name: "file",
fileName: "\(uuid).png"
)
}
return .uploadMultipart(multiparts)
}
}
var jwtTokenType: JWTTokenType? {
switch self {
case .uploadImages:
return .accessToken

default:
return JWTTokenType.none
}
}
var headers: [String: String]? {
return ["Content-type": "multipart/form-data"]
}

typealias ErrorType = GCMSError
var errorMapper: [Int: GCMSError]? {
switch self {
case .uploadImages:
return[
400: .overFourPhoto,
500: .photoUploadFailed
]
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import Foundation

struct UploadImagesResponse: Decodable {
let images: [String]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import RxSwift
import Foundation

protocol ImageRemoteProtocol {
func uploadPictures(datas: [Data]) -> Single<[String]>
}

final class ImageRemote: BaseRemote<ImageAPI>, ImageRemoteProtocol {
func uploadPictures(datas: [Data]) -> Single<[String]> {
return request(.uploadImages(datas))
.map(UploadImagesResponse.self)
.map(\.images)
}
}
13 changes: 13 additions & 0 deletions Service/Sources/Data/Repositories/DefaultImageRepository.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import RxSwift
import Foundation

final class DefaultImageRepository: ImageRepository {
private let imageRemote: any ImageRemoteProtocol
init(imageRemote: any ImageRemoteProtocol) {
self.imageRemote = imageRemote
}

func uploadImages(datas: [Data]) -> Single<[String]> {
imageRemote.uploadPictures(datas: datas)
}
}

0 comments on commit 13dc126

Please sign in to comment.