Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
cc27c5f
delete: koinUITest 타겟 삭제 및 파일 정리
oeunji Aug 8, 2026
4c1fa31
delete: 기존에 만들어진 koinUnitTest 삭제
oeunji Aug 8, 2026
849539a
add: 새로운 Unit Testing 타겟 추가
oeunji Aug 8, 2026
6569d18
add: Combine Publisher를 async로 브리징하는 테스트 헬퍼 추가
oeunji Aug 8, 2026
750b398
add: 식단 테스트용 Fixture 추가
oeunji Aug 8, 2026
6a2e0ed
add: DiningRepository Spy 추가
oeunji Aug 8, 2026
bb87523
add: DateProvider 시간대 판단 경계값 테스트 추가
oeunji Aug 8, 2026
7f45dcd
add: FetchDiningListUseCase 필터링/정렬 테스트 추가
oeunji Aug 8, 2026
4d126a0
add: ShareMenuListUseCase 식단 공유 테스트 추가
oeunji Aug 8, 2026
7316605
chore: 식단 테스트 파일을 koinUnitTests 타겟에 등록
oeunji Aug 8, 2026
4643366
delete: 빈 example() 테스트 삭제
oeunji Aug 8, 2026
39c2247
Merge pull request #523 from BCSDLab/test/dining
oeunji Aug 12, 2026
43c7dcb
design: 게시판 AI 요약 UI 구현
hgjwilly Aug 13, 2026
45643c4
Merge pull request #529 from BCSDLab/design/notice-ai-summary
hgjwilly Aug 13, 2026
5470518
feat: 게시판 AI 요약 API 작업
hgjwilly Aug 13, 2026
7dc2a74
Merge pull request #531 from BCSDLab/feat/notice-ai-summary
hgjwilly Aug 13, 2026
f6b88e5
delete: 중복 파일 삭제
hgjwilly Aug 13, 2026
d2bb0ec
refactor: ModalViewController, ModalViewControllerB 통합
hgjwilly Aug 13, 2026
444fb58
design: ModalViewController 애니메이션 개선
hgjwilly Aug 13, 2026
8ec7ba7
refactor: BusSearchResultViewController가 BusSearchDatePickerViewContr…
hgjwilly Aug 13, 2026
017e124
refactor: ManageNoticeKeywordViewController가 ModalViewController를 프로퍼…
hgjwilly Aug 13, 2026
0e803b4
delete: 사용하지 않는 식단 좋아요 모달 삭제
hgjwilly Aug 13, 2026
f60bec7
refactor: BusSearchViewController가 BusAreaSelectedViewController를 프로퍼…
hgjwilly Aug 13, 2026
df0cdc0
refactor: CallVanPostViewController가 BottomSheetViewControllerB를 프로퍼티…
hgjwilly Aug 13, 2026
8f29cda
refactor: ChangeMyProfileViewController가 RevokeModalViewController를 프…
hgjwilly Aug 13, 2026
98daff7
refactor: ChatViewController가 BlockCheckModalViewController를 프로퍼티로 갖지…
hgjwilly Aug 13, 2026
9dd6f21
refactor: DiningViewController가 DiningNotiContentViewController를 프로퍼티…
hgjwilly Aug 13, 2026
7043ec1
refactor: ForceUpdateViewController가 UpdateModalViewController를 프로퍼티로…
hgjwilly Aug 13, 2026
cdecb29
refactor: LoginViewController가 ModifyUserModalViewController를 프로퍼티로 갖…
hgjwilly Aug 13, 2026
937d495
refactor: ReviewListViewController가 모달 ViewController를 프로퍼티로 갖지 않도록 변경
hgjwilly Aug 13, 2026
dc5b21c
refactor: TimetableViewController가 모달 ViewController를 프로퍼티로 갖지 않도록 변경
hgjwilly Aug 13, 2026
90991b6
refactor: FrameListViewController가 모달 ViewController를 프로퍼티로 갖지 않도록 변경
hgjwilly Aug 13, 2026
3565e21
fix: 코드 리뷰 반영
hgjwilly Aug 13, 2026
85176b6
Merge pull request #533 from BCSDLab/refactor/remove-viewController-p…
hgjwilly Aug 13, 2026
3f459c3
refactor: ModalViewController 트랜지션 애니메이션
hgjwilly Aug 14, 2026
2ba4ad8
refactor: KoinModalViewController 리팩토링
hgjwilly Aug 16, 2026
0b46ad8
refactor: BusSearchDatePickerViewController 리팩토링
hgjwilly Aug 16, 2026
76944cf
refactor: RevokeModalViewController 리팩토링
hgjwilly Aug 16, 2026
4c0662c
delete: ModifyUserModalViewController 삭제, KoinModalViewController로 변경
hgjwilly Aug 16, 2026
10503e8
fix: KoinModalViewController UI 수정
hgjwilly Aug 16, 2026
d8ac7ae
delete: UpdateModalViewController 삭제, KoinModalViewController로 변경
hgjwilly Aug 16, 2026
89a1213
delete: ReviewLoginModalViewController 삭제, KoinModalViewController로 변경
hgjwilly Aug 16, 2026
111e9a9
delete: DeleteReviewModalViewController 삭제, KoinModalViewController로 변경
hgjwilly Aug 16, 2026
70a850e
refactor: ModifyFrameModalViewController 리팩토링
hgjwilly Aug 16, 2026
66adb93
feat: KoinModalViewController가 키보드에 반응하도록 수정
hgjwilly Aug 16, 2026
7623835
refactor: KoinModalViewController Button 구조 변경
hgjwilly Aug 16, 2026
dda8ebc
delete: CallVanModalViewController 삭제, KoinModalViewController로 변경
hgjwilly Aug 16, 2026
c739ae6
refactor: DeleteLectureModalViewController 리팩토링
hgjwilly Aug 16, 2026
a2c0265
refactor: SelectDeptModalViewController 리팩토링
hgjwilly Aug 17, 2026
9bb9e08
refactor: SubstituteTimetableModalViewController 리팩토링
hgjwilly Aug 17, 2026
f9cf0c3
refactor: ModifySemesterModalViewController 리팩토링
hgjwilly Aug 17, 2026
cd7244e
refactor: DeleteFrameModalViewController 리팩토링
hgjwilly Aug 17, 2026
241c646
refactor: DeleteSemesterModalViewController 리팩토링
hgjwilly Aug 17, 2026
2df351f
delete: BackButtonPopUpViewController 삭제, KoinModalViewController로 변경
hgjwilly Aug 17, 2026
9334313
chore: 채팅 목록 진입점 추가
hgjwilly Aug 17, 2026
a066e30
fix: 코드 리뷰 반영
hgjwilly Aug 17, 2026
afbfdff
fix: 코드 리뷰 반영, 코드 개선
hgjwilly Aug 17, 2026
a76d661
Merge pull request #539 from BCSDLab/chore/chat-list
hgjwilly Aug 17, 2026
136660a
Merge pull request #538 from BCSDLab/refactor/modalViewController
hgjwilly Aug 17, 2026
a4e7cd3
fix: 자동완성에 의해 아이디가 변경되지 않도록 수정
hgjwilly Aug 17, 2026
d2811d6
chore: 비밀번호 찾기 화면에서 return 키를 눌렀을 때 '다음' 버튼이 동작하도록 변경
hgjwilly Aug 17, 2026
b917d90
Merge pull request #540 from BCSDLab/fix/change-password
hgjwilly Aug 17, 2026
9882f83
refactor: 로깅 테스트를 위한 DiningViewController 접근 제어 internal로 변경
oeunji Aug 17, 2026
5902e88
add: 세그먼트 인덱스로 DiningType을 생성하는 init 추가
oeunji Aug 17, 2026
cc8d618
add: DiningType 세그먼트 인덱스 변환 테스트 추가
oeunji Aug 17, 2026
890d75c
test: 식단 로깅 테스트용 Recorder와 Stub 추가
oeunji Aug 17, 2026
752b1b6
test: 식단 로깅 이벤트 테스트 추가
oeunji Aug 17, 2026
15c8845
chore: 로깅 테스트 파일을 koinUnitTests 타겟에 등록
oeunji Aug 17, 2026
8a6daf6
test: 테스트 케이스에 맞춰 메뉴 이미지를 탭 arguments 변경
oeunji Aug 17, 2026
7d436ea
5.1.2(444)
hgjwilly Aug 18, 2026
b1ba5e0
Merge pull request #541 from BCSDLab/test/dining-logging
oeunji Aug 19, 2026
22569d2
refactor: Chat을 LostItemChat으로 변경
hgjwilly Aug 19, 2026
e131e85
chore: NotificationItem을 NotificationHistoryItem으로 리네이밍
hgjwilly Aug 19, 2026
54f6fa6
refactor: NotificationHistoryItem의 로깅 value를 NotificationHostoryItem의…
hgjwilly Aug 19, 2026
af38e77
refactor: Notification 공용 컴포넌트화
hgjwilly Aug 19, 2026
1326e91
refactor: CallVanChat 공용 컴포넌트화
hgjwilly Aug 19, 2026
0765bcd
fix: 코드 리뷰 반영
hgjwilly Aug 20, 2026
bb4d972
Merge pull request #545 from BCSDLab/refactor/presentation-shared
hgjwilly Aug 20, 2026
1fc3c52
design: 전공선택 모달 UI
hgjwilly Aug 25, 2026
a5f5e6b
fix: 코드 리뷰 반영
hgjwilly Aug 25, 2026
370ea1a
Merge pull request #547 from BCSDLab/design/timetable-dept-modal
hgjwilly Aug 25, 2026
961c763
feat: KoinDropdown 공용 컴포넌트 추가
hgjwilly Aug 25, 2026
3e7ffa8
refactor: CallVanPost 드롭다운을 KoinDropdown으로 리팩토링
hgjwilly Aug 25, 2026
dd4b179
refacotor: PostLostItem 화면 드롭다운을 KoinDropdown 리팩토링
hgjwilly Aug 25, 2026
65221c5
refactor: EditLostItem 화면 드롭다운을 KoinDropdown으로 리팩토링
hgjwilly Aug 25, 2026
7136291
delete: 사용하지 않는 ImageDropdownCell 삭제
hgjwilly Aug 25, 2026
8aa78db
fix: 코드 리뷰 반영
hgjwilly Aug 25, 2026
d8b28ed
Merge pull request #549 from BCSDLab/refactor/dropdown
hgjwilly Aug 25, 2026
14fa9b7
fix: 분실물 습득/분실 날짜 형식 오류 수정
hgjwilly Aug 25, 2026
ade1ea4
Merge pull request #551 from BCSDLab/fix/edit-lostitem
hgjwilly Aug 25, 2026
ec7571f
feat: Shared 컴포넌트 FilterBottomSheetView 구현
hgjwilly Aug 28, 2026
02996e7
refactor: BottomSheetViewControllerB가 높이를 주입받지 않도록 리팩토링
hgjwilly Aug 28, 2026
731c2c8
refactor: CallVanListFilterViewController 를 FilterBottomSheetView로 리팩토링
hgjwilly Aug 28, 2026
c5b8e84
fix: CallVanPost 바텀시트 UI 수정
hgjwilly Aug 28, 2026
a4a4b9e
fix: 코드 리뷰 반영
hgjwilly Aug 28, 2026
0f8be9a
Merge pull request #553 from BCSDLab/refactor/presentation-shared
hgjwilly Aug 28, 2026
6e7a1db
test: 세그먼트 미선택 로깅 방지 및 무시 스와이프 로깅 방지 테스트 코드 작성
oeunji Sep 5, 2026
ed7831b
fix: 세그먼트 미선택/무시된 스와이프에서 잘못 기록되던 로깅 수정
oeunji Sep 5, 2026
48cf51a
delete: 주문 플로팅 버튼 컴포넌트 삭제
oeunji Sep 6, 2026
4ad629b
delete: 주문 내역 검색 바 컴포넌트 삭제
oeunji Sep 6, 2026
fb4fd61
delete: 주문 필터 Sheet 컴포넌트 삭제
oeunji Sep 6, 2026
338cdfa
delete: 주문 내역 Empty View 삭제
oeunji Sep 6, 2026
6658b89
delete: 주문 Slider 컴포넌트 삭제
oeunji Sep 6, 2026
90f9aef
design: 로그인 화면 리디자인 UI 구현
hgjwilly Sep 6, 2026
c96edf9
deisng: 회원가입 리디자인 UI 수정
hgjwilly Sep 6, 2026
324616c
design: 아이디 찾기 UI 수정
hgjwilly Sep 6, 2026
6407a77
design: 비밀번호 찾기 UI 수정
hgjwilly Sep 6, 2026
85b3d1c
design: 설정 UI 수정
hgjwilly Sep 6, 2026
8e85023
fix: 코드리뷰 반영
hgjwilly Sep 7, 2026
9044d6d
Merge pull request #555 from BCSDLab/fix/callvanpost-placebottomsheet…
hgjwilly Sep 7, 2026
4f8ba3b
fix: 코드리뷰 반영
hgjwilly Sep 7, 2026
6099454
chore: 누락된 색상 변경
hgjwilly Sep 7, 2026
d61a2ff
chore: 키보드 타입 수정
hgjwilly Sep 7, 2026
97f24c4
Merge pull request #559 from BCSDLab/design/setting
hgjwilly Sep 7, 2026
3ec13fa
Merge pull request #556 from BCSDLab/fix/dining-logging
oeunji Sep 9, 2026
8a838ce
Merge pull request #558 from BCSDLab/delete/dead-code
oeunji Sep 10, 2026
11b89fb
chore: 팀원모집 웹뷰
hgjwilly Sep 14, 2026
9e5655c
Merge pull request #567 from BCSDLab/chore/creuit-web
hgjwilly Sep 14, 2026
dd6d7f5
5.2.0
hgjwilly Sep 14, 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
@@ -1,5 +1,5 @@
//
// NotificationRecord.swift
// NotificationHistoryRecord.swift
// koin
//
// Created by 홍기정 on 7/6/26.
Expand All @@ -8,6 +8,8 @@
import SwiftData
import Foundation

