diff --git a/Conjuga/Conjuga/Models/TestResult.swift b/Conjuga/Conjuga/Models/TestResult.swift index a9ab031..f625c69 100644 --- a/Conjuga/Conjuga/Models/TestResult.swift +++ b/Conjuga/Conjuga/Models/TestResult.swift @@ -9,6 +9,7 @@ struct MissedCourseItem: Codable, Hashable, Sendable { @Model final class TestResult { var id: String = "" + var courseName: String = "" var weekNumber: Int = 0 var quizType: String = "" var totalQuestions: Int = 0 @@ -25,8 +26,9 @@ final class TestResult { return Int(round(Double(correctCount) / Double(totalQuestions) * 100)) } - init(weekNumber: Int, quizType: String, totalQuestions: Int, correctCount: Int, missedItems: [MissedCourseItem]) { + init(courseName: String, weekNumber: Int, quizType: String, totalQuestions: Int, correctCount: Int, missedItems: [MissedCourseItem]) { self.id = UUID().uuidString + self.courseName = courseName self.weekNumber = weekNumber self.quizType = quizType self.totalQuestions = totalQuestions @@ -35,8 +37,9 @@ final class TestResult { self.missedItems = missedItems } - convenience init(weekNumber: Int, quizType: String, totalQuestions: Int, correctCount: Int, missedFronts: [String], missedBacks: [String]) { + convenience init(courseName: String, weekNumber: Int, quizType: String, totalQuestions: Int, correctCount: Int, missedFronts: [String], missedBacks: [String]) { self.init( + courseName: courseName, weekNumber: weekNumber, quizType: quizType, totalQuestions: totalQuestions, diff --git a/Conjuga/Conjuga/Views/Course/CourseQuizView.swift b/Conjuga/Conjuga/Views/Course/CourseQuizView.swift index 8ea2062..0f4bcb3 100644 --- a/Conjuga/Conjuga/Views/Course/CourseQuizView.swift +++ b/Conjuga/Conjuga/Views/Course/CourseQuizView.swift @@ -6,6 +6,7 @@ import PencilKit struct CourseQuizView: View { let cards: [VocabCard] let quizType: QuizType + let courseName: String let weekNumber: Int let isFocusMode: Bool @@ -508,6 +509,7 @@ struct CourseQuizView: View { private func saveResult() { let result = TestResult( + courseName: courseName, weekNumber: weekNumber, quizType: quizType.rawValue, totalQuestions: shuffledCards.count, @@ -521,7 +523,13 @@ struct CourseQuizView: View { #Preview { NavigationStack { - CourseQuizView(cards: [], quizType: .mcEsToEn, weekNumber: 1, isFocusMode: false) + CourseQuizView( + cards: [], + quizType: .mcEsToEn, + courseName: "LanGo Spanish | Beginner I", + weekNumber: 1, + isFocusMode: false + ) } .modelContainer(for: [TestResult.self, VocabCard.self], inMemory: true) } diff --git a/Conjuga/Conjuga/Views/Course/CourseView.swift b/Conjuga/Conjuga/Views/Course/CourseView.swift index a565d54..4021f69 100644 --- a/Conjuga/Conjuga/Views/Course/CourseView.swift +++ b/Conjuga/Conjuga/Views/Course/CourseView.swift @@ -31,7 +31,9 @@ struct CourseView: View { } private func bestScore(for week: Int) -> Int? { - let results = testResults.filter { $0.weekNumber == week } + let results = testResults.filter { + $0.courseName == activeCourse && $0.weekNumber == week + } guard !results.isEmpty else { return nil } return results.map(\.scorePercent).max() } @@ -70,7 +72,7 @@ struct CourseView: View { ForEach(weekGroups, id: \.week) { week, weekDecks in Section { // Test button - NavigationLink(value: week) { + NavigationLink(value: WeekTestDestination(courseName: activeCourse, weekNumber: week)) { HStack(spacing: 12) { Image(systemName: "pencil.and.list.clipboard") .font(.title3) @@ -112,8 +114,8 @@ struct CourseView: View { .navigationDestination(for: CourseDeck.self) { deck in DeckStudyView(deck: deck) } - .navigationDestination(for: Int.self) { week in - WeekTestView(weekNumber: week) + .navigationDestination(for: WeekTestDestination.self) { dest in + WeekTestView(courseName: dest.courseName, weekNumber: dest.weekNumber) } } } @@ -123,6 +125,13 @@ struct CourseView: View { } } +// MARK: - Navigation + +struct WeekTestDestination: Hashable { + let courseName: String + let weekNumber: Int +} + // MARK: - Deck Row private struct DeckRowView: View { diff --git a/Conjuga/Conjuga/Views/Course/WeekTestView.swift b/Conjuga/Conjuga/Views/Course/WeekTestView.swift index 040a547..b1857b5 100644 --- a/Conjuga/Conjuga/Views/Course/WeekTestView.swift +++ b/Conjuga/Conjuga/Views/Course/WeekTestView.swift @@ -3,6 +3,7 @@ import SharedModels import SwiftData struct WeekTestView: View { + let courseName: String let weekNumber: Int @Environment(\.modelContext) private var modelContext @Environment(\.cloudModelContextProvider) private var cloudModelContextProvider @@ -60,6 +61,7 @@ struct WeekTestView: View { CourseQuizView( cards: weekCards, quizType: type, + courseName: courseName, weekNumber: weekNumber, isFocusMode: false ) @@ -139,6 +141,7 @@ struct WeekTestView: View { CourseQuizView( cards: focusCards, quizType: .mcEsToEn, + courseName: courseName, weekNumber: weekNumber, isFocusMode: true ) @@ -206,7 +209,11 @@ struct WeekTestView: View { } private func loadCards() { - let weekDecks = allDecks.filter { $0.weekNumber == weekNumber && !$0.isReversed } + let course = courseName + let week = weekNumber + let weekDecks = allDecks.filter { + $0.courseName == course && $0.weekNumber == week && !$0.isReversed + } let deckIds = weekDecks.map(\.id) var cards: [VocabCard] = [] for deckId in deckIds { @@ -221,8 +228,12 @@ struct WeekTestView: View { } private func loadResults() { + let course = courseName + let week = weekNumber let descriptor = FetchDescriptor( - predicate: #Predicate { $0.weekNumber == weekNumber }, + predicate: #Predicate { + $0.courseName == course && $0.weekNumber == week + }, sortBy: [SortDescriptor(\TestResult.dateTaken, order: .reverse)] ) weekResults = (try? cloudModelContext.fetch(descriptor)) ?? [] @@ -237,7 +248,7 @@ struct WeekTestView: View { #Preview { NavigationStack { - WeekTestView(weekNumber: 1) + WeekTestView(courseName: "LanGo Spanish | Beginner I", weekNumber: 1) } .modelContainer(for: [TestResult.self, CourseDeck.self, VocabCard.self], inMemory: true) }