//
// ContentVM.swift
// AsyncAwaitAPIDemo2
//
// Created by Joynal Abedin on 2/11/23.
//
import Foundation
import Combine
class ContentVM: ObservableObject {
@Published private(set) var respone: Response?
init() {
Task.init() {
await fetchData()
}
}
func fetchData() async {
do {
guard let url = URL(string: "https://devilarticle.com/api/LibraryService/GetAllBook") else { fatalError("missing url") }
let urlRequest = URLRequest(url: url)
let (data, response) = try await URLSession.shared.data(for: urlRequest)
guard (response as? HTTPURLResponse)?.statusCode == 200 else { fatalError("error while fetching data") }
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let decodedData = try decoder.decode(Response.self, from: data)
DispatchQueue.main.async {
self.respone = decodedData
}
}catch{
print("Error fetching data from pexels: \(error)")
}
}
}
//
// Response.swift
// DataTaskAPIDemo
//
// Created by Joynal Abedin on 1/11/23.
//
import Foundation
struct Response: Codable {
var responseCode: Int
var result: String
var errormessage: String?
var data: [BookList]
}
struct BookList: Codable {
var id: Int
var bookId: Int
var bookName: String
var availableCopyNumber: Int
}
//
struct ToDo: Decodable {
let userId: Int
let id: Int
let title: String
let isComplete: Bool
enum CodingKeys: String, CodingKey {
case isComplete = "completed"
case userId, id, title
}
}