Models WIP: Comment
This commit is contained in:
parent
2e4d605ecc
commit
aad877c64c
2 changed files with 97 additions and 32 deletions
47
Sources/SwiftDevRant/Models/Comment.swift
Normal file
47
Sources/SwiftDevRant/Models/Comment.swift
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import Foundation
|
||||||
|
|
||||||
|
/// A comment posted by a user inside of a rant.
|
||||||
|
public struct Comment: Identifiable, Hashable {
|
||||||
|
/// The id of this comment.
|
||||||
|
public let id: Int
|
||||||
|
|
||||||
|
/// The id of the rant that the comment belongs to.
|
||||||
|
public let rantId: Int
|
||||||
|
|
||||||
|
/// The current logged in user's vote on this comment.
|
||||||
|
public let voteState: VoteState
|
||||||
|
|
||||||
|
/// The number of upvotes from other users.
|
||||||
|
public var score: Int
|
||||||
|
|
||||||
|
/// The user who wrote this comment.
|
||||||
|
public let author: User
|
||||||
|
|
||||||
|
/// The time when this comment was created.
|
||||||
|
public let created: Date
|
||||||
|
|
||||||
|
/// True if this comment is edited by the author.
|
||||||
|
public let isEdited: Bool
|
||||||
|
|
||||||
|
/// The text contents of this comment.
|
||||||
|
public let text: String
|
||||||
|
|
||||||
|
/// The URLs and user mentions inside of the text of this comment.
|
||||||
|
public var linksInText: [Link]
|
||||||
|
|
||||||
|
/// The optional image that the user has uploaded for this comment.
|
||||||
|
public let image: AttachedImage?
|
||||||
|
|
||||||
|
public init(id: Int, rantId: Int, voteState: VoteState, score: Int, author: User, created: Date, isEdited: Bool, text: String, linksInText: [Link], image: AttachedImage?) {
|
||||||
|
self.id = id
|
||||||
|
self.rantId = rantId
|
||||||
|
self.voteState = voteState
|
||||||
|
self.score = score
|
||||||
|
self.author = author
|
||||||
|
self.created = created
|
||||||
|
self.isEdited = isEdited
|
||||||
|
self.text = text
|
||||||
|
self.linksInText = linksInText
|
||||||
|
self.image = image
|
||||||
|
}
|
||||||
|
}
|
@ -4,15 +4,33 @@ public struct Rant: Identifiable, Hashable {
|
|||||||
/// The id of this rant.
|
/// The id of this rant.
|
||||||
public let id: Int
|
public let id: Int
|
||||||
|
|
||||||
/// The text contents of this rant.
|
/// A URL link to this rant.
|
||||||
public let text: String
|
public let linkToRant: String?
|
||||||
|
|
||||||
|
/// The current logged in user's vote on this rant.
|
||||||
|
public let voteState: VoteState
|
||||||
|
|
||||||
/// The number of upvotes from other users.
|
/// The number of upvotes from other users.
|
||||||
public let score: Int
|
public let score: Int
|
||||||
|
|
||||||
|
/// The user who wrote this rant.
|
||||||
|
public let author: User
|
||||||
|
|
||||||
/// The time when this rant was created.
|
/// The time when this rant was created.
|
||||||
public let created: Date
|
public let created: Date
|
||||||
|
|
||||||
|
/// True if this rant is edited by the author.
|
||||||
|
public let isEdited: Bool
|
||||||
|
|
||||||
|
/// True if this rant has been marked as a favorite by the logged in user.
|
||||||
|
public var isFavorite: Bool
|
||||||
|
|
||||||
|
/// The text contents of this rant.
|
||||||
|
public let text: String
|
||||||
|
|
||||||
|
/// The URLs and user mentions inside of the text of this rant.
|
||||||
|
public var linksInText: [Link]
|
||||||
|
|
||||||
/// The optional image that the user has uploaded for this rant.
|
/// The optional image that the user has uploaded for this rant.
|
||||||
public let image: AttachedImage?
|
public let image: AttachedImage?
|
||||||
|
|
||||||
@ -22,29 +40,29 @@ public struct Rant: Identifiable, Hashable {
|
|||||||
/// The tags for this rant.
|
/// The tags for this rant.
|
||||||
public let tags: [String]
|
public let tags: [String]
|
||||||
|
|
||||||
/// The current logged in user's vote on this rant.
|
|
||||||
public let voteState: VoteState
|
|
||||||
|
|
||||||
/// True if this rant is edited by the author.
|
|
||||||
public let isEdited: Bool
|
|
||||||
|
|
||||||
/// True if this rant has been marked as a favorite by the logged in user.
|
|
||||||
public var isFavorite: Bool
|
|
||||||
|
|
||||||
/// A URL link to this rant.
|
|
||||||
public let linkToRant: String?
|
|
||||||
|
|
||||||
/// The URLs and user mentions inside of the text of this rant.
|
|
||||||
public var linksInText: [Link]
|
|
||||||
|
|
||||||
/// Holds information about the weekly topic if this rant is of type weekly.
|
/// Holds information about the weekly topic if this rant is of type weekly.
|
||||||
public let weekly: Weekly?
|
public let weekly: Weekly?
|
||||||
|
|
||||||
/// Holds information about the collaboration project if this rant is of type collaboration.
|
/// Holds information about the collaboration project if this rant is of type collaboration.
|
||||||
public let collaboration: Collaboration?
|
public let collaboration: Collaboration?
|
||||||
|
|
||||||
/// The user who wrote this rant.
|
public init(id: Int, linkToRant: String?, voteState: VoteState, score: Int, author: User, created: Date, isEdited: Bool, isFavorite: Bool, text: String, linksInText: [Link], image: AttachedImage?, numberOfComments: Int, tags: [String], weekly: Rant.Weekly?, collaboration: Collaboration?) {
|
||||||
public let author: User
|
self.id = id
|
||||||
|
self.linkToRant = linkToRant
|
||||||
|
self.voteState = voteState
|
||||||
|
self.score = score
|
||||||
|
self.author = author
|
||||||
|
self.created = created
|
||||||
|
self.isEdited = isEdited
|
||||||
|
self.isFavorite = isFavorite
|
||||||
|
self.text = text
|
||||||
|
self.linksInText = linksInText
|
||||||
|
self.image = image
|
||||||
|
self.numberOfComments = numberOfComments
|
||||||
|
self.tags = tags
|
||||||
|
self.weekly = weekly
|
||||||
|
self.collaboration = collaboration
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension Rant {
|
extension Rant {
|
||||||
@ -80,19 +98,9 @@ extension Rant.CodingData {
|
|||||||
var decoded: Rant {
|
var decoded: Rant {
|
||||||
.init(
|
.init(
|
||||||
id: id,
|
id: id,
|
||||||
text: text,
|
|
||||||
score: score,
|
|
||||||
created: Date(timeIntervalSince1970: TimeInterval(created_time)),
|
|
||||||
image: attached_image?.decoded,
|
|
||||||
numberOfComments: num_comments,
|
|
||||||
tags: tags,
|
|
||||||
voteState: .init(rawValue: vote_state) ?? .unvoted,
|
|
||||||
isEdited: edited,
|
|
||||||
isFavorite: (favorited ?? 0) != 0,
|
|
||||||
linkToRant: link,
|
linkToRant: link,
|
||||||
linksInText: links?.map(\.decoded) ?? [],
|
voteState: .init(rawValue: vote_state) ?? .unvoted,
|
||||||
weekly: weekly?.decoded,
|
score: score,
|
||||||
collaboration: decodedCollaboration,
|
|
||||||
author: .init(
|
author: .init(
|
||||||
id: user_id,
|
id: user_id,
|
||||||
name: user_username,
|
name: user_username,
|
||||||
@ -100,7 +108,17 @@ extension Rant.CodingData {
|
|||||||
devRantSupporter: (user_dpp ?? 0) != 0,
|
devRantSupporter: (user_dpp ?? 0) != 0,
|
||||||
avatar: user_avatar.decoded,
|
avatar: user_avatar.decoded,
|
||||||
avatarLarge: user_avatar_lg.decoded
|
avatarLarge: user_avatar_lg.decoded
|
||||||
)
|
),
|
||||||
|
created: Date(timeIntervalSince1970: TimeInterval(created_time)),
|
||||||
|
isEdited: edited,
|
||||||
|
isFavorite: (favorited ?? 0) != 0,
|
||||||
|
text: text,
|
||||||
|
linksInText: links?.map(\.decoded) ?? [],
|
||||||
|
image: attached_image?.decoded,
|
||||||
|
numberOfComments: num_comments,
|
||||||
|
tags: tags,
|
||||||
|
weekly: weekly?.decoded,
|
||||||
|
collaboration: decodedCollaboration
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user