Skip to content

Conversation

@JinUng41
Copy link
Collaborator

👻 PULL REQUEST

📄 작업 내용

  • 소식 탭의 큐레이션 UI를 구현하였습니다.
  • URL이동은 네이버로 임시 구현하였습니다.
  • API 명세서가 나오는대로 서버를 통한 작업을 이어나갈 예정입니다.
구현 내용 iPhone 13 mini
페이징
새로고침
URL이동
엠티뷰

🔗 연결된 이슈

@JinUng41 JinUng41 requested review from Copilot and youz2me October 16, 2025 15:49
@JinUng41 JinUng41 self-assigned this Oct 16, 2025
@JinUng41 JinUng41 added ✨ feat 기능 또는 객체 구현 🍻 진웅 술 한잔 가온나~ labels Oct 16, 2025
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements the UI for the curation tab in the news section, featuring paginated content loading with pull-to-refresh functionality. The implementation includes a view controller, cell, view model, and data model for displaying curated content items.

Key changes:

  • Created complete MVVM architecture for curation feature with pagination support
  • Implemented custom collection view cell with press animation and URL navigation
  • Added mock data generation for testing until API specification is available

Reviewed Changes

Copilot reviewed 6 out of 9 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
CurationViewController.swift Main view controller implementing collection view with pull-to-refresh and pagination
CurationCell.swift Custom cell displaying thumbnail, title, source with tap interaction
CurationViewModel.swift View model handling data fetching, pagination logic with mock data
CurationItem.swift Data model with mock samples for curation content
project.pbxproj Xcode project file updates for new source files
btn_curation.imageset/Contents.json Asset catalog entry for curation button icon

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Comment on lines +11 to +14
final class CurationViewModel {

private var lastItemID: UUID?
private var hasMore: Bool = false
Copy link

Copilot AI Oct 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The properties lastItemID and hasMore are accessed from multiple threads (main queue and processingQueue) without synchronization, creating potential race conditions. Consider using @MainActor for the class or protecting these properties with proper synchronization.

Copilot uses AI. Check for mistakes.
title: item.title,
source: item.source
) {
UIApplication.shared.open(URL(string: "https://www.naver.com")!)
Copy link

Copilot AI Oct 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Force unwrapping the URL will crash if the string is invalid. Use guard let or if let to safely unwrap the URL before opening it.

Suggested change
UIApplication.shared.open(URL(string: "https://www.naver.com")!)
if let url = URL(string: "https://www.naver.com") {
UIApplication.shared.open(url)
}

Copilot uses AI. Check for mistakes.
$0.isAccessibilityElement = false
}

private let descriptionView = UIView(backgroundColor: UIColor("F7F7F7")).then {
Copy link

Copilot AI Oct 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The color value 'F7F7F7' is a magic value. Consider defining it as a named color in the asset catalog or as a constant to improve maintainability.

Copilot uses AI. Check for mistakes.
Copy link
Member

@youz2me youz2me left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다~!


import UIKit


Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

음? 여기 개행이 두번 들어갔어요

$0.contentMode = .scaleAspectFill
$0.clipsToBounds = true
$0.backgroundColor = .gray200
$0.isAccessibilityElement = false
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오... 이건 어떤 프로퍼티인가요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

접근성(예: VoiceOver)등을 위한 프로퍼티인데, 코파일럿 자동완성시치가 했던것을 지우지 않았습니다.

지우도록 하겠습니다.

Comment on lines 25 to 33
private let authorLabel = UILabel().then {
$0.attributedText = "와블 큐레이터".pretendardString(with: .body3)
$0.textColor = .wableBlack
}

private let timeLabel = UILabel().then {
$0.attributedText = "· 2시간 전".pretendardString(with: .caption4)
$0.textColor = .gray500
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이렇게 해두면 통신을 통해 데이터가 들어가기 전에 유저에게 보여질 위험이 있어서 저는 공백으로 해두는 편이긴 합니다

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그거 아주 좋은 생각 같습니다.
반영하겠습니다.

@github-project-automation github-project-automation bot moved this to In Review in Wable-iOS Oct 17, 2025
- 빈 줄 삭제
- 빈 문자열로 대체
- 관련 없는 코드 제거
@JinUng41 JinUng41 merged commit af80cf8 into develop Oct 17, 2025
@github-project-automation github-project-automation bot moved this from In Review to Done in Wable-iOS Oct 17, 2025
@JinUng41 JinUng41 deleted the feat/#289-overview-curation branch October 17, 2025 18:04
youz2me pushed a commit that referenced this pull request Oct 26, 2025
[Feat] 소식 탭 큐레이션 UI 구현하기
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ feat 기능 또는 객체 구현 🍻 진웅 술 한잔 가온나~

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[Feat] 큐레이션 UI 구현하기

3 participants