copinism-ios/copinism/api/target.swift
2024-06-04 09:41:01 +08:00

146 lines
3.8 KiB
Swift

//
// target.swift
// copinism
//
// Created by on 2024/6/4.
//
import SwiftUI
import Foundation
import Alamofire
import Kingfisher
struct Target: Decodable {
let id: Int
let introduce: String
let image: URL
let name: String
let content: String
let duration: Int
let rugged: Int
let remark: String
let learn_count: Int
let is_like: Bool
let create_time: String
let update_time: String
let hot: Int
}
struct TargetData: Decodable{
let total: Int
let list: [Target]
}
//{
// "id": 155,
// "introduce": "",
// "image": "https://tool.flyaha.top/view/subject/s/public/s8855840.jpg?addree=img1.doubanio.com",
// "title": "",
// "name": "",
// "join_count": 1,
// "uid": 3,
// "content": "",
// "remark": ":",
// "progress": 100,
// "create_time": "2024-04-15",
// "update_time": "2024-05-07",
// "start_time": "2024-04-15",
// "end_time": "2024-04-19",
// "learn_count": 1,
// "status": 2,
// "status_str": "",
// "check_in_status": 3,
// "check_in_day": 5,
// "learning": true,
// "hall": false,
// "hour": 0,
// "minute": 0,
// "people_limit": 1
// }
struct TargetMe: Decodable {
let id: Int
let introduce: String
let image: URL
let title: String
let name: String
let join_count: Int
let uid: Int
let content: String
let remark: String
let progress: Double
let create_time: String
let update_time: String
let start_time: String
let end_time: String
let learn_count: Int
let status: Int
let status_str: String
let check_in_status: Int
let check_in_day: Int
let learning: Bool
let hall: Bool
let hour: Int
let minute: Int
let people_limit: Int
}
struct TargetMeData: Decodable{
let total: Int
let list: [TargetMe]
}
struct TargetUIView: View {
@State private var image = URL(string: "https://s3.hcpp.top/avatar/ORTPJkyqeULR/%E9%BB%84%E5%AF%8C%E8%B4%B5/1709263869_avatar.jpg?e=1717147962&token=DhKKj58tWve-b3U6BMyFGVUdZ78NXqs4mUhnPaZq:OXHPrsKyvippj5kg-Z65yr4JziI=")
var body: some View {
Button(action: {
let req = TargetReq(page: 1, page_size: 10, tag_id: 0)
// Example usage:
GetTargets(req: req){ (result: Result<HTTPBinResponse<TargetData>, AFError>) in
switch result {
case .success(let body):
if body.code == 0 {
image = body.data.list[0].image
} else {
}
case .failure(let error):
debugPrint("Error: \(error)")
}
}
}) {
KFImage(image)
.resizable()
.placeholder {
ProgressView()
}
.frame(width: 50, height: 50)
.clipShape(Circle())
}
}
}
func GetTargets<T: Decodable>(req: TargetReq, completion: @escaping (Result<HTTPBinResponse<T>, AFError>) -> Void) {
makeAlamofireRequest(api: apiprefixV1 + targetApi, method: .post, param: req,completion: completion)
}
func GetMeTargets<T: Decodable>(req: TargetMeReq, completion: @escaping (Result<HTTPBinResponse<T>, AFError>) -> Void) {
makeAlamofireRequest(api: apiprefixV1 + targeMetApi, method: .post, param: req,completion: completion)
}
#Preview {
TargetUIView()
}