136 lines
3.4 KiB
TypeScript
136 lines
3.4 KiB
TypeScript
/**
|
|
* Types the notifications `api/services/notification-service.ts` makes, and
|
|
* the data each kind carries. The client's `/notifications` page lists them
|
|
* and turns each into a sentence and a link.
|
|
*
|
|
* @module
|
|
*/
|
|
|
|
/**
|
|
* Says which of the `…Data` interfaces a notification's `data` is. Each value
|
|
* has one `notify…` trigger in `notification-service.ts`.
|
|
*/
|
|
export type NotificationType =
|
|
| "playlist_followed"
|
|
| "user_followed"
|
|
| "user_dump_posted"
|
|
| "playlist_dump_added"
|
|
| "dump_upvoted"
|
|
| "user_mentioned"
|
|
| "dump_commented"
|
|
| "comment_liked";
|
|
|
|
/**
|
|
* Carried by a `playlist_followed` notification, sent to a playlist's owner.
|
|
*/
|
|
export interface PlaylistFollowedData {
|
|
followerId: string;
|
|
followerUsername: string;
|
|
playlistId: string;
|
|
playlistTitle: string;
|
|
}
|
|
|
|
/** Carried by a `user_followed` notification, sent to the user followed. */
|
|
export interface UserFollowedData {
|
|
followerId: string;
|
|
followerUsername: string;
|
|
}
|
|
|
|
/**
|
|
* Carried by a `user_dump_posted` notification, sent to the followers of a
|
|
* user who posted a public dump.
|
|
*/
|
|
export interface UserDumpPostedData {
|
|
dumperId: string;
|
|
dumperUsername: string;
|
|
dumpId: string;
|
|
dumpTitle: string;
|
|
}
|
|
|
|
/**
|
|
* Carried by a `playlist_dump_added` notification, sent to the followers of a
|
|
* public playlist when a public dump is added to it.
|
|
*/
|
|
export interface PlaylistDumpAddedData {
|
|
dumpId: string;
|
|
dumpTitle: string;
|
|
playlistId: string;
|
|
playlistTitle: string;
|
|
}
|
|
|
|
/** Carried by a `dump_upvoted` notification, sent to the dump's poster. */
|
|
export interface DumpUpvotedData {
|
|
voterId: string;
|
|
voterUsername: string;
|
|
dumpId: string;
|
|
dumpTitle: string;
|
|
}
|
|
|
|
/**
|
|
* Carried by a `user_mentioned` notification, sent to a user @mentioned in a
|
|
* comment, a dump, a playlist's description or a chat message.
|
|
*/
|
|
export interface UserMentionedData {
|
|
mentionerId: string;
|
|
mentionerUsername: string;
|
|
contextType: "comment" | "dump" | "playlist" | "chat";
|
|
/** The id of the comment, dump, playlist or chat message. */
|
|
contextId: string;
|
|
/**
|
|
* The title of the dump or playlist, or of the dump a comment is under;
|
|
* empty for the chat.
|
|
*/
|
|
contextTitle: string;
|
|
/**
|
|
* Set only for a comment. It names the dump the comment is under, which the
|
|
* notification's link opens.
|
|
*/
|
|
dumpId?: string;
|
|
}
|
|
|
|
/** Carried by a `dump_commented` notification, sent to the dump's poster. */
|
|
export interface DumpCommentedData {
|
|
commenterId: string;
|
|
commenterUsername: string;
|
|
commentId: string;
|
|
dumpId: string;
|
|
dumpTitle: string;
|
|
}
|
|
|
|
/** Carried by a `comment_liked` notification, sent to the comment's author. */
|
|
export interface CommentLikedData {
|
|
likerId: string;
|
|
likerUsername: string;
|
|
commentId: string;
|
|
dumpId: string;
|
|
dumpTitle: string;
|
|
}
|
|
|
|
/**
|
|
* A snapshot taken when the notification is made: a name or title changed
|
|
* later still shows the old one. The notification's `type` says which member
|
|
* it is.
|
|
*/
|
|
export type NotificationData =
|
|
| PlaylistFollowedData
|
|
| UserFollowedData
|
|
| UserDumpPostedData
|
|
| PlaylistDumpAddedData
|
|
| DumpUpvotedData
|
|
| UserMentionedData
|
|
| DumpCommentedData
|
|
| CommentLikedData;
|
|
|
|
/**
|
|
* Pushed to its user's sockets in a `notification_created` message when it is
|
|
* made, and returned by `GET /api/notifications`.
|
|
*/
|
|
export interface Notification {
|
|
id: string;
|
|
userId: string;
|
|
type: NotificationType;
|
|
data: NotificationData;
|
|
read: boolean;
|
|
createdAt: Date;
|
|
}
|