Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
115e197
[Feat] #697 - 서재 아이콘 Asset에 등록
onesunny2 Apr 29, 2026
64829a0
[Feat] #697 - 서재 탭 네비게이션에 서재아이콘 추가
onesunny2 Apr 29, 2026
285c18d
[Feat] #697 - 서재 아이콘 클릭 시 일반검색화면으로 이동
onesunny2 Apr 29, 2026
6acb275
[Fix] #697 - 아이콘 파일명 수정
Guryss Apr 30, 2026
f1392a7
Merge pull request #698 from Team-WSS/Feat/#697
Guryss Apr 30, 2026
0fee151
[Chore] #694 - 일반 검색 플레이스 홀더 변경
onesunny2 Apr 23, 2026
a3bf461
[Chore] #694 - SearchViewModel에서 소소픽 Input/Output 및 API 로직 제거
onesunny2 Apr 23, 2026
5c41ec1
[Chore] #694 - SearchView/ViewController에서 소소픽 UI 및 바인딩 제거
onesunny2 Apr 23, 2026
726afd2
[Feat] #694 - NormalSearchViewModel에 소소픽 데이터 처리 추가
onesunny2 Apr 23, 2026
bac52bb
[Feat] #694 - NormalSearchView에 sosoPickView 추가
onesunny2 Apr 23, 2026
24052ad
[Feat] #694 - NormalSearchViewController에 소소픽 바인딩 추가
onesunny2 Apr 23, 2026
2ec9be7
[Fix] #694 - StringLiterals 중복사항 수정
Guryss Apr 30, 2026
f722177
[Fix[ #694 - 매력포인트 필력 누락사항 추가
Guryss Apr 30, 2026
3afcf91
Merge pull request #696 from Team-WSS/Feat/#694
Guryss Apr 30, 2026
81064ba
[Fix] #693 - 피드 작성 이미지 추가 시 연결작품 UI 상단에 있도록 stackView 위치값 수정
Guryss Apr 30, 2026
ab8340c
Merge pull request #700 from Team-WSS/Fix/#693
Guryss Apr 30, 2026
2e81a63
[Feat] #695 - HomeView 내 상세탐색 배너뷰 추가
Guryss Apr 29, 2026
90ef0ef
[Feat] #695 - 상세탐색 뷰 전환 방식 바텀시트 -> 네비게이션으로 변경
Guryss Apr 29, 2026
98e7298
[Feat] #695 - 상세탐색 내 headerView 수정 및 CTAButton 추가
Guryss Apr 29, 2026
a8d6295
[Chore] #695 - 연재상태 Enum case 순서 변경
Guryss Apr 29, 2026
a3dedb8
[Chore] #695 - 상세탐색 내 소설 장르 순서 반영
Guryss Apr 29, 2026
f2231c4
[Refactor] #695 - 기존 NovelGenre 제거 및 NewNovelGenre 통합 후 NovelGenre 변수…
Guryss Apr 29, 2026
bc86ea3
[Fix] #695 - KeywordLink 높이 레이아웃 중복 충돌 에러 수정
Guryss Apr 29, 2026
f03f044
[Chore] #695 - PublicationStatus 변수명 수정 및 기존 별점 버튼 제거
Guryss Apr 29, 2026
354b04e
[Feat] #695 - 상세탐색 내 별점 투 핸들 슬라이더 기능 추가
Guryss Apr 29, 2026
5915ef4
[Feat] #695 - 단일 페이지뷰 로직 수정 및 별점 슬라이더 API 연결 수정
Guryss Apr 30, 2026
7bc8ceb
[Chore] #695 - 탐색 탭 제거
Guryss Apr 30, 2026
b3e8a29
[Feat] #695 - 홈 관심글 UI 영역 제거
Guryss Apr 30, 2026
716e0be
[Feat] #695 - 결과뷰 내 서치바 클릭 시 pop 되도록 기능 추가 및 StringLiterals 추가
Guryss Apr 30, 2026
09fb475
[Chore] #695 - DetailSearch 뒤로가기 스와이프 기능 추가
Guryss Apr 30, 2026
eae25f2
[Chore] #695 - navigationItem 버튼 liquid glass UI 제거
Guryss Apr 30, 2026
f73afbd
[Chore] #695 - UserFeedListEntity내 createdDate 포맷팅함수 제거
Guryss Apr 30, 2026
e09dbb5
Merge pull request #699 from Team-WSS/Feat/#695
Guryss Apr 30, 2026
fa98a71
Merge pull request #699 from Team-WSS/Feat/#695
Guryss Apr 30, 2026
568d553
[Feat] #701 - 비로그인 시 상세탐색 배너, 일반탐색 결과 리스트 클릭 시 비로그인 모달 기능 추가
Guryss May 3, 2026
28e8310
[Feat] #701 - 상세탐색 결과 뷰 전환 함수 추출 및 API 쿼리 변수명 적용
Guryss May 3, 2026
01b1f09
[Fix] #701 - 바인딩된 NovelGenre 값 수정
Guryss May 3, 2026
3448105
[Feat] #701 - 선택한 옵션에 따른 결과뷰 UX라이팅값 변경 적용
Guryss May 3, 2026
4afe5b9
[Fix] #701 - 장르 중복 적용되는 문제사항 해결
Guryss May 9, 2026
c47f54a
[Chore] #701 - 홈 - 상세탐색 유도 배너 뷰 UI 수정
Guryss May 9, 2026
a1c3a37
[Chore] #701 - 작품 평가 뷰 기획 변경에 따른 UI 수정
Guryss May 11, 2026
392ca03
[Fix] #701- DetailSearchResultVC 네비바 hidden을 viewWillAppear에 추가
Guryss May 11, 2026
38dc512
Merge pull request #702 from Team-WSS/Fix/#701
Guryss May 18, 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
8 changes: 4 additions & 4 deletions WSSiOS.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 2026040801;
CURRENT_PROJECT_VERSION = 2026051101;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 9SVDHQS4M3;
GENERATE_INFOPLIST_FILE = YES;
Expand All @@ -356,7 +356,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.6.0;
MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = kr.websoso.debug2;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
Expand All @@ -383,7 +383,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 2026040801;
CURRENT_PROJECT_VERSION = 2026051101;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 9SVDHQS4M3;
GENERATE_INFOPLIST_FILE = YES;
Expand All @@ -401,7 +401,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.6.0;
MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = kr.websoso;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
Expand Down
16 changes: 8 additions & 8 deletions WSSiOS/Network/Search/SearchService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ protocol SearchService {
func searchNormalNovels(query: String, page: Int, size: Int) -> Single<NormalSearchNovels>
func searchDetailNovels(genres: [String],
isCompleted: Bool?,
novelRating: Float?,
lowerNovelRating: Float,
upperNovelRating: Float,
keywordIds: [Int],
page: Int,
size: Int) -> Single<DetailSearchNovels>
Expand Down Expand Up @@ -70,7 +71,8 @@ extension DefaultSearchService: SearchService {

func searchDetailNovels(genres: [String],
isCompleted: Bool?,
novelRating: Float?,
lowerNovelRating: Float,
upperNovelRating: Float,
keywordIds: [Int],
page: Int,
size: Int) -> Single<DetailSearchNovels> {
Expand All @@ -79,17 +81,15 @@ extension DefaultSearchService: SearchService {
URLQueryItem(name: "genres", value: genres.joined(separator: ",")),
URLQueryItem(name: "keywordIds", value: keywordIds.map { String($0) }.joined(separator: ",")),
URLQueryItem(name: "page", value: String(page)),
URLQueryItem(name: "size", value: String(size))
URLQueryItem(name: "size", value: String(size)),
URLQueryItem(name: "novelRatingStart", value: String(lowerNovelRating)),
URLQueryItem(name: "novelRatingEnd", value: String(upperNovelRating))
]

if let isCompleted = isCompleted {
detailSearchQueryItems.append(URLQueryItem(name: "isCompleted", value: String(isCompleted)))
}

if let novelRating = novelRating {
detailSearchQueryItems.append(URLQueryItem(name: "novelRating", value: String(novelRating)))
}


do {
let request = try makeHTTPRequest(method: .get,
path: URLs.Search.detailSearch,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "imgHomeDetailSearch.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "imgHomeDetailSearch@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "imgHomeDetailSearch@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "icAttractiveWritingSkill.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "mdi_book-plus-outline.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions WSSiOS/Resource/Constants/Strings/StringLiterals+Home.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@ extension StringLiterals {
static let interest = "님의 관심글"
static let notLoggedInInterest = "・ :*관심글*: ・"
static let recommend = "이 웹소설은 어때요? (´ヮ`)ノ📚"
static let detailSearchBanner = "뭐 읽을지 고민될 때"
}

enum SubTitle {
static let interest = "관심 등록한 작품의 최신 글이에요"
static let recommend = "선호 장르를 기반으로 추천해드려요"
static let detailSearchBanner = "장르, 연재상태, 별점, 키워드로 작품 찾기"
}

enum Login {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ extension StringLiterals {
}

enum Date {
static let addDate = "날짜 추가"
static let addDate = "날짜 추가"
static let complete = "완료"
static let removeDate = "날짜 삭제"
static let startDate = "시작 날짜"
Expand Down
2 changes: 2 additions & 0 deletions WSSiOS/Resource/Constants/Strings/StringLiterals+Search.swift
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,7 @@ extension StringLiterals {
static let placeHolder = "키워드를 검색하세요"

static let empty = "해당하는 작품이 없어요\n검색의 범위를 더 넓혀보세요"

static let applyOption = "장르, 연재상태, 별점, 키워드 적용"
}
}
45 changes: 32 additions & 13 deletions WSSiOS/Resource/Extensions/UIViewController+.swift
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ extension UIViewController {
self.navigationItem.title = title
self.navigationItem.leftBarButtonItem = left != nil ? UIBarButtonItem(customView: left!) : nil
self.navigationItem.rightBarButtonItem = right != nil ? UIBarButtonItem(customView: right!) : nil
if #available(iOS 26.0, *) {
self.navigationItem.leftBarButtonItem?.hidesSharedBackground = true
self.navigationItem.rightBarButtonItem?.hidesSharedBackground = true
}
setNavigationBarVisibleBeforeScroll(isVisible: isVisibleBeforeScroll)
}

Expand All @@ -69,7 +73,7 @@ extension UIViewController {
]
$0.shadowColor = .clear
}

let whiteAppearance = UINavigationBarAppearance().then {
$0.configureWithOpaqueBackground()
$0.backgroundColor = .white
Expand All @@ -80,7 +84,7 @@ extension UIViewController {
]
$0.shadowColor = .clear
}

navigationItem.standardAppearance = whiteAppearance
navigationItem.scrollEdgeAppearance = isVisible ? whiteAppearance : clearAppearance
}
Expand Down Expand Up @@ -306,17 +310,32 @@ extension UIViewController {
self.navigationController?.pushViewController(viewController, animated: true)
}

func presentToDetailSearchViewController(selectedKeywordList: [KeywordData],
previousViewInfo: PreviousViewType,
selectedFilteredQuery: SearchFilterQuery) {
func pushToDetailSearchViewController() {
let detailSearchViewController = DetailSearchViewController(
viewModel: DetailSearchViewModel(
keywordRepository: DefaultKeywordRepository(
keywordService: DefaultKeywordService()),
selectedKeywordList: selectedKeywordList,
previousViewInfo: previousViewInfo,
selectedFilteredQuery: selectedFilteredQuery))
self.presentModalViewController(detailSearchViewController)
keywordService: DefaultKeywordService()
)
)
)
detailSearchViewController.navigationController?.isNavigationBarHidden = true
detailSearchViewController.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(detailSearchViewController,
animated: true)
}

func pushToDetailSearchResultViewController(option: SearchFilterQuery) {
let detailSearchResultViewController = DetailSearchResultViewController(
viewModel: DetailSearchResultViewModel(
searchRepository: DefaultSearchRepository(
searchService: DefaultSearchService()),
option: option
)
)
detailSearchResultViewController.navigationController?.isNavigationBarHidden = true
detailSearchResultViewController.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(detailSearchResultViewController,
animated: true)
}

func presentInduceLoginViewController() {
Expand Down Expand Up @@ -363,8 +382,8 @@ extension UIViewController {

func pushToChangeUserInfoViewController() {
let viewController = MyPageChangeUserInfoViewController(
userRepository: DefaultUserInfoRepository(
userService: DefaultUserService()
userRepository: DefaultUserInfoRepository(
userService: DefaultUserService()
)
)
viewController.hidesBottomBarWhenPushed = true
Expand All @@ -373,7 +392,7 @@ extension UIViewController {

func pushToLibraryViewController(userId: Int, pageIndex: Int = 0) {
let viewController = UserLibraryViewController(userId: userId)

viewController.setPageIndex(target: pageIndex)
viewController.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(viewController, animated: true)
Expand Down
3 changes: 3 additions & 0 deletions WSSiOS/Source/Data/Base/AttractivePoint.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import UIKit
enum AttractivePoint: String, CaseIterable, Codable {
case worldview = "worldview"
case material = "material"
case writingSkill = "writingskill"
case character = "character"
case relationship = "relationship"
case vibe = "vibe"
Expand All @@ -18,6 +19,7 @@ enum AttractivePoint: String, CaseIterable, Codable {
switch self {
case .worldview: "세계관"
case .material: "소재"
case .writingSkill: "필력"
case .character: "캐릭터"
case .relationship: "관계"
case .vibe: "분위기"
Expand All @@ -28,6 +30,7 @@ enum AttractivePoint: String, CaseIterable, Codable {
switch self {
case .worldview: .icAttractiveWorldview
case .material: .icAttractiveMaterial
case .writingSkill: .icAttractiveWritingSkill
case .character: .icAttractiveCharacter
case .relationship: .icAttractiveRelationship
case .vibe: .icAttractiveVibe
Expand Down
41 changes: 8 additions & 33 deletions WSSiOS/Source/Data/Base/NovelGenre.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,33 +8,6 @@
import UIKit

enum NovelGenre: String, CaseIterable {
case romance, romanceFantasy, fantasy, modernFantasy, wuxia, BL, lightNovel, mystery, drama

var toKorean: String {
switch self {
case .romanceFantasy:
return "로판"
case .romance:
return "로맨스"
case .fantasy:
return "판타지"
case .modernFantasy:
return "현판"
case .drama:
return "드라마"
case .lightNovel:
return "라노벨"
case .wuxia:
return "무협"
case .mystery:
return "미스터리"
case .BL:
return "BL"
}
}
}

enum NewNovelGenre: String, CaseIterable {
case all = "all"
case fantasy = "fantasy"
case modernFantasy = "modernFantasy"
Expand Down Expand Up @@ -77,7 +50,7 @@ enum NewNovelGenre: String, CaseIterable {
}
}

static func withKoreanRawValue(from genre: String) -> NewNovelGenre {
static func withKoreanRawValue(from genre: String) -> NovelGenre {
switch genre {
case "전체":
return .all
Expand Down Expand Up @@ -236,9 +209,11 @@ enum NewNovelGenre: String, CaseIterable {
}
}

extension NewNovelGenre {
static let onboardingGenres: [NewNovelGenre] = [.romance, .romanceFantasy, .bl, .fantasy, .modernFantasy, .wuxia, .lightNovel, .drama, .mystery]
static let feedMaleGenres: [NewNovelGenre] = [.all, .fantasy, .modernFantasy, .wuxia, .drama, .mystery, .lightNovel, .romance, .romanceFantasy, .bl, .etc]
static let feedFemaleGenres: [NewNovelGenre] = [.all, .romance, .romanceFantasy, .bl, .fantasy, .modernFantasy, .wuxia, .drama, .mystery, .lightNovel, .etc]
static let feedFilterGenres: [NewNovelGenre] = [.fantasy, .modernFantasy, .romance, .romanceFantasy, .wuxia, .mystery, .drama, .lightNovel, .bl, .etc]
extension NovelGenre {
static let onboardingGenres: [NovelGenre] = [.romance, .romanceFantasy, .bl, .fantasy, .modernFantasy, .wuxia, .lightNovel, .drama, .mystery]
static let feedMaleGenres: [NovelGenre] = [.all, .fantasy, .modernFantasy, .wuxia, .drama, .mystery, .lightNovel, .romance, .romanceFantasy, .bl, .etc]
static let feedFemaleGenres: [NovelGenre] = [.all, .romance, .romanceFantasy, .bl, .fantasy, .modernFantasy, .wuxia, .drama, .mystery, .lightNovel, .etc]
static let feedFilterGenres: [NovelGenre] = [.fantasy, .modernFantasy, .romance, .romanceFantasy, .wuxia, .mystery, .drama, .lightNovel, .bl, .etc]
static let detailSearchGenres: [NovelGenre] = [.fantasy, .modernFantasy, .romance, .romanceFantasy, .wuxia, .mystery, .drama, .lightNovel, .bl]
static let myPageEditGenres: [NovelGenre] = [.romance, .romanceFantasy, .fantasy, .modernFantasy, .wuxia, .bl, .lightNovel, .mystery, .drama]
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,25 @@

import Foundation

enum CompletedStatus: String, CaseIterable {
enum PublicationStatus: String, CaseIterable {
case onGoing
case completed
case notCompleted

var description: String {
switch self {
case .onGoing: return "연재중"
case .completed: return "완결작"
case .notCompleted: return "연재중"
}
}

var isCompleted: Bool {
switch self {
case .onGoing: return false
case .completed: return true
case .notCompleted: return false
}
}

init(isCompleted: Bool) {
self = isCompleted ? .completed : .notCompleted
self = isCompleted ? .completed : .onGoing
}
}
2 changes: 1 addition & 1 deletion WSSiOS/Source/Data/Entity/Feed/FeedEntity.swift
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ extension FeedResponse {
let title = self.title,
let rating = self.novelRating,
let genreRaw = self.novelGenre,
let genre = NewNovelGenre(rawValue: genreRaw),
let genre = NovelGenre(rawValue: genreRaw),
let description = self.novelDescription,
let thumbnailPath = self.novelThumbnailImage,
let thumbnailURL = KingFisherRxHelper.makeImageURLString(path: thumbnailPath)
Expand Down
2 changes: 1 addition & 1 deletion WSSiOS/Source/Data/Entity/Feed/FeedFilter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,6 @@ enum FeedVisibilityOption: CaseIterable {
}

struct FeedFilterOption: Equatable {
var genres: [NewNovelGenre] = NewNovelGenre.feedFilterGenres
var genres: [NovelGenre] = NovelGenre.feedFilterGenres
var visibilityOptions: [FeedVisibilityOption] = [.public, .private]
}
Loading