Skip to content

Commit

Permalink
merge :: 잔류 신청 API 연동
Browse files Browse the repository at this point in the history
merge :: 잔류 신청 API 연동
  • Loading branch information
HongSJae authored Feb 24, 2023
2 parents 448219c + 49182e0 commit dd8dd99
Show file tree
Hide file tree
Showing 33 changed files with 605 additions and 83 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import NeedleFoundation
import NetworkModule
import DomainModule
import DataModule

public extension AppComponent {
var remoteRemainsDataSource: any RemoteRemainsDataSource {
shared {
RemoteRemainsDataSourceImpl(keychain: keychain)
}
}

var remainsRepository: any RemainsRepository {
shared {
RemainsRepositoryImpl(remoteRemainsDataSource: remoteRemainsDataSource)
}
}

var remainingApplicationsChangesUseCase: any RemainingApplicationsChangesUseCase {
shared {
RemainingApplicationsChangesUseCaselmpl(remainsRepository: remainsRepository)
}
}

var fetchMyRemainApplicationItemsUseCase: any FetchMyRemainApplicationItemsUseCase {
shared {
FetchMyRemainApplicationItemsUseCaselmpl(remainsRepository: remainsRepository)
}
}

var fetchRemainApplicationListUseCase: any FetchRemainApplicationListUseCase {
shared {
FetchRemainAppListUseCaselmpl(remainsRepository: remainsRepository)
}
}

var fetchRemainsAvailableTimeUseCase: any FetchRemainsAvailableTimeUseCase {
shared {
FetchRemainsAvailableTimeUseCaselmpl(remainsRepository: remainsRepository)
}
}
}
162 changes: 84 additions & 78 deletions Projects/App/Sources/Application/NeedleGenerated.swift

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ struct StudyRoomDetailView: View {
.padding(.bottom, 6)

HStack(spacing: 10) {
DMSWideButton(text: "취소",style: .contained, color: .GrayScale.gray4) {
DMSWideButton(text: "취소", style: .contained, color: .GrayScale.gray4) {
viewModel.cancelStudyRoomSeat()
}

Expand Down
2 changes: 1 addition & 1 deletion Projects/Features/SplashFeature/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ let project = Project.makeModule(
dependencies: [
.Project.Features.BaseFeature
]
)
)
14 changes: 14 additions & 0 deletions Projects/Modules/ErrorModule/Sources/DmsError.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ public enum DmsError: Error {
case notFoundAppliedSeat
case noPermissionApplySeat

// MARK: - Remains
case forbiddenRemainPeriod
case notFoundRemain
case conflictRemain
}

extension DmsError: LocalizedError {
Expand Down Expand Up @@ -125,6 +129,16 @@ extension DmsError: LocalizedError {

case .noPermissionApplySeat:
return "신청 불가능한 자습실입니다"

// MARK: - Remains
case .forbiddenRemainPeriod:
return "잔류 신청 기간이 아닙니다"

case .notFoundRemain:
return "찾을 수 없습니다"

case .conflictRemain:
return "이미 존재합니다"
}
}
}
Expand Down
1 change: 1 addition & 0 deletions Projects/Services/APIKit/Sources/DmsAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ public enum DmsDomain: String {
case points
case users
case studyRooms = "study-rooms"
case remains
}

extension DmsDomain {
Expand Down
95 changes: 95 additions & 0 deletions Projects/Services/APIKit/Sources/RemainsAPI.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import Moya
import DataMappingModule
import ErrorModule
import Foundation

public enum RemainsAPI {
case remainingApplicationsChanges(id: String)
case fetchMyRemainApplicationItems
case fetchRemainsAvailableTime
case fetchRemainApplicationList
}

extension RemainsAPI: DmsAPI {
public var domain: DmsDomain {
.remains
}

public var urlPath: String {
switch self {
case let .remainingApplicationsChanges(id):
return "/\(id)"

case .fetchMyRemainApplicationItems:
return "/my"

case .fetchRemainsAvailableTime:
return "/available-time"

case .fetchRemainApplicationList:
return "/options"
}
}

public var method: Moya.Method {
switch self {
case .remainingApplicationsChanges:
return .put

case .fetchMyRemainApplicationItems, .fetchRemainsAvailableTime, .fetchRemainApplicationList:
return .get
}
}

public var task: Moya.Task {
.requestPlain
}

public var jwtTokenType: JwtTokenType {
.accessToken
}

public var errorMap: [Int: DmsError] {
switch self {
case .remainingApplicationsChanges:
return [
400: .badRequest,
401: .tokenExpired,
403: .forbiddenRemainPeriod,
404: .notFoundRemain,
409: .conflictRemain,
429: .tooManyRequest,
500: .internalServerError
]

case .fetchMyRemainApplicationItems:
return [
400: .badRequest,
401: .tokenExpired,
403: .forbiddenRemainPeriod,
404: .notFoundRemain,
429: .tooManyRequest,
500: .internalServerError
]

case .fetchRemainsAvailableTime:
return [
400: .badRequest,
401: .tokenExpired,
403: .forbiddenRemainPeriod,
404: .notFoundRemain,
429: .tooManyRequest,
500: .internalServerError
]

case .fetchRemainApplicationList:
return [
400: .badRequest,
401: .tokenExpired,
404: .notFoundRemain,
429: .tooManyRequest,
500: .internalServerError
]
}
}
}
3 changes: 0 additions & 3 deletions Projects/Services/APIKit/Sources/UsersAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,6 @@ extension UsersAPI: DmsAPI {
return .requestParameters(parameters: [
"password": password
], encoding: URLEncoding.queryString)

default:
return .requestPlain
}
}

Expand Down
11 changes: 11 additions & 0 deletions Projects/Services/DataMappingModule/Sources/Enum/WeekType.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import Foundation

public enum WeekType: String, Decodable {
case monday = "MONDAY"
case tuesday = "TUESDAY"
case wednesday = "WEDNESDAY"
case thursday = "THURSDAY"
case friday = "FRIDAY"
case satuday = "SATURDAY"
case sunday = "SUNDAY"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import Foundation

public struct FetchRemainAppListResponseDTO: Decodable {
public init(
selectedOption: String,
remainOptions: [RemainOptionResponseDTO]
) {
self.selectedOption = selectedOption
self.remainOptions = remainOptions
}

public let selectedOption: String
public let remainOptions: [RemainOptionResponseDTO]

enum CodingKeys: String, CodingKey {
case selectedOption = "selected_option"
case remainOptions = "remain_options"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import Foundation

public struct FetchMyRemainApplicationItemsResponseDTO: Decodable {
public init(
title: String
) {
self.title = title
}

public let title: String
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import Foundation

public struct FetchRemainsAvailableTimeResponseDTO: Decodable {
public init(
startDayOfWeek: WeekType,
startAt: String,
endDayOfWeek: WeekType,
endAt: String
) {
self.startDayOfWeek = startDayOfWeek
self.startAt = startAt
self.endDayOfWeek = endDayOfWeek
self.endAt = endAt
}

public let startDayOfWeek: WeekType
public let startAt: String
public let endDayOfWeek: WeekType
public let endAt: String

enum CodingKeys: String, CodingKey {
case startDayOfWeek = "start_day_of_week"
case startAt = "start_at"
case endDayOfWeek = "end_day_of_week"
case endAt = "end_at"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import Foundation

public struct RemainOptionResponseDTO: Decodable {
public init(
id: String,
title: String,
description: String
) {
self.id = id
self.title = title
self.description = description
}

public let id: String
public let title: String
public let description: String
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import Combine
import DataMappingModule
import DomainModule
import ErrorModule
import NetworkModule

public struct RemainsRepositoryImpl: RemainsRepository {
private let remoteRemainsDataSource: any RemoteRemainsDataSource

public init(remoteRemainsDataSource: any RemoteRemainsDataSource) {
self.remoteRemainsDataSource = remoteRemainsDataSource
}

public func remainingApplicationsChanges(id: String) -> AnyPublisher<Void, DmsError> {
remoteRemainsDataSource.remainingApplicationsChanges(id: id)
}

public func fetchMyRemainApplicationItems() ->
AnyPublisher<MyRemainApplicationItemsEntity, DmsError> {
remoteRemainsDataSource.fetchMyRemainApplicationItems()
}

public func fetchRemainsAvailableTime() ->
AnyPublisher<RemainsAvailableTimeEntity, DmsError> {
remoteRemainsDataSource.fetchRemainsAvailableTime()
}

public func fetchRemainApplicationList() ->
AnyPublisher<RemainApplicationListEntity, DmsError> {
remoteRemainsDataSource.fetchRemainApplicationList()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import Combine
import DataMappingModule
import DomainModule
import ErrorModule

public struct FetchMyRemainApplicationItemsUseCaselmpl: FetchMyRemainApplicationItemsUseCase {
private let remainsRepository: any RemainsRepository

public init(remainsRepository: any RemainsRepository) {
self.remainsRepository = remainsRepository
}

public func execute() -> AnyPublisher<MyRemainApplicationItemsEntity, DmsError> {
remainsRepository.fetchMyRemainApplicationItems()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import Combine
import DataMappingModule
import DomainModule
import ErrorModule

public struct FetchRemainAppListUseCaselmpl: FetchRemainApplicationListUseCase {
private let remainsRepository: any RemainsRepository

public init(remainsRepository: any RemainsRepository) {
self.remainsRepository = remainsRepository
}

public func execute() -> AnyPublisher<RemainApplicationListEntity, DmsError> {
remainsRepository.fetchRemainApplicationList()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import Combine
import DataMappingModule
import DomainModule
import ErrorModule

public struct FetchRemainsAvailableTimeUseCaselmpl: FetchRemainsAvailableTimeUseCase {
private let remainsRepository: any RemainsRepository

public init(remainsRepository: any RemainsRepository) {
self.remainsRepository = remainsRepository
}

public func execute() -> AnyPublisher<RemainsAvailableTimeEntity, DmsError> {
remainsRepository.fetchRemainsAvailableTime()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import Combine
import DataMappingModule
import DomainModule
import ErrorModule

public struct RemainingApplicationsChangesUseCaselmpl: RemainingApplicationsChangesUseCase {
private let remainsRepository: any RemainsRepository

public init(remainsRepository: any RemainsRepository) {
self.remainsRepository = remainsRepository
}

public func execute(id: String) -> AnyPublisher<Void, ErrorModule.DmsError> {
remainsRepository.remainingApplicationsChanges(id: id)
}
}
Loading

0 comments on commit dd8dd99

Please sign in to comment.