107 lines
3 KiB
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() |