Files
2025-01-20 01:12:44 -08:00

60 lines
1.5 KiB
Swift

import Foundation
public protocol Item: Codable, Identifiable, Hashable {
var id: Int { get }
var parent: Int? { get }
var title: String? { get }
var text: String? { get }
var url: String? { get }
var type: String? { get }
var by: String? { get }
var score: Int? { get }
var descendants: Int? { get }
var time: Int { get }
var kids: [Int]? { get }
var metadata: String { get }
}
public extension Item {
var createdAtDate: Date {
let date = Date(timeIntervalSince1970: Double(time))
return date
}
var createdAt: String {
let date = Date(timeIntervalSince1970: Double(time))
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM d, yyyy"
return dateFormatter.string(from: date)
}
var timeAgo: String {
let date = Date(timeIntervalSince1970: Double(time))
return date.timeAgoString
}
var formattedTime: String {
Date(timeIntervalSince1970: Double(time)).formatted()
}
var itemUrl: String {
"https://news.ycombinator.com/item?id=\(self.id)"
}
var readableUrl: String? {
if let url = self.url {
let domain = URL(string: url)?.host
return domain
}
return nil
}
var isJob: Bool {
return type == "job"
}
var isJobWithUrl: Bool {
return type == "job" && text.isNullOrEmpty && url.isNotNullOrEmpty
}
}