refactor(server): mail service (#10934)

This commit is contained in:
forehalo
2025-03-19 17:00:19 +00:00
parent b3a245f47a
commit 21c4a29f55
47 changed files with 2076 additions and 2131 deletions

View File

@@ -63,121 +63,105 @@ function make<T extends React.ComponentType<any>>(
};
}
// ================ User ================
export const renderSignInMail = make(SignIn, 'Sign in to AFFiNE');
export const renderSignUpMail = make(
SignUp,
'Your AFFiNE account is waiting for you!'
);
export const renderSetPasswordMail = make(
SetPassword,
'Set your AFFiNE password'
);
export const renderChangePasswordMail = make(
ChangePassword,
'Modify your AFFiNE password'
);
export const renderVerifyEmailMail = make(
VerifyEmail,
'Verify your email address'
);
export const renderChangeEmailMail = make(
ChangeEmail,
'Change your email address'
);
export const renderVerifyChangeEmailMail = make(
VerifyChangeEmail,
'Verify your new email address'
);
export const renderChangeEmailNotificationMail = make(
ChangeEmailNotification,
'Account email address changed'
);
export const Renderers = {
//#region User
SignIn: make(SignIn, 'Sign in to AFFiNE'),
SignUp: make(SignUp, 'Your AFFiNE account is waiting for you!'),
SetPassword: make(SetPassword, 'Set your AFFiNE password'),
ChangePassword: make(ChangePassword, 'Modify your AFFiNE password'),
VerifyEmail: make(VerifyEmail, 'Verify your email address'),
ChangeEmail: make(ChangeEmail, 'Change your email address'),
VerifyChangeEmail: make(VerifyChangeEmail, 'Verify your new email address'),
EmailChanged: make(ChangeEmailNotification, 'Account email address changed'),
//#endregion
// ================ Workspace ================
export const renderMemberInvitationMail = make(
Invitation,
props => `${props.user.email} invited you to join ${props.workspace.name}`
);
export const renderMemberAcceptedMail = make(
InvitationAccepted,
props => `${props.user.email} accepted your invitation`
);
export const renderMemberLeaveMail = make(
MemberLeave,
props => `${props.user.email} left ${props.workspace.name}`
);
export const renderLinkInvitationReviewRequestMail = make(
LinkInvitationReviewRequest,
props => `New request to join ${props.workspace.name}`
);
export const renderLinkInvitationApproveMail = make(
LinkInvitationApproved,
props => `Your request to join ${props.workspace.name} has been approved`
);
export const renderLinkInvitationDeclineMail = make(
LinkInvitationReviewDeclined,
props => `Your request to join ${props.workspace.name} was declined`
);
export const renderMemberRemovedMail = make(
MemberRemoved,
props => `You have been removed from ${props.workspace.name}`
);
export const renderOwnershipTransferredMail = make(
OwnershipTransferred,
props => `Your ownership of ${props.workspace.name} has been transferred`
);
export const renderOwnershipReceivedMail = make(
OwnershipReceived,
props => `You are now the owner of ${props.workspace.name}`
);
//#region Workspace
MemberInvitation: make(
Invitation,
props => `${props.user.email} invited you to join ${props.workspace.name}`
),
MemberAccepted: make(
InvitationAccepted,
props => `${props.user.email} accepted your invitation`
),
MemberLeave: make(
MemberLeave,
props => `${props.user.email} left ${props.workspace.name}`
),
LinkInvitationReviewRequest: make(
LinkInvitationReviewRequest,
props => `New request to join ${props.workspace.name}`
),
LinkInvitationApprove: make(
LinkInvitationApproved,
props => `Your request to join ${props.workspace.name} has been approved`
),
LinkInvitationDecline: make(
LinkInvitationReviewDeclined,
props => `Your request to join ${props.workspace.name} was declined`
),
MemberRemoved: make(
MemberRemoved,
props => `You have been removed from ${props.workspace.name}`
),
OwnershipTransferred: make(
OwnershipTransferred,
props => `Your ownership of ${props.workspace.name} has been transferred`
),
OwnershipReceived: make(
OwnershipReceived,
props => `You are now the owner of ${props.workspace.name}`
),
//#endregion
// ================ Team ================
export const renderTeamWorkspaceUpgradedMail = make(
TeamWorkspaceUpgraded,
props =>
//#region Team
TeamWorkspaceUpgraded: make(TeamWorkspaceUpgraded, props =>
props.isOwner
? 'Your workspace has been upgraded to team workspace! 🎉'
: `${props.workspace.name} has been upgraded to team workspace! 🎉`
);
),
TeamBecomeAdmin: make(
TeamBecomeAdmin,
props => `You are now an admin of ${props.workspace.name}`
),
TeamBecomeCollaborator: make(
TeamBecomeCollaborator,
props => `Your role has been changed in ${props.workspace.name}`
),
TeamDeleteIn24Hours: make(
TeamDeleteIn24Hours,
props =>
`[Action Required] Final warning: Your workspace ${props.workspace.name} will be deleted in 24 hours`
),
TeamDeleteInOneMonth: make(
TeamDeleteInOneMonth,
props =>
`[Action Required] Important: Your workspace ${props.workspace.name} will be deleted soon`
),
TeamWorkspaceDeleted: make(
TeamWorkspaceDeleted,
props => `Your workspace ${props.workspace.name} has been deleted`
),
TeamWorkspaceExpireSoon: make(
TeamExpireSoon,
props =>
`[Action Required] Your ${props.workspace.name} team workspace will expire soon`
),
TeamWorkspaceExpired: make(
TeamExpired,
props => `Your ${props.workspace.name} team workspace has expired`
),
//#endregion
export const renderTeamBecomeAdminMail = make(
TeamBecomeAdmin,
props => `You are now an admin of ${props.workspace.name}`
);
//#region License
TeamLicense: make(
TeamLicense,
'Your AFFiNE Self-Hosted Team Workspace license is ready'
),
//#endregion
} as const;
export const renderTeamBecomeCollaboratorMail = make(
TeamBecomeCollaborator,
props => `Your role has been changed in ${props.workspace.name}`
);
export const renderTeamDeleteIn24HoursMail = make(
TeamDeleteIn24Hours,
props =>
`[Action Required] Final warning: Your workspace ${props.workspace.name} will be deleted in 24 hours`
);
export const renderTeamDeleteIn1MonthMail = make(
TeamDeleteInOneMonth,
props =>
`[Action Required] Important: Your workspace ${props.workspace.name} will be deleted soon`
);
export const renderTeamWorkspaceDeletedMail = make(
TeamWorkspaceDeleted,
props => `Your workspace ${props.workspace.name} has been deleted`
);
export const renderTeamWorkspaceExpireSoonMail = make(
TeamExpireSoon,
props =>
`[Action Required] Your ${props.workspace.name} team workspace will expire soon`
);
export const renderTeamWorkspaceExpiredMail = make(
TeamExpired,
props => `Your ${props.workspace.name} team workspace has expired`
);
export const renderTeamLicenseMail = make(
TeamLicense,
'Your AFFiNE Self-Hosted Team Workspace license is ready'
);
export type MailName = keyof typeof Renderers;
export type MailProps<T extends MailName> = Parameters<
(typeof Renderers)[T]
>[0];