RTSDA-iOS/test_verses.swift

107 lines
3 KiB
Swift

import Foundation
class PocketBaseService {
static let shared = PocketBaseService()
let baseURL = "https://pocketbase.rockvilletollandsda.church/api/collections"
private init() {}
}
@MainActor
class BibleService {
static let shared = BibleService()
private let pocketBaseService = PocketBaseService.shared
private init() {}
struct Verse: Identifiable, Codable {
let id: String
let reference: String
let text: String
let isActive: Bool
enum CodingKeys: String, CodingKey {
case id
case reference
case text
case isActive = "is_active"
}
}
struct VersesRecord: Codable {
let collectionId: String
let collectionName: String
let created: String
let id: String
let updated: String
let verses: VersesData
struct VersesData: Codable {
let id: String
let verses: [Verse]
}
}
private var cachedVerses: [Verse]?
private func getVerses() async throws -> [Verse] {
print("Fetching verses from PocketBase")
let endpoint = "\(PocketBaseService.shared.baseURL)/bible_verses/records/nkf01o1q3456flr"
guard let url = URL(string: endpoint) else {
print("Invalid URL: \(endpoint)")
throw URLError(.badURL)
}
var request = URLRequest(url: url)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
print("Making request to: \(endpoint)")
let (data, response) = try await URLSession.shared.data(for: request)
guard let httpResponse = response as? HTTPURLResponse else {
print("Invalid response type")
throw URLError(.badServerResponse)
}
print("Response status code: \(httpResponse.statusCode)")
guard httpResponse.statusCode == 200 else {
if let errorString = String(data: data, encoding: .utf8) {
print("Error response from server: \(errorString)")
}
throw URLError(.badServerResponse)
}
let decoder = JSONDecoder()
let versesRecord = try decoder.decode(VersesRecord.self, from: data)
return versesRecord.verses.verses
}
func testAllVerses() async throws {
print("\n=== Testing All Verses ===\n")
let verses = try await getVerses()
for verse in verses {
print("Reference: \(verse.reference)")
print("Text: \(verse.text)")
print("-------------------\n")
}
print("=== Test Complete ===\n")
}
}
print("Starting Bible Verses Test...")
// Create a semaphore to signal when the task is complete
let semaphore = DispatchSemaphore(value: 0)
Task {
do {
try await BibleService.shared.testAllVerses()
} catch {
print("Error testing verses: \(error)")
}
semaphore.signal()
}
// Wait for the task to complete
semaphore.wait()