import SwiftUI import SwiftData @main struct BookibraApp: App { @StateObject private var router = AppRouter() private let dependencies = AppDependencies.live() private let container: ModelContainer init() { do { container = try ModelContainer(for: LibraryBook.self) } catch { fatalError("SwiftData container oluşturulamadı: \(error)") } } var body: some Scene { WindowGroup { RootView() .environmentObject(router) .environment(\.dependencies, dependencies) .modelContainer(container) } } } private struct RootView: View { @EnvironmentObject private var router: AppRouter @Environment(\.dependencies) private var dependencies var body: some View { NavigationStack(path: $router.path) { Group { if router.isAuthenticated { HomeView(viewModel: HomeViewModel()) } else { AuthView(viewModel: AuthViewModel(authService: dependencies.authService, keychain: dependencies.keychain)) } } .navigationDestination(for: AppRouter.Route.self) { route in switch route { case .addBooks: AddBooksView(viewModel: AddBooksViewModel(booksService: dependencies.booksService)) case .category(let name): CategoryListView(viewModel: CategoryViewModel(categoryName: name)) case .detail(let book): BookDetailView(viewModel: BookDetailViewModel(book: book)) } } } .task { await bootstrapSession() } } @MainActor private func bootstrapSession() async { let token = dependencies.keychain.read(for: AuthViewModel.tokenKey) guard let token, !token.isEmpty else { router.isAuthenticated = false return } do { _ = try await dependencies.authService.profile(token: token) router.isAuthenticated = true } catch { router.isAuthenticated = false } } }