From e55516e477f363e0ce76e198ef1b4ac15e7e21e3 Mon Sep 17 00:00:00 2001 From: kangddong Date: Tue, 13 Jan 2026 00:37:50 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20Home=EC=9D=B8=EA=B8=B0=EA=B2=8C?= =?UTF-8?q?=EC=8B=9C=EA=B8=80=EC=97=90=EC=84=9C=20=EA=B2=8C=EC=8B=9C?= =?UTF-8?q?=EA=B8=80=20=EC=83=81=EC=84=B8=20=EB=9D=BC=EC=9A=B0=ED=8C=85=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Hambug/ContentView.swift | 10 ++--- Home/Package.swift | 11 +++++- Home/Sources/Presentation/HomeView.swift | 16 +++++++- MyPage/Package.swift | 3 +- .../Presentation/MyActivitiesView.swift | 35 ------------------ hambug_logo.png | Bin 9849 -> 0 bytes 6 files changed, 30 insertions(+), 45 deletions(-) delete mode 100644 hambug_logo.png diff --git a/Hambug/ContentView.swift b/Hambug/ContentView.swift index b6dbaa9..b67f396 100644 --- a/Hambug/ContentView.swift +++ b/Hambug/ContentView.swift @@ -12,8 +12,8 @@ import HomeDI import CommunityPresentation import CommunityDI import SharedUI -//import MyPagePresentation -//import MyPageDI +import MyPagePresentation +import MyPageDI struct ContentView: View { @Environment(AppDIContainer.self) var appContainer @@ -26,9 +26,9 @@ struct ContentView: View { CommunityDIContainer(appContainer: appContainer) } -// private var mypageDIContainer: MyPageDIContainer { -// MyPageDIContainer(appContainer: appContainer) -// } + private var mypageDIContainer: MyPageDIContainer { + MyPageDIContainer(appContainer: appContainer) + } @State private var selectedTab: Int = 0 diff --git a/Home/Package.swift b/Home/Package.swift index 8e82dab..98d24b2 100644 --- a/Home/Package.swift +++ b/Home/Package.swift @@ -33,6 +33,7 @@ let package = Package( .package(name: "Common", path: "../Common"), .package(name: "DI", path: "../DI"), .package(name: "Infrastructure", path: "../Infrastructure"), + .package(name: "Community", path: "../Community"), ], targets: [ .target( @@ -48,7 +49,12 @@ let package = Package( ], ), // Domain: 의존하지않음 - .target(config: .domain), + .target( + config: .domain, + dependencies: [ + .product(name: "CommunityDomain", package: "Community") + ] + ), // Data: Domain에 의존 .target( @@ -57,6 +63,8 @@ let package = Package( .target(config: .domain), .product(name: "NetworkInterface", package: "Infrastructure"), .product(name: "Util", package: "Common"), + .product(name: "SharedDomain", package: "Common"), + .product(name: "CommunityDomain", package: "Community"), ], ), @@ -67,6 +75,7 @@ let package = Package( .target(config: .domain), .product(name: "DesignSystem", package: "Common"), .product(name: "SharedUI", package: "Common"), + .product(name: "Community", package: "Community"), ], ), ] diff --git a/Home/Sources/Presentation/HomeView.swift b/Home/Sources/Presentation/HomeView.swift index 3e1a232..82e76e5 100644 --- a/Home/Sources/Presentation/HomeView.swift +++ b/Home/Sources/Presentation/HomeView.swift @@ -9,6 +9,8 @@ import SwiftUI import HomeDomain import DesignSystem import SharedUI +import CommunityDI +import CommunityPresentation public struct HomeView: View { @@ -49,9 +51,11 @@ public struct HomeView: View { struct PopularPostsView: View { private let postItems: [TrendingPost] - + private let communityDIContainer: CommunityDIContainer + init(postItems: [TrendingPost]) { self.postItems = postItems + self.communityDIContainer = .init(appContainer: .shared) } var body: some View { @@ -60,7 +64,15 @@ struct PopularPostsView: View { VStack(spacing: 0) { ForEach(postItems) { post in - PostView(post: post) + NavigationLink( + destination: CommunityDetailView( + viewModel: communityDIContainer.makeDetailViewModel(), + boardId: post.id, + updateFactory: communityDIContainer, + reportFactory: communityDIContainer + )) { + PostView(post: post) + } } } .background(.white) diff --git a/MyPage/Package.swift b/MyPage/Package.swift index e8cf787..5fc7542 100644 --- a/MyPage/Package.swift +++ b/MyPage/Package.swift @@ -75,9 +75,8 @@ let package = Package( .product(name: "LocalizedString", package: "Common"), .product(name: "SharedUI", package: "Common"), .product(name: "DesignSystem", package: "Common"), + .product(name: "Community", package: "Community"), .product(name: "CommunityDomain", package: "Community"), - .product(name: "CommunityPresentation", package: "Community"), - .product(name: "CommunityDI", package: "Community") ], path: Config.presentation.path ), diff --git a/MyPage/Sources/Presentation/MyActivitiesView.swift b/MyPage/Sources/Presentation/MyActivitiesView.swift index 73a5a75..13bd4ad 100644 --- a/MyPage/Sources/Presentation/MyActivitiesView.swift +++ b/MyPage/Sources/Presentation/MyActivitiesView.swift @@ -124,41 +124,6 @@ struct TabButton: View { } } -// MARK: - 게시글 리스트 뷰 -struct MyBoardsListView: View { - let boards: [Board] - let isLoadingMore: Bool - let onLoadMore: (Int) -> Void - - var body: some View { - ScrollView { - LazyVStack(spacing: 0) { - ForEach(Array(boards.enumerated()), id: \.element.id) { index, board in - NavigationLink(destination: Text("Board Detail \(board.id)")) { - MyBoardListCard(board: board) - } - .buttonStyle(PlainButtonStyle()) - .onAppear { onLoadMore(index) } - } - - if isLoadingMore { - HStack { - Spacer() - ProgressView() - Spacer() - } - .padding(.vertical, 16) - } - } - } - .background( - RoundedRectangle(cornerRadius: 8) - .fill(Color.white) - .shadow(color: Color.black.opacity(0.1), radius: 4.5, x: 0, y: 0) - ) - } -} - // MARK: - 게시글 카드 fileprivate struct MyBoardListCard: View { let board: Board diff --git a/hambug_logo.png b/hambug_logo.png deleted file mode 100644 index aa4184296c1453ec825a8b990fd8a071a469ade3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9849 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