using System; using SharedLibraryCore; using SharedLibraryCore.Alerts; using SharedLibraryCore.Database.Models; namespace IW4MAdmin.Application.Alerts; /// /// extension method helper class to allow building of alerts /// public static class AlertExtensions { /// /// builds basic alert for user with provided category /// /// client to build the alert for /// alert category /// public static Alert.AlertState BuildAlert(this EFClient client, Alert.AlertCategory? type = null) { return new Alert.AlertState { RecipientId = client.ClientId, Category = type ?? Alert.AlertCategory.Information }; } /// /// sets the category for an existing alert /// /// existing alert /// new category /// public static Alert.AlertState WithCategory(this Alert.AlertState state, Alert.AlertCategory category) { state.Category = category; return state; } /// /// sets the alert type for an existing alert /// /// existing alert /// new type /// public static Alert.AlertState OfType(this Alert.AlertState state, string type) { state.Type = type; return state; } /// /// sets the message for an existing alert /// /// existing alert /// new message /// public static Alert.AlertState WithMessage(this Alert.AlertState state, string message) { state.Message = message; return state; } /// /// sets the expiration duration for an existing alert /// /// existing alert /// duration before expiration /// public static Alert.AlertState ExpiresIn(this Alert.AlertState state, TimeSpan expiration) { state.ExpiresAt = DateTime.Now.Add(expiration); return state; } /// /// sets the source for an existing alert /// /// existing alert /// new source /// public static Alert.AlertState FromSource(this Alert.AlertState state, string source) { state.Source = source; return state; } /// /// sets the alert source to the provided client /// /// existing alert /// new client /// public static Alert.AlertState FromClient(this Alert.AlertState state, EFClient client) { state.Source = client.Name.StripColors(); state.SourceId = client.ClientId; return state; } }