import Foundation
public extension NotificationFeed {
public struct MappedNotificationItem: Hashable, Sendable {
public let rantId: Rant.ID
public let commentId: Comment.ID?
public let userId: Int
public let userAvatar: User.Avatar
public let userName: String
public let notificationKind: Notification.Kind
public let created: Date
public let isRead: Bool
public init(rantId: Rant.ID, commentId: Comment.ID?, userId: Int, userAvatar: User.Avatar, userName: String, notificationKind: Notification.Kind, created: Date, isRead: Bool) {
self.rantId = rantId
self.commentId = commentId
self.userId = userId
self.userAvatar = userAvatar
self.userName = userName
self.notificationKind = notificationKind
self.created = created
self.isRead = isRead
}
}
public var mappedItems: [MappedNotificationItem] {
notifications.map { notification in
let rantId = notification.rantId
let commentId = notification.commentId
let userId = notification.userId
let userInfo = userInfos.first { $0.userId == userId }
let userAvatar = userInfo?.avatar ?? .init(colorHex: "cccccc", imageUrlPath: nil)
let userName = userInfo?.username ?? ""
return MappedNotificationItem(
rantId: rantId,
commentId: commentId,
userId: userId,
userAvatar: userAvatar,
userName: userName,
notificationKind: notification.kind,
created: notification.created,
isRead: notification.read
)
}
}
public var unreadByCategory: [NotificationFeed.Category: Int] {
[
.all: unreadNumbers.all,
.upvotes: unreadNumbers.upvotes,
.mentions: unreadNumbers.mentions,
.comments: unreadNumbers.comments,
.subscriptions: unreadNumbers.subscriptions,
]
}
}