Skip to content

Commit

Permalink
[iOS#148] 네트워크 기능 개선 (#153)
Browse files Browse the repository at this point in the history
* feat: 타이머 시작 ResponseDTO 수정

* feat: Reuestable data추가

* feat: HTTPHeaderField 추가

- Content-Tupe 필드 추가

* feat: BaseURL 추가

* feat: HTTPHeader 구조체 구현
  • Loading branch information
leemhyungyu authored Nov 22, 2023
1 parent 415ed8b commit 8a7be13
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 13 deletions.
8 changes: 8 additions & 0 deletions iOS/FlipMate/FlipMate.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
2C3430972B0C7ED8008CBC85 /* EndPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3430962B0C7ED8008CBC85 /* EndPoint.swift */; };
2C3430992B0C8427008CBC85 /* Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3430982B0C8427008CBC85 /* Provider.swift */; };
2C34309B2B0C8674008CBC85 /* URLSessionable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C34309A2B0C8674008CBC85 /* URLSessionable.swift */; };
2C3430A12B0DA4E6008CBC85 /* BaseURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3430A02B0DA4E6008CBC85 /* BaseURL.swift */; };
2C3430A32B0DA5A5008CBC85 /* HTTPHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3430A22B0DA5A5008CBC85 /* HTTPHeader.swift */; };
2C43A0D82B037BBC0005596A /* FeedbackManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C43A0D72B037BBC0005596A /* FeedbackManager.swift */; };
2C4D55AB2B033029006D7C26 /* UIView++Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C4D55AA2B033029006D7C26 /* UIView++Extension.swift */; };
2C4D55B02B0348FB006D7C26 /* TimerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C4D55AF2B0348FB006D7C26 /* TimerViewModel.swift */; };
Expand Down Expand Up @@ -85,6 +87,8 @@
2C3430962B0C7ED8008CBC85 /* EndPoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EndPoint.swift; sourceTree = "<group>"; };
2C3430982B0C8427008CBC85 /* Provider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Provider.swift; sourceTree = "<group>"; };
2C34309A2B0C8674008CBC85 /* URLSessionable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSessionable.swift; sourceTree = "<group>"; };
2C3430A02B0DA4E6008CBC85 /* BaseURL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseURL.swift; sourceTree = "<group>"; };
2C3430A22B0DA5A5008CBC85 /* HTTPHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPHeader.swift; sourceTree = "<group>"; };
2C43A0D72B037BBC0005596A /* FeedbackManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedbackManager.swift; sourceTree = "<group>"; };
2C4D55AA2B033029006D7C26 /* UIView++Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView++Extension.swift"; sourceTree = "<group>"; };
2C4D55AF2B0348FB006D7C26 /* TimerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimerViewModel.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -195,6 +199,8 @@
2C3430962B0C7ED8008CBC85 /* EndPoint.swift */,
2C3430982B0C8427008CBC85 /* Provider.swift */,
2C34309A2B0C8674008CBC85 /* URLSessionable.swift */,
2C3430A02B0DA4E6008CBC85 /* BaseURL.swift */,
2C3430A22B0DA5A5008CBC85 /* HTTPHeader.swift */,
);
path = NetworkService;
sourceTree = "<group>";
Expand Down Expand Up @@ -875,6 +881,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2C3430A32B0DA5A5008CBC85 /* HTTPHeader.swift in Sources */,
EDC851D22B04EE83009031EA /* CategoryListCollectionViewCell.swift in Sources */,
2C43A0D82B037BBC0005596A /* FeedbackManager.swift in Sources */,
ED3595AB2B0C81B800558FAA /* Responsable.swift in Sources */,
Expand All @@ -892,6 +899,7 @@
2C801D802B04B68900A7ABAE /* TimerUseCase.swift in Sources */,
601773E42B021E6000D175D9 /* TimerViewController.swift in Sources */,
600908C22AFCD7DF0065DFFB /* ViewController.swift in Sources */,
2C3430A12B0DA4E6008CBC85 /* BaseURL.swift in Sources */,
2C5CDA5B2B025440007AFC57 /* ChartViewController.swift in Sources */,
6057A58D2B0C7F0F00EE58E8 /* Requestable.swift in Sources */,
6057A58F2B0C801300EE58E8 /* NetworkError.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,19 @@
import Foundation

struct TimerStartRequestDTO: Encodable {
let date: String
let createdAt: String
let type: String
let currentTime: String
let learningSeconds: Int
let category: String
let learningTime: Int
let userID: Int
let categoryID: Int

private enum CodingKeys: String, CodingKey {
case date
case createdAt = "created_at"
case type
case learningTime = "learning_time"
case userID = "user_id"
case categoryID = "category_id"
}
}
10 changes: 10 additions & 0 deletions iOS/FlipMate/FlipMate/NetworkService/BaseURL.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
//
// BaseURL.swift
// FlipMate
//
// Created by 임현규 on 2023/11/22.
//

import Foundation

let baseURL = "https://flipmate.site:3000"
8 changes: 5 additions & 3 deletions iOS/FlipMate/FlipMate/NetworkService/EndPoint.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,14 @@ final class EndPoint<R: Decodable>: ReqeustResponseable {
var baseURL: String
var path: String
var method: HTTPMethod
var bodyParameters: Encodable?
var headers: [String : String]?
var data: Data?
var headers: [HTTPHeader]?

init(baseURL: String, path: String, method: HTTPMethod) {
init(baseURL: String, path: String, method: HTTPMethod, data: Data? = nil, headers: [HTTPHeader]? = nil) {
self.baseURL = baseURL
self.path = path
self.method = method
self.data = data
self.headers = headers
}
}
13 changes: 13 additions & 0 deletions iOS/FlipMate/FlipMate/NetworkService/HTTPHeader.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// HTTPHeader.swift
// FlipMate
//
// Created by 임현규 on 2023/11/22.
//

import Foundation

struct HTTPHeader {
var value: String
var field: String
}
2 changes: 1 addition & 1 deletion iOS/FlipMate/FlipMate/NetworkService/Provider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ struct Provider: Providable {

func request<E: ReqeustResponseable>(with endpoint: E) -> AnyPublisher<E.Response, NetworkError> {
do {
let urlReqeust = try endpoint.getUrlRequest()
let urlReqeust = try endpoint.makeURLRequest()
return urlSession.response(for: urlReqeust)
.tryMap { data, response in
guard let response = response as? HTTPURLResponse else { throw NetworkError.invalidURLComponents }
Expand Down
12 changes: 6 additions & 6 deletions iOS/FlipMate/FlipMate/NetworkService/Requestable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,18 @@ protocol Requestable {
var baseURL: String { get }
var path: String { get }
var method: HTTPMethod { get }
var bodyParameters: Encodable? { get }
var headers: [String: String]? { get }
var data: Data? { get }
var headers: [HTTPHeader]? { get }
}

extension Requestable {
func getUrlRequest() throws -> URLRequest {
func makeURLRequest() throws -> URLRequest {
let url = try makeURL()
var urlRequest = URLRequest(url: url)

urlRequest.httpMethod = method.rawValue

headers?.forEach { urlRequest.setValue($1, forHTTPHeaderField: $0)}
urlRequest.httpBody = data
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
headers?.forEach { urlRequest.setValue($0.value, forHTTPHeaderField: $0.field)}
return urlRequest
}

Expand Down

0 comments on commit 8a7be13

Please sign in to comment.