syntax = "proto3"; package notifier.v1; option go_package = "github.com/igodwin/notifier/api/grpc/pb"; import "google/protobuf/timestamp.proto"; // NotifierService handles notification operations service NotifierService { // SendNotification sends a single notification rpc SendNotification(SendNotificationRequest) returns (SendNotificationResponse); // SendBatchNotifications sends multiple notifications rpc SendBatchNotifications(SendBatchNotificationsRequest) returns (SendBatchNotificationsResponse); // GetNotification retrieves a notification by ID rpc GetNotification(GetNotificationRequest) returns (GetNotificationResponse); // ListNotifications retrieves notifications matching a filter rpc ListNotifications(ListNotificationsRequest) returns (ListNotificationsResponse); // CancelNotification cancels a pending notification rpc CancelNotification(CancelNotificationRequest) returns (CancelNotificationResponse); // RetryNotification retries a failed notification rpc RetryNotification(RetryNotificationRequest) returns (RetryNotificationResponse); // GetStats returns notification statistics rpc GetStats(GetStatsRequest) returns (GetStatsResponse); // HealthCheck verifies the service is operational rpc HealthCheck(HealthCheckRequest) returns (HealthCheckResponse); } // NotificationType defines the channel for notification delivery enum NotificationType { NOTIFICATION_TYPE_UNSPECIFIED = 0; NOTIFICATION_TYPE_EMAIL = 1; NOTIFICATION_TYPE_SLACK = 2; NOTIFICATION_TYPE_NTFY = 3; NOTIFICATION_TYPE_STDOUT = 4; } // Priority defines the urgency level enum Priority { PRIORITY_UNSPECIFIED = 0; PRIORITY_LOW = 1; PRIORITY_NORMAL = 2; PRIORITY_HIGH = 3; PRIORITY_CRITICAL = 4; } // NotificationStatus represents the state of a notification enum NotificationStatus { NOTIFICATION_STATUS_UNSPECIFIED = 0; NOTIFICATION_STATUS_PENDING = 1; NOTIFICATION_STATUS_QUEUED = 2; NOTIFICATION_STATUS_PROCESSING = 3; NOTIFICATION_STATUS_SENT = 4; NOTIFICATION_STATUS_FAILED = 5; NOTIFICATION_STATUS_RETRYING = 6; } // Notification represents a notification message message Notification { string id = 1; NotificationType type = 2; Priority priority = 3; NotificationStatus status = 4; string subject = 5; string body = 6; repeated string recipients = 7; map metadata = 8; google.protobuf.Timestamp created_at = 9; google.protobuf.Timestamp scheduled_for = 10; google.protobuf.Timestamp sent_at = 11; int32 retry_count = 12; int32 max_retries = 13; string last_error = 14; } // NotificationResult represents the outcome of sending a notification message NotificationResult { string notification_id = 1; bool success = 2; string message = 3; string error = 4; google.protobuf.Timestamp sent_at = 5; map provider_response = 6; } // SendNotificationRequest sends a single notification message SendNotificationRequest { NotificationType type = 1; Priority priority = 2; string subject = 3; string body = 4; repeated string recipients = 5; map metadata = 6; google.protobuf.Timestamp scheduled_for = 7; int32 max_retries = 8; } // SendNotificationResponse returns the result of sending a notification message SendNotificationResponse { NotificationResult result = 1; } // SendBatchNotificationsRequest sends multiple notifications message SendBatchNotificationsRequest { repeated SendNotificationRequest notifications = 1; } // SendBatchNotificationsResponse returns the results of sending multiple notifications message SendBatchNotificationsResponse { repeated NotificationResult results = 1; } // GetNotificationRequest retrieves a notification by ID message GetNotificationRequest { string id = 1; } // GetNotificationResponse returns a notification message GetNotificationResponse { Notification notification = 1; } // NotificationFilter is used for querying notifications message NotificationFilter { repeated string ids = 1; repeated NotificationType types = 2; repeated NotificationStatus statuses = 3; repeated string recipients = 4; google.protobuf.Timestamp created_after = 5; google.protobuf.Timestamp created_before = 6; int32 limit = 7; int32 offset = 8; } // ListNotificationsRequest retrieves notifications matching a filter message ListNotificationsRequest { NotificationFilter filter = 1; } // ListNotificationsResponse returns a list of notifications message ListNotificationsResponse { repeated Notification notifications = 1; int64 total = 2; } // CancelNotificationRequest cancels a pending notification message CancelNotificationRequest { string id = 1; } // CancelNotificationResponse returns the result of canceling a notification message CancelNotificationResponse { bool success = 1; string message = 2; } // RetryNotificationRequest retries a failed notification message RetryNotificationRequest { string id = 1; } // RetryNotificationResponse returns the result of retrying a notification message RetryNotificationResponse { NotificationResult result = 1; } // GetStatsRequest requests notification statistics message GetStatsRequest {} // GetStatsResponse returns notification statistics message GetStatsResponse { int64 total_sent = 1; int64 total_failed = 2; int64 total_pending = 3; int64 total_queued = 4; map by_type = 5; map by_status = 6; double average_latency_ms = 7; } // HealthCheckRequest requests health status message HealthCheckRequest {} // HealthCheckResponse returns health status message HealthCheckResponse { bool healthy = 1; string status = 2; map components = 3; }