feat(labrinth): instance share notification (#6581)

This commit is contained in:
Sychic
2026-07-01 14:21:56 +00:00
committed by GitHub
parent a00a7971d1
commit d20f05fb04
4 changed files with 57 additions and 0 deletions
@@ -0,0 +1,6 @@
INSERT INTO notifications_types
(name, delivery_priority, expose_in_user_preferences, expose_in_site_notifications)
VALUES ('shared_instance_invite', 1, FALSE, TRUE);
INSERT INTO users_notifications_preferences (user_id, channel, notification_type, enabled)
VALUES (NULL, 'email', 'shared_instance_invite', FALSE);
@@ -73,6 +73,10 @@ pub enum LegacyNotificationBody {
invited_by: UserId,
role: String,
},
SharedInstanceInvite {
shared_instance_id: String,
shared_instance_name: String,
},
StatusChange {
project_id: ProjectId,
old_status: ProjectStatus,
@@ -177,6 +181,9 @@ impl LegacyNotification {
NotificationBody::ServerInvite { .. } => {
Some("server_invite".to_string())
}
NotificationBody::SharedInstanceInvite { .. } => {
Some("shared_instance_invite".to_string())
}
NotificationBody::StatusChange { .. } => {
Some("status_change".to_string())
}
@@ -294,6 +301,13 @@ impl LegacyNotification {
invited_by,
role,
},
NotificationBody::SharedInstanceInvite {
shared_instance_id,
shared_instance_name,
} => LegacyNotificationBody::SharedInstanceInvite {
shared_instance_id,
shared_instance_name,
},
NotificationBody::StatusChange {
project_id,
old_status,
@@ -36,6 +36,7 @@ pub enum NotificationType {
TeamInvite,
OrganizationInvite,
ServerInvite,
SharedInstanceInvite,
StatusChange,
ModeratorMessage,
LegacyMarkdown,
@@ -71,6 +72,7 @@ impl NotificationType {
NotificationType::TeamInvite => "team_invite",
NotificationType::OrganizationInvite => "organization_invite",
NotificationType::ServerInvite => "server_invite",
NotificationType::SharedInstanceInvite => "shared_instance_invite",
NotificationType::StatusChange => "status_change",
NotificationType::ModeratorMessage => "moderator_message",
NotificationType::LegacyMarkdown => "legacy_markdown",
@@ -112,6 +114,7 @@ impl NotificationType {
"team_invite" => NotificationType::TeamInvite,
"organization_invite" => NotificationType::OrganizationInvite,
"server_invite" => NotificationType::ServerInvite,
"shared_instance_invite" => NotificationType::SharedInstanceInvite,
"status_change" => NotificationType::StatusChange,
"moderator_message" => NotificationType::ModeratorMessage,
"legacy_markdown" => NotificationType::LegacyMarkdown,
@@ -173,6 +176,10 @@ pub enum NotificationBody {
invited_by: UserId,
role: String,
},
SharedInstanceInvite {
shared_instance_id: String,
shared_instance_name: String,
},
StatusChange {
project_id: ProjectId,
old_status: ProjectStatus,
@@ -288,6 +295,9 @@ impl NotificationBody {
NotificationBody::ServerInvite { .. } => {
NotificationType::ServerInvite
}
NotificationBody::SharedInstanceInvite { .. } => {
NotificationType::SharedInstanceInvite
}
NotificationBody::StatusChange { .. } => {
NotificationType::StatusChange
}
@@ -470,6 +480,32 @@ impl From<DBNotification> for Notification {
},
],
),
NotificationBody::SharedInstanceInvite {
shared_instance_name,
..
} => (
"You have been invited to a shared instance!".to_string(),
format!(
"An invite has been sent for you to join {shared_instance_name}"
),
"#".to_string(),
vec![
NotificationAction {
name: "Accept".to_string(),
action_route: (
"POST".to_string(),
String::new(),
),
},
NotificationAction {
name: "Deny".to_string(),
action_route: (
"POST".to_string(),
String::new(),
),
},
],
),
NotificationBody::StatusChange {
old_status,
new_status,
@@ -772,6 +772,7 @@ async fn collect_template_variables(
}
NotificationBody::ProjectUpdate { .. }
| NotificationBody::SharedInstanceInvite { .. }
| NotificationBody::ModeratorMessage { .. }
| NotificationBody::LegacyMarkdown { .. }
| NotificationBody::Unknown => Ok(EmailTemplate::Static(map)),