From 84fecefdaa45c23a016c2ee6f98a644338ad1c3f Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Sat, 8 Aug 2026 18:48:08 +0900 Subject: [PATCH 01/12] =?UTF-8?q?[FEAT]=20=EB=84=A4=ED=8A=B8=EC=9B=8C?= =?UTF-8?q?=ED=82=B9=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EA=B8=B0=EB=B0=98=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EA=B0=9C=EC=84=A0=20=EB=B0=8F=20=ED=8F=B4?= =?UTF-8?q?=EB=8D=94=EB=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Endpoint, HTTPHeader, HttpMethod, RequestParameter Foundation 폴더링 - HTTPHeader 케이스 authorization 추가 - RequestParameter 케이스 body, query로 변경 및 그에 따른 Endpoint코드 수정 --- GAMSS/Sources/Core/Network/Endpoint.swift | 60 ----------------- .../Core/Network/Foundation/Endpoint.swift | 64 +++++++++++++++++++ .../Core/Network/Foundation/HttpHeader.swift | 38 +++++++++++ .../Core/Network/Foundation/HttpMethod.swift | 16 +++++ .../Network/Foundation/RequestParameter.swift | 13 ++++ 5 files changed, 131 insertions(+), 60 deletions(-) delete mode 100644 GAMSS/Sources/Core/Network/Endpoint.swift create mode 100644 GAMSS/Sources/Core/Network/Foundation/Endpoint.swift create mode 100644 GAMSS/Sources/Core/Network/Foundation/HttpHeader.swift create mode 100644 GAMSS/Sources/Core/Network/Foundation/HttpMethod.swift create mode 100644 GAMSS/Sources/Core/Network/Foundation/RequestParameter.swift diff --git a/GAMSS/Sources/Core/Network/Endpoint.swift b/GAMSS/Sources/Core/Network/Endpoint.swift deleted file mode 100644 index 239976f..0000000 --- a/GAMSS/Sources/Core/Network/Endpoint.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// Endpoint.swift -// GAMSS -// -// Created by 이건준 on 7/19/26. -// - -import Foundation - -protocol Endpoint { - var baseURLString: String { get } - var path: String { get } - var method: HTTPMethod { get } - var body: Encodable? { get } -} - -extension Endpoint { - var baseURLString: String { - return Environment.baseURL - } - - var headers: [String: String] { - return [ - "Content-Type": "application/json", - "Accept": "application/json" - ] - } - - func asURLRequest() throws -> URLRequest { - guard let url = URL( - string: "\(baseURLString)\(path)" - ) else { - throw NetworkError.invalidURL - } - - var request = URLRequest(url: url) - request.httpMethod = method.rawValue - - headers.forEach { - request.setValue( - $1, - forHTTPHeaderField: $0 - ) - } - - if let body { - request.httpBody = try JSONEncoder().encode(body) - } - - return request - } -} - -enum HTTPMethod: String { - case get = "GET" - case post = "POST" - case put = "PUT" - case patch = "PATCH" - case delete = "DELETE" -} diff --git a/GAMSS/Sources/Core/Network/Foundation/Endpoint.swift b/GAMSS/Sources/Core/Network/Foundation/Endpoint.swift new file mode 100644 index 0000000..f7843c0 --- /dev/null +++ b/GAMSS/Sources/Core/Network/Foundation/Endpoint.swift @@ -0,0 +1,64 @@ +// +// Endpoint.swift +// GAMSS +// +// Created by 이건준 on 7/19/26. +// + +import Foundation + +protocol Endpoint { + var baseURLString: String { get } + var path: String { get } + var method: HTTPMethod { get } + var parameters: [RequestParameter] { get } + var header: HTTPHeader { get } +} + +extension Endpoint { + var baseURLString: String { + return Environment.baseURL + } + + func asURLRequest() throws -> URLRequest { + guard var components = URLComponents( + string: "\(baseURLString)\(path)" + ) else { + throw NetworkError.invalidURL + } + + var httpBody: Data? + + for parameter in parameters { + switch parameter { + case let .query(query): + components.queryItems = query.map { + URLQueryItem( + name: $0.key, + value: $0.value + ) + } + + case let .body(body): + httpBody = try JSONEncoder().encode(body) + } + } + + guard let url = components.url else { + throw NetworkError.invalidURL + } + + var request = URLRequest(url: url) + request.httpMethod = method.rawValue + request.httpBody = httpBody + + header.fields.forEach { + request.setValue( + $1, + forHTTPHeaderField: $0 + ) + } + + return request + } +} diff --git a/GAMSS/Sources/Core/Network/Foundation/HttpHeader.swift b/GAMSS/Sources/Core/Network/Foundation/HttpHeader.swift new file mode 100644 index 0000000..628d964 --- /dev/null +++ b/GAMSS/Sources/Core/Network/Foundation/HttpHeader.swift @@ -0,0 +1,38 @@ +// +// HttpHeader.swift +// GAMSS +// +// Created by 이건준 on 8/8/26. +// + +import Foundation + +enum HTTPHeader { + case `default` + case authorization + case custom([String: String]) + + var fields: [String: String] { + switch self { + case .default: + return [ + "Content-Type": "application/json", + "Accept": "application/json" + ] + + case .authorization: + guard let accessToken = TokenStorage.shared.readToken(.accessToken) else { + return [:] + } + + return [ + "Content-Type": "application/json", + "Accept": "application/json", + "Authorization": "Bearer \(accessToken)" + ] + + case let .custom(headers): + return headers + } + } +} diff --git a/GAMSS/Sources/Core/Network/Foundation/HttpMethod.swift b/GAMSS/Sources/Core/Network/Foundation/HttpMethod.swift new file mode 100644 index 0000000..aa8dcb4 --- /dev/null +++ b/GAMSS/Sources/Core/Network/Foundation/HttpMethod.swift @@ -0,0 +1,16 @@ +// +// HttpMethod.swift +// GAMSS +// +// Created by 이건준 on 8/8/26. +// + +import Foundation + +enum HTTPMethod: String { + case get = "GET" + case post = "POST" + case put = "PUT" + case patch = "PATCH" + case delete = "DELETE" +} diff --git a/GAMSS/Sources/Core/Network/Foundation/RequestParameter.swift b/GAMSS/Sources/Core/Network/Foundation/RequestParameter.swift new file mode 100644 index 0000000..4410aea --- /dev/null +++ b/GAMSS/Sources/Core/Network/Foundation/RequestParameter.swift @@ -0,0 +1,13 @@ +// +// RequestParameter.swift +// GAMSS +// +// Created by 이건준 on 8/8/26. +// + +import Foundation + +enum RequestParameter { + case query([String: String]) + case body(Encodable) +} From 273ca2a1a86066e4e29c509c305545b6f4d13ce4 Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Sat, 8 Aug 2026 18:48:29 +0900 Subject: [PATCH 02/12] =?UTF-8?q?[FEAT]=20Auth=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EB=AA=A8=EB=8D=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DTO/{ => Auth/Request}/LoginRequestDTO.swift | 0 .../DTO/Auth/Request/ReissueTokenRequestDTO.swift | 12 ++++++++++++ .../DTO/{ => Auth/Response}/LoginResponseDTO.swift | 0 3 files changed, 12 insertions(+) rename GAMSS/Sources/Data/DTO/{ => Auth/Request}/LoginRequestDTO.swift (100%) create mode 100644 GAMSS/Sources/Data/DTO/Auth/Request/ReissueTokenRequestDTO.swift rename GAMSS/Sources/Data/DTO/{ => Auth/Response}/LoginResponseDTO.swift (100%) diff --git a/GAMSS/Sources/Data/DTO/LoginRequestDTO.swift b/GAMSS/Sources/Data/DTO/Auth/Request/LoginRequestDTO.swift similarity index 100% rename from GAMSS/Sources/Data/DTO/LoginRequestDTO.swift rename to GAMSS/Sources/Data/DTO/Auth/Request/LoginRequestDTO.swift diff --git a/GAMSS/Sources/Data/DTO/Auth/Request/ReissueTokenRequestDTO.swift b/GAMSS/Sources/Data/DTO/Auth/Request/ReissueTokenRequestDTO.swift new file mode 100644 index 0000000..2ede1e5 --- /dev/null +++ b/GAMSS/Sources/Data/DTO/Auth/Request/ReissueTokenRequestDTO.swift @@ -0,0 +1,12 @@ +// +// ReissueTokenRequestDTO.swift +// GAMSS +// +// Created by 이건준 on 8/8/26. +// + +import Foundation + +struct ReissueTokenRequestDTO: Encodable { + let refreshToken: String +} diff --git a/GAMSS/Sources/Data/DTO/LoginResponseDTO.swift b/GAMSS/Sources/Data/DTO/Auth/Response/LoginResponseDTO.swift similarity index 100% rename from GAMSS/Sources/Data/DTO/LoginResponseDTO.swift rename to GAMSS/Sources/Data/DTO/Auth/Response/LoginResponseDTO.swift From 873755da01d0d6c9a5acaa9ca279c7bf7df11f01 Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Sat, 8 Aug 2026 18:48:46 +0900 Subject: [PATCH 03/12] =?UTF-8?q?[FEAT]=20Card=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EB=AA=A8=EB=8D=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DTO/Card/Request/CreateCardsRequestDTO.swift | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 GAMSS/Sources/Data/DTO/Card/Request/CreateCardsRequestDTO.swift diff --git a/GAMSS/Sources/Data/DTO/Card/Request/CreateCardsRequestDTO.swift b/GAMSS/Sources/Data/DTO/Card/Request/CreateCardsRequestDTO.swift new file mode 100644 index 0000000..d57e10c --- /dev/null +++ b/GAMSS/Sources/Data/DTO/Card/Request/CreateCardsRequestDTO.swift @@ -0,0 +1,14 @@ +// +// CreateCardsRequestDTO.swift +// GAMSS +// +// Created by 이건준 on 8/8/26. +// + +import Foundation + +struct CreateCardsRequestDTO: Encodable { + let conversationId: Int + let emotion: String + let summary: String +} From 56b96a95fed47ca6227fc6fb08755d6ee2bfbe80 Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Sat, 8 Aug 2026 18:49:00 +0900 Subject: [PATCH 04/12] =?UTF-8?q?[FEAT]=20Chat=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EB=AA=A8=EB=8D=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Chat/Request/CreateCommentRequestDTO.swift | 13 +++++++++++++ .../Chat/Request/CreateMessageRequestDTO.swift | 16 ++++++++++++++++ .../Chat/Request/UpdateChatTitleRequestDTO.swift | 12 ++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 GAMSS/Sources/Data/DTO/Chat/Request/CreateCommentRequestDTO.swift create mode 100644 GAMSS/Sources/Data/DTO/Chat/Request/CreateMessageRequestDTO.swift create mode 100644 GAMSS/Sources/Data/DTO/Chat/Request/UpdateChatTitleRequestDTO.swift diff --git a/GAMSS/Sources/Data/DTO/Chat/Request/CreateCommentRequestDTO.swift b/GAMSS/Sources/Data/DTO/Chat/Request/CreateCommentRequestDTO.swift new file mode 100644 index 0000000..b176a38 --- /dev/null +++ b/GAMSS/Sources/Data/DTO/Chat/Request/CreateCommentRequestDTO.swift @@ -0,0 +1,13 @@ +// +// CreateCommentRequestDTO.swift +// GAMSS +// +// Created by 이건준 on 8/8/26. +// + +import Foundation + +struct CreateCommentRequestDTO: Encodable { + let messageId: Int + let currentConversationSummary: String +} diff --git a/GAMSS/Sources/Data/DTO/Chat/Request/CreateMessageRequestDTO.swift b/GAMSS/Sources/Data/DTO/Chat/Request/CreateMessageRequestDTO.swift new file mode 100644 index 0000000..8f821e5 --- /dev/null +++ b/GAMSS/Sources/Data/DTO/Chat/Request/CreateMessageRequestDTO.swift @@ -0,0 +1,16 @@ +// +// CreateMessageRequestDTO.swift +// GAMSS +// +// Created by 이건준 on 8/8/26. +// + +import Foundation + +struct CreateMessageRequestDTO: Encodable { + let conversationId: Int + let content: String + let repliesMessageId: Int + let currentConversationSummary: String + let excludeCharacters: [String] +} diff --git a/GAMSS/Sources/Data/DTO/Chat/Request/UpdateChatTitleRequestDTO.swift b/GAMSS/Sources/Data/DTO/Chat/Request/UpdateChatTitleRequestDTO.swift new file mode 100644 index 0000000..b4dda5b --- /dev/null +++ b/GAMSS/Sources/Data/DTO/Chat/Request/UpdateChatTitleRequestDTO.swift @@ -0,0 +1,12 @@ +// +// UpdateChatTitleRequestDTO.swift +// GAMSS +// +// Created by 이건준 on 8/8/26. +// + +import Foundation + +struct UpdateChatTitleRequestDTO: Encodable { + let title: String +} From b269fdb7884f2224eeb7087b74709e986edad0b3 Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Sat, 8 Aug 2026 18:49:26 +0900 Subject: [PATCH 05/12] =?UTF-8?q?[MOVE]=20=EA=B3=B5=EC=9A=A9=EB=AA=A8?= =?UTF-8?q?=EB=8D=B8=20=ED=8F=B4=EB=8D=94=20=EC=9C=84=EC=B9=98=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Common폴더 생성 --- GAMSS/Sources/Data/DTO/{ => Common}/APIResponse.swift | 0 GAMSS/Sources/Data/DTO/{ => Common}/EmptyResponseDTO.swift | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename GAMSS/Sources/Data/DTO/{ => Common}/APIResponse.swift (100%) rename GAMSS/Sources/Data/DTO/{ => Common}/EmptyResponseDTO.swift (100%) diff --git a/GAMSS/Sources/Data/DTO/APIResponse.swift b/GAMSS/Sources/Data/DTO/Common/APIResponse.swift similarity index 100% rename from GAMSS/Sources/Data/DTO/APIResponse.swift rename to GAMSS/Sources/Data/DTO/Common/APIResponse.swift diff --git a/GAMSS/Sources/Data/DTO/EmptyResponseDTO.swift b/GAMSS/Sources/Data/DTO/Common/EmptyResponseDTO.swift similarity index 100% rename from GAMSS/Sources/Data/DTO/EmptyResponseDTO.swift rename to GAMSS/Sources/Data/DTO/Common/EmptyResponseDTO.swift From 16ff55b5430a3b97c470c2fd83a64fcaa9c5296c Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Sat, 8 Aug 2026 18:49:39 +0900 Subject: [PATCH 06/12] =?UTF-8?q?[FEAT]=20Member=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EB=AA=A8=EB=8D=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Member/Request/UpdateNicknameRequestDTO.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 GAMSS/Sources/Data/DTO/Member/Request/UpdateNicknameRequestDTO.swift diff --git a/GAMSS/Sources/Data/DTO/Member/Request/UpdateNicknameRequestDTO.swift b/GAMSS/Sources/Data/DTO/Member/Request/UpdateNicknameRequestDTO.swift new file mode 100644 index 0000000..ac56960 --- /dev/null +++ b/GAMSS/Sources/Data/DTO/Member/Request/UpdateNicknameRequestDTO.swift @@ -0,0 +1,12 @@ +// +// UpdateNicknameRequestDTO.swift +// GAMSS +// +// Created by 이건준 on 8/8/26. +// + +import Foundation + +struct UpdateNicknameRequestDTO: Encodable { + let nickname: String +} From 37978cbd5a09fc57b703316f1b805ab9c53eea91 Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Sat, 8 Aug 2026 18:50:52 +0900 Subject: [PATCH 07/12] =?UTF-8?q?[FEAT]=20Endpoint=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/Data/Endpoint/AuthEndpoint.swift | 22 ++++- .../Sources/Data/Endpoint/CardEndpoint.swift | 79 ++++++++++++++++ .../Sources/Data/Endpoint/ChatEndpoint.swift | 94 +++++++++++++++++++ .../Data/Endpoint/MemberEndpoint.swift | 56 +++++++++++ 4 files changed, 248 insertions(+), 3 deletions(-) create mode 100644 GAMSS/Sources/Data/Endpoint/CardEndpoint.swift create mode 100644 GAMSS/Sources/Data/Endpoint/ChatEndpoint.swift create mode 100644 GAMSS/Sources/Data/Endpoint/MemberEndpoint.swift diff --git a/GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift b/GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift index a7381ba..3651084 100644 --- a/GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift +++ b/GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift @@ -9,11 +9,17 @@ import Foundation enum AuthEndpoint: Endpoint { case login(LoginRequestDTO) + case logout + case reissueToken(ReissueTokenRequestDTO) var path: String { switch self { case .login: return "/api/auth/login" + case .logout: + return "/api/auth/logout" + case .reissueToken: + return "/api/auth/reissue" } } @@ -21,13 +27,23 @@ enum AuthEndpoint: Endpoint { switch self { case .login: return .post + case .logout: + return .post + case .reissueToken: + return .post } } - var body: Encodable? { + var parameters: [RequestParameter] { switch self { - case let .login(request): - return request + case .login(let request): + return [.body(request)] + case .logout: + return [] + case .reissueToken(let request): + return [.body(request)] } } + + var header: HTTPHeader { .default } } diff --git a/GAMSS/Sources/Data/Endpoint/CardEndpoint.swift b/GAMSS/Sources/Data/Endpoint/CardEndpoint.swift new file mode 100644 index 0000000..ecd94fa --- /dev/null +++ b/GAMSS/Sources/Data/Endpoint/CardEndpoint.swift @@ -0,0 +1,79 @@ +// +// CardEndpoint.swift +// GAMSS +// +// Created by 이건준 on 8/8/26. +// + +import Foundation + +enum CardEndpoint: Endpoint { + case fetchCards(date: String) + case createCard(CreateCardsRequestDTO) + case deleteAllCards + case fetchCard(cardId: String) + case deleteCard(cardId: String) + case fetchMonthlyCards(yearMonth: String) + case deleteCardsByEmotion(emotion: String) + + var path: String { + switch self { + case .fetchCards: + return "/api/cards" + case .createCard: + return "/api/cards" + case .deleteAllCards: + return "/api/cards" + case let .fetchCard(cardId): + return "/api/cards/\(cardId)" + case let .deleteCard(cardId): + return "/api/cards/\(cardId)" + case .fetchMonthlyCards: + return "/api/cards/monthly" + case let .deleteCardsByEmotion(emotion): + return "/api/cards/emotions/\(emotion)" + } + } + + var method: HTTPMethod { + switch self { + case .fetchCards: + return .get + case .createCard: + return .post + case .deleteAllCards: + return .delete + case .fetchCard: + return .get + case .deleteCard: + return .delete + case .fetchMonthlyCards: + return .get + case .deleteCardsByEmotion: + return .delete + } + } + + var parameters: [RequestParameter] { + switch self { + case .fetchCards(let date): + return [.query(["date": date])] + case .createCard(let request): + return [.body(request)] + case .deleteAllCards: + return [] + case .fetchCard(let cardId): + return [] + case .deleteCard(let cardId): + return [] + case .fetchMonthlyCards(let yearMonth): + return [.query(["yearMonth": yearMonth])] + case .deleteCardsByEmotion(let emotion): + return [] + } + } + + var header: HTTPHeader { + .authorization + } +} diff --git a/GAMSS/Sources/Data/Endpoint/ChatEndpoint.swift b/GAMSS/Sources/Data/Endpoint/ChatEndpoint.swift new file mode 100644 index 0000000..0a8ab3f --- /dev/null +++ b/GAMSS/Sources/Data/Endpoint/ChatEndpoint.swift @@ -0,0 +1,94 @@ +// +// ChatEndpoint.swift +// GAMSS +// +// Created by 이건준 on 8/8/26. +// + +import Foundation + +enum ChatEndpoint: Endpoint { + case endChat(chatId: Int) + case createMessage(CreateMessageRequestDTO) + case createComment(CreateCommentRequestDTO) + case createReply(messageId: Int) + case updateTitle(chatId: String, UpdateChatTitleRequestDTO) + case fetchChats(date: String) + case fetchMessages(chatId: String) + case searchChats(keyword: String, page: Int, size: Int) + case fetchIncompleteChats + case deleteChat(chatId: String) + + var path: String { + switch self { + case let .endChat(chatId): + return "/api/conversations/\(chatId)/end" + case .createMessage: + return "/api/conversations/messages" + case .createComment: + return "/api/conversations/messages/comments" + case let .createReply(messageId): + return "/api/conversations/messages/comments/\(messageId)" + case let .updateTitle(chatId, _): + return "/api/conversations/\(chatId)/title" + case .fetchChats: + return "/api/conversations" + case let .fetchMessages(chatId): + return "/api/conversations/\(chatId)/messages" + case .searchChats: + return "/api/conversations/search" + case .fetchIncompleteChats: + return "/api/conversations/incomplete" + case let .deleteChat(chatId): + return "/api/conversations/\(chatId)" + } + } + + var method: HTTPMethod { + switch self { + case .endChat, + .createMessage, + .createComment, + .createReply: + return .post + case .updateTitle: + return .patch + case .fetchChats, + .fetchMessages, + .searchChats, + .fetchIncompleteChats: + return .get + case .deleteChat: + return .delete + } + } + + var parameters: [RequestParameter] { + switch self { + case .endChat: + return [] + case .createMessage(let request): + return [.body(request)] + case .createComment(let request): + return [.body(request)] + case .createReply: + return [] + case let .updateTitle(_, request): + return [.body(request)] + case .fetchChats(let date): + return [.query(["date": date])] + case .fetchMessages: + return [] + case let .searchChats(keyword, page, size): + return [.query(["keyword": keyword, "page": "\(page)", "size": "\(size)"])] + case .fetchIncompleteChats: + return [] + case .deleteChat: + return [] + } + } + + var header: HTTPHeader { + .authorization + } +} diff --git a/GAMSS/Sources/Data/Endpoint/MemberEndpoint.swift b/GAMSS/Sources/Data/Endpoint/MemberEndpoint.swift new file mode 100644 index 0000000..5ef752d --- /dev/null +++ b/GAMSS/Sources/Data/Endpoint/MemberEndpoint.swift @@ -0,0 +1,56 @@ +// +// MemberEndpoint.swift +// GAMSS +// +// Created by 이건준 on 8/8/26. +// + +import Foundation + +enum MemberEndpoint: Endpoint { + case fetchMyProfile + case updateNickname(UpdateNicknameRequestDTO) + case deleteAccount + case fetchMyTokenUsage + + var path: String { + switch self { + case .fetchMyProfile: + return "/api/members/me" + case .updateNickname: + return "/api/members/me/nickname" + case .deleteAccount: + return "/api/members/me" + case .fetchMyTokenUsage: + return "/api/members/me/token-usage" + } + } + + var method: HTTPMethod { + switch self { + case .fetchMyProfile: + return .get + case .updateNickname: + return .patch + case .deleteAccount: + return .delete + case .fetchMyTokenUsage: + return .get + } + } + + var parameters: [RequestParameter] { + switch self { + case .fetchMyProfile: + return [] + case .updateNickname(let request): + return [.body(request)] + case .deleteAccount: + return [] + case .fetchMyTokenUsage: + return [] + } + } + + var header: HTTPHeader { .authorization } +} From fd17574230da1434e79f86290e9623379c66323e Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Sun, 9 Aug 2026 17:31:11 +0900 Subject: [PATCH 08/12] =?UTF-8?q?[RENAME]=20CreateCardsRequestDTO=20->=20C?= =?UTF-8?q?reateCardRequestDTO=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{CreateCardsRequestDTO.swift => CreateCardRequestDTO.swift} | 2 +- GAMSS/Sources/Data/Endpoint/CardEndpoint.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename GAMSS/Sources/Data/DTO/Card/Request/{CreateCardsRequestDTO.swift => CreateCardRequestDTO.swift} (81%) diff --git a/GAMSS/Sources/Data/DTO/Card/Request/CreateCardsRequestDTO.swift b/GAMSS/Sources/Data/DTO/Card/Request/CreateCardRequestDTO.swift similarity index 81% rename from GAMSS/Sources/Data/DTO/Card/Request/CreateCardsRequestDTO.swift rename to GAMSS/Sources/Data/DTO/Card/Request/CreateCardRequestDTO.swift index d57e10c..1b4319a 100644 --- a/GAMSS/Sources/Data/DTO/Card/Request/CreateCardsRequestDTO.swift +++ b/GAMSS/Sources/Data/DTO/Card/Request/CreateCardRequestDTO.swift @@ -7,7 +7,7 @@ import Foundation -struct CreateCardsRequestDTO: Encodable { +struct CreateCardRequestDTO: Encodable { let conversationId: Int let emotion: String let summary: String diff --git a/GAMSS/Sources/Data/Endpoint/CardEndpoint.swift b/GAMSS/Sources/Data/Endpoint/CardEndpoint.swift index ecd94fa..6a165af 100644 --- a/GAMSS/Sources/Data/Endpoint/CardEndpoint.swift +++ b/GAMSS/Sources/Data/Endpoint/CardEndpoint.swift @@ -9,7 +9,7 @@ import Foundation enum CardEndpoint: Endpoint { case fetchCards(date: String) - case createCard(CreateCardsRequestDTO) + case createCard(CreateCardRequestDTO) case deleteAllCards case fetchCard(cardId: String) case deleteCard(cardId: String) From 420581cb8d6a78344300c43cf36be5ccfe86e942 Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Sun, 9 Aug 2026 18:26:28 +0900 Subject: [PATCH 09/12] =?UTF-8?q?[FEAT]=20Auth=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=ED=97=A4=EB=8D=94=EA=B0=92=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift b/GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift index 3651084..a582c1e 100644 --- a/GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift +++ b/GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift @@ -45,5 +45,12 @@ enum AuthEndpoint: Endpoint { } } - var header: HTTPHeader { .default } + var header: HTTPHeader { + switch self { + case .login, .reissueToken: + return .default + case .logout: + return .authorization + } + } } From 50ee303d6bd2490e36bae31ce4cf22e7f5213f3e Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Sun, 9 Aug 2026 18:26:45 +0900 Subject: [PATCH 10/12] =?UTF-8?q?[CHORE]=20case=20let=EB=AC=B8=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=BD=94=EB=93=9C=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift | 4 ++-- GAMSS/Sources/Data/Endpoint/CardEndpoint.swift | 12 ++++++------ GAMSS/Sources/Data/Endpoint/ChatEndpoint.swift | 6 +++--- GAMSS/Sources/Data/Endpoint/MemberEndpoint.swift | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift b/GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift index a582c1e..a9c41b4 100644 --- a/GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift +++ b/GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift @@ -36,11 +36,11 @@ enum AuthEndpoint: Endpoint { var parameters: [RequestParameter] { switch self { - case .login(let request): + case let .login(request): return [.body(request)] case .logout: return [] - case .reissueToken(let request): + case let .reissueToken(request): return [.body(request)] } } diff --git a/GAMSS/Sources/Data/Endpoint/CardEndpoint.swift b/GAMSS/Sources/Data/Endpoint/CardEndpoint.swift index 6a165af..c6623d2 100644 --- a/GAMSS/Sources/Data/Endpoint/CardEndpoint.swift +++ b/GAMSS/Sources/Data/Endpoint/CardEndpoint.swift @@ -56,19 +56,19 @@ enum CardEndpoint: Endpoint { var parameters: [RequestParameter] { switch self { - case .fetchCards(let date): + case let .fetchCards(date): return [.query(["date": date])] - case .createCard(let request): + case let .createCard(request): return [.body(request)] case .deleteAllCards: return [] - case .fetchCard(let cardId): + case .fetchCard: return [] - case .deleteCard(let cardId): + case .deleteCard: return [] - case .fetchMonthlyCards(let yearMonth): + case let .fetchMonthlyCards(yearMonth): return [.query(["yearMonth": yearMonth])] - case .deleteCardsByEmotion(let emotion): + case .deleteCardsByEmotion: return [] } } diff --git a/GAMSS/Sources/Data/Endpoint/ChatEndpoint.swift b/GAMSS/Sources/Data/Endpoint/ChatEndpoint.swift index 0a8ab3f..08a8a9d 100644 --- a/GAMSS/Sources/Data/Endpoint/ChatEndpoint.swift +++ b/GAMSS/Sources/Data/Endpoint/ChatEndpoint.swift @@ -67,15 +67,15 @@ enum ChatEndpoint: Endpoint { switch self { case .endChat: return [] - case .createMessage(let request): + case let .createMessage(request): return [.body(request)] - case .createComment(let request): + case let .createComment(request): return [.body(request)] case .createReply: return [] case let .updateTitle(_, request): return [.body(request)] - case .fetchChats(let date): + case let .fetchChats(date): return [.query(["date": date])] case .fetchMessages: return [] diff --git a/GAMSS/Sources/Data/Endpoint/MemberEndpoint.swift b/GAMSS/Sources/Data/Endpoint/MemberEndpoint.swift index 5ef752d..ebd8155 100644 --- a/GAMSS/Sources/Data/Endpoint/MemberEndpoint.swift +++ b/GAMSS/Sources/Data/Endpoint/MemberEndpoint.swift @@ -43,7 +43,7 @@ enum MemberEndpoint: Endpoint { switch self { case .fetchMyProfile: return [] - case .updateNickname(let request): + case let .updateNickname(request): return [.body(request)] case .deleteAccount: return [] From e3a698a11b4bdf1ae7013f44a37b0f39b4d64257 Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Sun, 9 Aug 2026 18:33:14 +0900 Subject: [PATCH 11/12] =?UTF-8?q?[CHORE]=20=ED=8C=8C=EB=9D=BC=EB=AF=B8?= =?UTF-8?q?=ED=84=B0=EA=B4=80=EB=A0=A8=20=EC=97=AC=EB=9F=AC=20=EC=BC=80?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20query=EC=B6=94=EA=B0=80=20=EC=8B=9C=20?= =?UTF-8?q?=EC=83=9D=EB=9E=B5=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GAMSS/Sources/Core/Network/Foundation/Endpoint.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GAMSS/Sources/Core/Network/Foundation/Endpoint.swift b/GAMSS/Sources/Core/Network/Foundation/Endpoint.swift index f7843c0..274fda2 100644 --- a/GAMSS/Sources/Core/Network/Foundation/Endpoint.swift +++ b/GAMSS/Sources/Core/Network/Foundation/Endpoint.swift @@ -32,7 +32,7 @@ extension Endpoint { for parameter in parameters { switch parameter { case let .query(query): - components.queryItems = query.map { + components.queryItems = (components.queryItems ?? []) + query.map { URLQueryItem( name: $0.key, value: $0.value From a4ac425c553a72d41376f068b26c40f5bbfe28cd Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Sun, 9 Aug 2026 18:52:42 +0900 Subject: [PATCH 12/12] =?UTF-8?q?[CHORE]=20HTTPHeader=20=EA=B3=B5=EC=9A=A9?= =?UTF-8?q?=20=ED=95=84=EB=93=9C=20=EA=B0=9C=EC=84=A0=20=EB=B0=8F=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Network/Foundation/HttpHeader.swift | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/GAMSS/Sources/Core/Network/Foundation/HttpHeader.swift b/GAMSS/Sources/Core/Network/Foundation/HttpHeader.swift index 628d964..2fca924 100644 --- a/GAMSS/Sources/Core/Network/Foundation/HttpHeader.swift +++ b/GAMSS/Sources/Core/Network/Foundation/HttpHeader.swift @@ -12,24 +12,26 @@ enum HTTPHeader { case authorization case custom([String: String]) + private var commonFields: [String: String] { + [ + "Content-Type": "application/json", + "Accept": "application/json" + ] + } + var fields: [String: String] { switch self { case .default: - return [ - "Content-Type": "application/json", - "Accept": "application/json" - ] + return commonFields case .authorization: - guard let accessToken = TokenStorage.shared.readToken(.accessToken) else { - return [:] + var fields = commonFields + + if let accessToken = TokenStorage.shared.readToken(.accessToken) { + fields["Authorization"] = "Bearer \(accessToken)" } - return [ - "Content-Type": "application/json", - "Accept": "application/json", - "Authorization": "Bearer \(accessToken)" - ] + return fields case let .custom(headers): return headers