Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
f8bf8af
[refactor] ViewControllerFactory 구현부 DIContainer로부터 분리
H0sungKim Jan 30, 2026
011f3b7
[refactor] di factory 형식 통일 작업 중
H0sungKim Jan 31, 2026
9c1a2fd
[refactor] di factory 형식 통일
H0sungKim Feb 2, 2026
9325c06
[refactor] API 리팩토링 작업 중
H0sungKim Feb 3, 2026
7193226
[chore] import 컨벤션 적용
H0sungKim Feb 3, 2026
a5140d8
[refactor] API 리팩토링 완료
H0sungKim Feb 4, 2026
db4e60e
[chore] 주석 및 개행
H0sungKim Feb 4, 2026
dc8dd01
[refactor] Auth DTO 리팩토링
H0sungKim Feb 5, 2026
49e036d
[refactor] Auth, Bookmark Service 리팩
H0sungKim Feb 5, 2026
8265757
[comment] 파일 명 주석
H0sungKim Feb 5, 2026
89ad95d
[refactor] Collection Service 리팩
H0sungKim Feb 5, 2026
9e76410
[refactor] DTO Foldering 변경
H0sungKim Feb 5, 2026
f107a52
[refactor] Service 리팩토링
H0sungKim Feb 6, 2026
9d8595c
[chore] parameter명 수정
H0sungKim Feb 6, 2026
f5dcf9b
[refactor] Repository 리팩토링
H0sungKim Feb 6, 2026
3ea20b8
[chore] return 명시
H0sungKim Feb 6, 2026
48d4a93
[chore] 개행 정리
H0sungKim Feb 6, 2026
5d0d1ca
[refactor] 함수 명 변경
H0sungKim Feb 7, 2026
39d5634
[refactor] Data 계층 함수 네이밍 수정
H0sungKim Feb 8, 2026
4266084
[refactor] UserProfileUseCase 분리
H0sungKim Feb 8, 2026
28971ca
[refactor] Auth UseCase 리팩토링 완료
H0sungKim Feb 8, 2026
908b5ba
[refactor] Bookmark UseCase 리팩토링
H0sungKim Feb 8, 2026
70bc09c
[refactor] Collection UseCase 리팩토링
H0sungKim Feb 8, 2026
f8e5f4c
[refactor] Home Entity 리팩토링
H0sungKim Feb 8, 2026
5630b5e
[refactor] Content UseCase 리팩토링
H0sungKim Feb 8, 2026
17ea8c8
[refactor] Home UseCase 리팩토링
H0sungKim Feb 8, 2026
f3101e7
[refactor] Search UseCase 리팩토링
H0sungKim Feb 8, 2026
35d8eaf
[refactor] nickname 리팩토링
H0sungKim Feb 8, 2026
5f64091
[refactor] Auth Entity 리팩토링
H0sungKim Feb 9, 2026
48f62a5
[refactor] Entity 리팩토링
H0sungKim Feb 9, 2026
5c82927
[refactor] LoginViewModel OnboardingViewModel 리팩토링
H0sungKim Feb 9, 2026
c8fdabd
[merge] Merge pull request #159 from imflint/refactor/#157-data
H0sungKim Feb 9, 2026
9cad5c0
[merge] Merge pull request #162 from imflint/refactor/#160-domain
H0sungKim Feb 9, 2026
1806f4a
[refactor] Collection UseCase Factory 리팩토링
H0sungKim Feb 9, 2026
922bbd8
[refactor] Content UseCase Factory 리팩토링
H0sungKim Feb 9, 2026
2eaf4d9
[refactor] UseCase Factory 리팩토링
H0sungKim Feb 9, 2026
e2f569c
[refactor] 빌드 성공
H0sungKim Feb 9, 2026
1e1321b
[merge] Merge pull request #163 from imflint/refactor/#161-presentation
H0sungKim Feb 9, 2026
1a089af
[feat] 탐색 탭 기능 개선
H0sungKim Feb 10, 2026
daac543
[refactor] DIContainer 수정
H0sungKim Feb 10, 2026
f1a3a76
[refactor] CollectionView dequeueReusableCell 함수 간소화
H0sungKim Feb 10, 2026
9e06b09
[refactor] CollectionInfoEntity 제거 & 중복되는 DTO 제거
H0sungKim Feb 13, 2026
ab2806c
[refactor] Onboarding Content Select 리팩토링
H0sungKim Feb 14, 2026
76e6751
[refactor] tableview dequereusablecell
H0sungKim Feb 15, 2026
5f55dd4
[comment] sticky header 주석 수정
H0sungKim Feb 15, 2026
d3fe3e3
[refactor] UseCase callAsFunction
H0sungKim Feb 17, 2026
44f0245
[refactor] OTT Entity 수정 작업 중
H0sungKim Feb 17, 2026
b8a9509
[refactor] Factory 리팩토링
H0sungKim Feb 17, 2026
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
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public struct NicknameCheckDTO: Codable {
extension NicknameCheckDTO {
public var isAvailable: Bool {
get throws {
return try unwrap(available, key: CodingKeys.available)
return try unwrap(available)
}
}
}
10 changes: 5 additions & 5 deletions FLINT/Data/Sources/DTO/Auth/SignupDTO.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//
// File.swift
// SignupDTO.swift
// Data
//
// Created by 김호성 on 2026.01.21.
Expand All @@ -19,16 +19,16 @@ extension SignupDTO {
public var loginEntity: LoginEntity {
get throws {
return try LoginEntity(
accessToken: unwrap(accessToken, key: CodingKeys.accessToken),
refreshToken: unwrap(refreshToken, key: CodingKeys.refreshToken),
userId: unwrap(userId, key: CodingKeys.userId)
accessToken: unwrap(accessToken),
refreshToken: unwrap(refreshToken),
userId: unwrap(userId)
)
}
}

public var userIdValue: String {
get throws {
return try unwrap(userId, key: CodingKeys.userId)
return try unwrap(userId)
}
}
}
4 changes: 2 additions & 2 deletions FLINT/Data/Sources/DTO/Auth/SignupRequestDTO.swift
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
//
// File.swift
// SignupRequestDTO.swift
// Data
//
// Created by 김호성 on 2026.01.23.
//

import Foundation

import Domain
import Entity

public struct SignupRequestDTO: Codable {
public let tempToken: String
Expand Down
13 changes: 0 additions & 13 deletions FLINT/Data/Sources/DTO/Auth/SocialRegisterDTO.swift

This file was deleted.

2 changes: 1 addition & 1 deletion FLINT/Data/Sources/DTO/Auth/SocialVerifyRequestDTO.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//
// File.swift
// SocialVerifyRequestDTO.swift
// Data
//
// Created by 김호성 on 2026.01.23.
Expand Down
11 changes: 1 addition & 10 deletions FLINT/Data/Sources/DTO/Auth/SocialVerifyResponseDTO.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//
// File.swift
// SocialVerifyResponseDTO.swift
// Data
//
// Created by 김호성 on 2026.01.23.
Expand All @@ -16,15 +16,6 @@ public struct SocialVerifyResponseDTO: Codable {
public let userId: String?
public let nickname: String?
public let tempToken: String?

public init(isRegistered: Bool, accessToken: String?, refreshToken: String?, userId: String?, nickname: String?, tempToken: String?) {
self.isRegistered = isRegistered
self.accessToken = accessToken
self.refreshToken = refreshToken
self.userId = userId
self.nickname = nickname
self.tempToken = tempToken
}
}

extension SocialVerifyResponseDTO {
Expand Down
2 changes: 1 addition & 1 deletion FLINT/Data/Sources/DTO/Base/BaseResponse.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//
// BaseResponseDTO.swift
// BaseResponse.swift
// FLINT
//
// Created by 진소은 on 1/10/26.
Expand Down
15 changes: 7 additions & 8 deletions FLINT/Data/Sources/DTO/Base/Unwrap.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//
// File.swift
// Unwrap.swift
// Data
//
// Created by 김호성 on 2026.01.21.
Expand All @@ -21,12 +21,11 @@ public enum DTOMappingError: Error, LocalizedError {
}
}

public func unwrap<T>(
_ value: T?,
key: CodingKey? = nil
) throws -> T {
guard let value else {
throw DTOMappingError.missingField(key?.stringValue)
extension Decodable {
public func unwrap<T>(_ value: T?) throws -> T {
guard let value else {
throw DTOMappingError.missingField("\(self)")
}
return value
}
return value
}
82 changes: 0 additions & 82 deletions FLINT/Data/Sources/DTO/Bookmark/CollectionBookmarkUsersDTO.swift

This file was deleted.

45 changes: 45 additions & 0 deletions FLINT/Data/Sources/DTO/Collection/CollectionDTO.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
//
// CollectionDTO.swift
// Data
//
// Created by 김호성 on 2026.02.09.
//

import Foundation

import Entity

public struct CollectionDTO: Codable {
public let id: String?
public let thumbnailUrl: String?
public let title: String?
public let description: String?
public let imageList: [String]?
public let bookmarkCount: Int?
public let isBookmarked: Bool?
public let userId: String?
public let nickname: String?
public let profileImageUrl: String?
}

extension CollectionDTO {
public var collectionEntity: CollectionEntity {
get throws {
return try CollectionEntity(
id: unwrap(id),
thumbnailUrl: URL(string: thumbnailUrl ?? ""),
title: title ?? "",
description: description ?? "",
imageList: imageList?.compactMap({ URL(string: $0) }) ?? [],
bookmarkCount: bookmarkCount ?? 0,
isBookmarked: isBookmarked ?? false,
user: UserProfileEntity(
id: unwrap(userId),
nickname: nickname ?? "",
profileImageUrl: URL(string: profileImageUrl ?? ""),
role: .unknown
)
)
}
}
}
56 changes: 20 additions & 36 deletions FLINT/Data/Sources/DTO/Collection/CollectionDetailDTO.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,41 +10,25 @@ import Foundation
import Entity

public struct CollectionDetailDTO: Codable {

public let status: Int?
public let message: String?
public let data: DataDTO?

public init(status: Int?, message: String?, data: DataDTO?) {
self.status = status
self.message = message
self.data = data
}
public let id: String?
public let title: String?
public let description: String?
public let thumbnailUrl: String?
public let createdAt: String?
public let isBookmarked: Bool?
public let author: AuthorDTO?
public let contents: [ContentDTO]?
}

// MARK: - Nested DTOs

public extension CollectionDetailDTO {

struct DataDTO: Codable {
public let id: String?
public let title: String?
public let description: String?
public let thumbnailUrl: String?
public let createdAt: String?
public let isBookmarked: Bool?
public let author: AuthorDTO?
public let contents: [ContentDTO]?
}

struct AuthorDTO: Codable {
extension CollectionDetailDTO {
public struct AuthorDTO: Codable {
public let id: String?
public let nickname: String?
public let profileImageUrl: String?
public let userRole: String?
}

struct ContentDTO: Codable {
public struct ContentDTO: Codable {
public let id: String?
public let title: String?
public let imageUrl: String?
Expand All @@ -57,7 +41,7 @@ public extension CollectionDetailDTO {
}
}

extension CollectionDetailDTO.DataDTO {
extension CollectionDetailDTO {
public var entity: CollectionDetailEntity {
get throws {
return try CollectionDetailEntity(
Expand All @@ -67,30 +51,30 @@ extension CollectionDetailDTO.DataDTO {
thumbnailUrl: URL(string: thumbnailUrl ?? ""),
createdAt: createdAt ?? "",
isBookmarked: isBookmarked ?? false,
author: try author?.entity,
contents: try (contents ?? []).map { try $0.entity }
author: unwrap(author?.entity),
contents: contents?.map { try $0.entity } ?? []
)
}
}
}

extension CollectionDetailDTO.AuthorDTO {
public var entity: CollectionAuthorEntity {
public var entity: UserProfileEntity {
get throws {
return try CollectionAuthorEntity(
return try UserProfileEntity(
id: unwrap(id),
nickname: nickname ?? "",
profileImageUrl: URL(string: profileImageUrl ?? ""),
userRole: userRole ?? ""
role: UserRole(rawValue: userRole ?? "") ?? .unknown
)
}
}
}

extension CollectionDetailDTO.ContentDTO {
public var entity: CollectionContentEntity {
public var entity: CollectionDetailEntity.CollectionContentEntity {
get throws {
return try CollectionContentEntity(
return try CollectionDetailEntity.CollectionContentEntity(
id: unwrap(id),
title: title ?? "",
imageUrl: URL(string: imageUrl ?? ""),
Expand Down
Loading