Models WIP: Weekly, RantFeed
This commit is contained in:
parent
b9d990b1f3
commit
2a15f2ea73
68
Sources/SwiftDevRant/Models/RantFeed.News.swift
Normal file
68
Sources/SwiftDevRant/Models/RantFeed.News.swift
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
public extension RantFeed {
|
||||||
|
/// Contains information about news given in rant feeds.
|
||||||
|
/// - note: This is mostly used for weekly group rants.
|
||||||
|
struct News: Hashable, Identifiable {
|
||||||
|
public enum Action: String {
|
||||||
|
case groupRant = "grouprant"
|
||||||
|
case none = "none"
|
||||||
|
case rant = "rant"
|
||||||
|
}
|
||||||
|
|
||||||
|
public let id: Int
|
||||||
|
|
||||||
|
/// Most of the time this is equal to the value `intlink`, this specifies the type of news.
|
||||||
|
/// This should be an enum but it's unknown what the other values are and weekly news are dead anyway.
|
||||||
|
public let type: String
|
||||||
|
|
||||||
|
/// The headline text of the news.
|
||||||
|
public let headlineText: String
|
||||||
|
|
||||||
|
/// The contents of the news.
|
||||||
|
public let text: String
|
||||||
|
|
||||||
|
/// The footer text of the news.
|
||||||
|
public let footerText: String
|
||||||
|
|
||||||
|
/// The height of the news view on the screen.
|
||||||
|
public let height: Int
|
||||||
|
|
||||||
|
/// The action that should be performed when the user taps/clicks on the news.
|
||||||
|
public let action: Action
|
||||||
|
|
||||||
|
public init(id: Int, type: String, headlineText: String, text: String, footerText: String, height: Int, action: Action) {
|
||||||
|
self.id = id
|
||||||
|
self.type = type
|
||||||
|
self.headlineText = headlineText
|
||||||
|
self.text = text
|
||||||
|
self.footerText = footerText
|
||||||
|
self.height = height
|
||||||
|
self.action = action
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension RantFeed.News {
|
||||||
|
struct CodingData: Codable {
|
||||||
|
let id: Int
|
||||||
|
let type: String
|
||||||
|
let headline: String
|
||||||
|
let body: String?
|
||||||
|
let footer: String
|
||||||
|
let height: Int
|
||||||
|
let action: String
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension RantFeed.News.CodingData {
|
||||||
|
var decoded: RantFeed.News {
|
||||||
|
.init(
|
||||||
|
id: id,
|
||||||
|
type: type,
|
||||||
|
headlineText: headline,
|
||||||
|
text: body ?? "",
|
||||||
|
footerText: footer,
|
||||||
|
height: height,
|
||||||
|
action: .init(rawValue: action) ?? .none
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
47
Sources/SwiftDevRant/Models/RantFeed.swift
Normal file
47
Sources/SwiftDevRant/Models/RantFeed.swift
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/// Contains the list of rants for the logged in user and other random things.
|
||||||
|
public struct RantFeed: Hashable {
|
||||||
|
public var rants: [Rant]
|
||||||
|
|
||||||
|
/// The notification settings for the logged-in user.
|
||||||
|
//public let settings: Settings
|
||||||
|
|
||||||
|
public let sessionHash: String?
|
||||||
|
|
||||||
|
/// The weekly group rant week number.
|
||||||
|
public let weeklyRantWeek: Int?
|
||||||
|
|
||||||
|
/// True if the logged in user is subscribed to devRant++.
|
||||||
|
public let devRantSupporter: Bool
|
||||||
|
//public let isUserDPP: Int
|
||||||
|
|
||||||
|
public let numberOfUnreadNotifications: Int
|
||||||
|
|
||||||
|
public let news: News?
|
||||||
|
}
|
||||||
|
|
||||||
|
public extension RantFeed {
|
||||||
|
enum Sort {
|
||||||
|
/// The devRant algorithm decides what rants appear in the feed.
|
||||||
|
case algorithm
|
||||||
|
|
||||||
|
/// The most recent rants appear in the feed.
|
||||||
|
case recent
|
||||||
|
|
||||||
|
/// The top rated rants appear in the feed.
|
||||||
|
case top(range: Range)
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Range {
|
||||||
|
/// Rants from the one day.
|
||||||
|
case day
|
||||||
|
|
||||||
|
/// Rants from the one week.
|
||||||
|
case week
|
||||||
|
|
||||||
|
/// Rants from the one month.
|
||||||
|
case month
|
||||||
|
|
||||||
|
/// Rants from all time.
|
||||||
|
case all
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,12 @@
|
|||||||
public struct User: Identifiable, Hashable {
|
public struct User: Identifiable, Hashable {
|
||||||
public let id: Int
|
public let id: Int
|
||||||
|
|
||||||
public let name: String
|
public let name: String
|
||||||
|
|
||||||
|
/// The number of upvotes from other users.
|
||||||
public let score: Int
|
public let score: Int
|
||||||
|
|
||||||
|
/// True if the logged in user is subscribed to devRant++.
|
||||||
public let devRantSupporter: Bool
|
public let devRantSupporter: Bool
|
||||||
|
|
||||||
/// A small avatar for the rant views and comment views.
|
/// A small avatar for the rant views and comment views.
|
||||||
|
47
Sources/SwiftDevRant/Models/Weekly.swift
Normal file
47
Sources/SwiftDevRant/Models/Weekly.swift
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/// The weekly item data for the list of weeklies.
|
||||||
|
public struct Weekly: Hashable, Identifiable {
|
||||||
|
/// The number of the week. The first week starts with 1.
|
||||||
|
public let week: Int
|
||||||
|
|
||||||
|
/// The weekly subject/topic.
|
||||||
|
public let topic: String
|
||||||
|
|
||||||
|
/// The US formatted date the weekly.
|
||||||
|
public let formattedDate: String
|
||||||
|
|
||||||
|
/// How many rants have beeon posted for this weekly.
|
||||||
|
public let numberOfRants: Int
|
||||||
|
|
||||||
|
public var id: Int { week }
|
||||||
|
|
||||||
|
public init(week: Int, topic: String, formattedDate: String, numberOfRants: Int) {
|
||||||
|
self.week = week
|
||||||
|
self.topic = topic
|
||||||
|
self.formattedDate = formattedDate
|
||||||
|
self.numberOfRants = numberOfRants
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Weekly {
|
||||||
|
struct CodingData: Codable {
|
||||||
|
let week: Int
|
||||||
|
let prompt: String
|
||||||
|
let date: String
|
||||||
|
let num_rants: Int
|
||||||
|
|
||||||
|
struct List: Codable {
|
||||||
|
let weeks: [CodingData]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Weekly.CodingData {
|
||||||
|
var decoded: Weekly {
|
||||||
|
.init(
|
||||||
|
week: week,
|
||||||
|
topic: prompt,
|
||||||
|
formattedDate: date,
|
||||||
|
numberOfRants: num_rants
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user