typealias NotificationHistoryRecord = NotificationRecord

@Model
final class NotificationRecord {
var body: String
Expand Down
22 changes: 11 additions & 11 deletions Common/NotificationHistory/NotificationHistoryService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import SwiftData
import Foundation

protocol NotificationHistoryService {
func insert(record: NotificationRecord) async throws
func fetchAll() async throws -> [NotificationRecord]
func insert(record: NotificationHistoryRecord) async throws
func fetchAll() async throws -> [NotificationHistoryRecord]
func markAsRead(messageId: String) async throws
func markAllAsRead() async throws
func delete(messageId: String) async throws
Expand All @@ -25,13 +25,13 @@ final class DefaultNotificationHistoryService: NotificationHistoryService {
// MARK: - Initializer
init() {
container = try? ModelContainer(
for: NotificationRecord.self,
for: NotificationHistoryRecord.self,
configurations: .init(groupContainer: .identifier("group.com.bcsdlab.koin"))
)
}

// MARK: - Create
func insert(record: NotificationRecord) async throws {
func insert(record: NotificationHistoryRecord) async throws {
guard let container else {
throw SwiftDataError.loadIssueModelContainer
}
Expand All @@ -48,7 +48,7 @@ final class DefaultNotificationHistoryService: NotificationHistoryService {
}

// MARK: - Read
func fetchAll() async throws -> [NotificationRecord] {
func fetchAll() async throws -> [NotificationHistoryRecord] {
guard let container else {
throw SwiftDataError.loadIssueModelContainer
}
Expand All @@ -60,7 +60,7 @@ final class DefaultNotificationHistoryService: NotificationHistoryService {
}

return try await MainActor.run {
var descriptor = FetchDescriptor<NotificationRecord>(
var descriptor = FetchDescriptor<NotificationHistoryRecord>(
sortBy: [SortDescriptor(\.createdAt, order: .reverse)]
)
descriptor.fetchLimit = .max
Expand All @@ -76,7 +76,7 @@ final class DefaultNotificationHistoryService: NotificationHistoryService {
}

try await MainActor.run {
var descriptor = FetchDescriptor<NotificationRecord>(
var descriptor = FetchDescriptor<NotificationHistoryRecord>(
predicate: #Predicate { notification in
notification.messageId == messageId
}
Expand All @@ -97,7 +97,7 @@ final class DefaultNotificationHistoryService: NotificationHistoryService {
}

try await MainActor.run {
var descriptor = FetchDescriptor<NotificationRecord>()
var descriptor = FetchDescriptor<NotificationHistoryRecord>()
descriptor.fetchLimit = .max
try container.mainContext.enumerate(descriptor) { notification in
notification.isRead = true
Expand All @@ -115,7 +115,7 @@ final class DefaultNotificationHistoryService: NotificationHistoryService {
}

try await MainActor.run {
try container.mainContext.delete(model: NotificationRecord.self, where: #Predicate { notification in
try container.mainContext.delete(model: NotificationHistoryRecord.self, where: #Predicate { notification in
notification.messageId == messageId
})
try container.mainContext.save()
Expand All @@ -130,7 +130,7 @@ final class DefaultNotificationHistoryService: NotificationHistoryService {
}

try await MainActor.run {
try container.mainContext.delete(model: NotificationRecord.self)
try container.mainContext.delete(model: NotificationHistoryRecord.self)
try container.mainContext.save()
}

Expand All @@ -149,7 +149,7 @@ extension DefaultNotificationHistoryService {
}

try await MainActor.run {
try container.mainContext.delete(model: NotificationRecord.self, where: #Predicate { notification in
try container.mainContext.delete(model: NotificationHistoryRecord.self, where: #Predicate { notification in
notification.createdAt < expirationDate
})
try container.mainContext.save()
Expand Down
14 changes: 9 additions & 5 deletions Koin/Apps/SceneDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,8 @@ extension SceneDelegate {
case .chat:
if let articleId = Int(parsedQuery["articleId"]),
let chatRoomId = Int(parsedQuery["chatRoomId"]) {
let viewModel = ChatViewModel(articleId: articleId, chatRoomId: chatRoomId, articleTitle: nil)
let chatViewController = ChatViewController(viewModel: viewModel)
let viewModel = LostItemChatViewModel(articleId: articleId, chatRoomId: chatRoomId, articleTitle: nil)
let chatViewController = LostItemChatViewController(viewModel: viewModel)
navigationController?.pushViewController(chatViewController, animated: true)
}
case .callvan:
Expand Down Expand Up @@ -236,8 +236,12 @@ extension SceneDelegate {
}

private func makeCategoryHostingController() -> UIViewController {
let checkLoginUseCase = DefaultCheckLoginUseCase(userRepository: DefaultUserRepository(service: DefaultUserService()))
let logAnalyticsEventUseCase = DefaultLogAnalyticsEventUseCase(repository: GA4AnalyticsRepository(service: GA4AnalyticsService()))
let categoryRootView = CategoryView(viewModel: CategoryViewModel(logAnalyticsEventUseCase: logAnalyticsEventUseCase))
let categoryRootView = CategoryView(
viewModel: CategoryViewModel(
checkLoginUseCase: checkLoginUseCase,
logAnalyticsEventUseCase: logAnalyticsEventUseCase))
return CategoryHostingController(rootView: categoryRootView)
}

Expand Down Expand Up @@ -369,13 +373,13 @@ extension SceneDelegate {
private func makeLostItemData(lostItemId: Int) -> UIViewController {
let userRepository = DefaultUserRepository(service: DefaultUserService())
let lostItemRepository = DefaultLostItemRepository(service: DefaultLostItemService())
let chatRepository = DefaultChatRepository(service: DefaultChatService())
let chatRepository = DefaultLostItemRepository(service: DefaultLostItemService())
let checkLoginUseCase = DefaultCheckLoginUseCase(userRepository: userRepository)
let fetchLostItemDataUseCase = DefaultFetchLostItemDataUseCase(repository: lostItemRepository)
let fetchLostItemListUseCase = DefaultFetchLostItemListUseCase(repository: lostItemRepository)
let changeLostItemStateUseCase = DefaultChangeLostItemStateUseCase(repository: lostItemRepository)
let deleteLostItemUseCase = DefaultDeleteLostItemUseCase(repository: lostItemRepository)
let createChatRoomUseCase = DefaultCreateChatRoomUseCase(chatRepository: chatRepository)
let createChatRoomUseCase = DefaultLostItemCreateChatRoomUseCase(chatRepository: chatRepository)
let logAnalyticsEventUseCase = DefaultLogAnalyticsEventUseCase(repository: GA4AnalyticsRepository(service: GA4AnalyticsService()))
let viewModel = LostItemDataViewModel(
checkLoginUseCase: checkLoginUseCase,
Expand Down
Loading