Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 0 additions & 60 deletions GAMSS/Sources/Core/Network/Endpoint.swift

This file was deleted.

64 changes: 64 additions & 0 deletions GAMSS/Sources/Core/Network/Foundation/Endpoint.swift
Original file line number Diff line number Diff line change
@@ -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 = (components.queryItems ?? []) + query.map {
URLQueryItem(
name: $0.key,
value: $0.value
)
}
Comment thread
dlrjswns marked this conversation as resolved.

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
}
}
40 changes: 40 additions & 0 deletions GAMSS/Sources/Core/Network/Foundation/HttpHeader.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
//
// HttpHeader.swift
// GAMSS
//
// Created by 이건준 on 8/8/26.
//

import Foundation

enum HTTPHeader {
case `default`
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 commonFields

case .authorization:
var fields = commonFields

if let accessToken = TokenStorage.shared.readToken(.accessToken) {
fields["Authorization"] = "Bearer \(accessToken)"
}
Comment thread
dlrjswns marked this conversation as resolved.

return fields

case let .custom(headers):
return headers
}
}
}
16 changes: 16 additions & 0 deletions GAMSS/Sources/Core/Network/Foundation/HttpMethod.swift
Original file line number Diff line number Diff line change
@@ -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"
}
13 changes: 13 additions & 0 deletions GAMSS/Sources/Core/Network/Foundation/RequestParameter.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// RequestParameter.swift
// GAMSS
//
// Created by 이건준 on 8/8/26.
//

import Foundation

enum RequestParameter {
case query([String: String])
case body(Encodable)
}
12 changes: 12 additions & 0 deletions GAMSS/Sources/Data/DTO/Auth/Request/ReissueTokenRequestDTO.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//
// ReissueTokenRequestDTO.swift
// GAMSS
//
// Created by 이건준 on 8/8/26.
//

import Foundation

struct ReissueTokenRequestDTO: Encodable {
let refreshToken: String
}
14 changes: 14 additions & 0 deletions GAMSS/Sources/Data/DTO/Card/Request/CreateCardRequestDTO.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//
// CreateCardsRequestDTO.swift
// GAMSS
//
// Created by 이건준 on 8/8/26.
//

import Foundation

struct CreateCardRequestDTO: Encodable {
let conversationId: Int
let emotion: String
let summary: String
}
Comment thread
dlrjswns marked this conversation as resolved.
13 changes: 13 additions & 0 deletions GAMSS/Sources/Data/DTO/Chat/Request/CreateCommentRequestDTO.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// CreateCommentRequestDTO.swift
// GAMSS
//
// Created by 이건준 on 8/8/26.
//

import Foundation

struct CreateCommentRequestDTO: Encodable {
let messageId: Int
let currentConversationSummary: String
}
16 changes: 16 additions & 0 deletions GAMSS/Sources/Data/DTO/Chat/Request/CreateMessageRequestDTO.swift
Original file line number Diff line number Diff line change
@@ -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]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//
// UpdateChatTitleRequestDTO.swift
// GAMSS
//
// Created by 이건준 on 8/8/26.
//

import Foundation

struct UpdateChatTitleRequestDTO: Encodable {
let title: String
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//
// UpdateNicknameRequestDTO.swift
// GAMSS
//
// Created by 이건준 on 8/8/26.
//

import Foundation

struct UpdateNicknameRequestDTO: Encodable {
let nickname: String
}
27 changes: 25 additions & 2 deletions GAMSS/Sources/Data/Endpoint/AuthEndpoint.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,48 @@ 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"
}
}

var method: HTTPMethod {
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
return [.body(request)]
case .logout:
return []
case let .reissueToken(request):
return [.body(request)]
}
}

var header: HTTPHeader {
switch self {
case .login, .reissueToken:
return .default
case .logout:
return .authorization
}
}
}
Loading
Loading