Ejemplos de Protocol Buffers
Ejemplos de esquemas Protocol Buffers (protobuf) desde estructuras simples hasta complejas
Key Facts
- Category
- Data Formats
- Items
- 6
- Format Families
- text
Sample Overview
Ejemplos de esquemas Protocol Buffers (protobuf) desde estructuras simples hasta complejas This sample set belongs to Data Formats and can be used to test related workflows inside Elysia Tools.
📝 Esquema de Usuario Básico
🟢 simple
Esquema protobuf simple de información de usuario
syntax = "proto3";
package user;
// Basic User Information Schema
message User {
string user_id = 1;
string username = 2;
string email = 3;
string first_name = 4;
string last_name = 5;
enum Gender {
GENDER_UNSPECIFIED = 0;
MALE = 1;
FEMALE = 2;
OTHER = 3;
}
Gender gender = 6;
string phone_number = 7;
string avatar_url = 8;
enum UserStatus {
STATUS_UNSPECIFIED = 0;
ACTIVE = 1;
INACTIVE = 2;
SUSPENDED = 3;
DELETED = 4;
}
UserStatus status = 9;
int64 created_at = 10;
int64 updated_at = 11;
int64 last_login_at = 12;
}
message UserProfile {
User user = 1;
string bio = 2;
string location = 3;
string website = 4;
repeated string interests = 5;
repeated string skills = 6;
message SocialLinks {
string github = 1;
string twitter = 2;
string linkedin = 3;
string facebook = 4;
string instagram = 5;
}
SocialLinks social_links = 7;
message Preferences {
string language = 1;
string timezone = 2;
string theme = 3;
bool email_notifications = 4;
bool push_notifications = 5;
}
Preferences preferences = 8;
}
message UserList {
repeated User users = 1;
int32 total_count = 2;
int32 page = 3;
int32 page_size = 4;
}
message CreateUserRequest {
string username = 1;
string email = 2;
string password = 3;
string first_name = 4;
string last_name = 5;
}
message CreateUserResponse {
bool success = 1;
string message = 2;
User user = 3;
}
message GetUserRequest {
oneof identifier {
string user_id = 1;
string username = 2;
string email = 3;
}
}
message GetUserResponse {
bool success = 1;
string message = 2;
UserProfile user_profile = 3;
}
📝 Esquema de Dispositivo IoT
🟡 intermediate
Esquema protobuf para transmisión de datos de dispositivo IoT
syntax = "proto3";
package iot;
// IoT Device Data Transmission Schema
message DeviceInfo {
string device_id = 1;
string device_name = 2;
string device_type = 3;
string manufacturer = 4;
string model = 5;
string firmware_version = 6;
string hardware_version = 7;
string serial_number = 8;
enum DeviceStatus {
DEVICE_STATUS_UNSPECIFIED = 0;
ONLINE = 1;
OFFLINE = 2;
ERROR = 3;
MAINTENANCE = 4;
DISABLED = 5;
}
DeviceStatus status = 9;
double battery_level = 10;
double signal_strength = 11;
int64 last_seen = 12;
string location = 13;
}
message SensorData {
string sensor_id = 1;
string sensor_type = 2;
double value = 3;
string unit = 4;
int64 timestamp = 5;
double quality = 6; // Data quality score 0-1
message Metadata {
repeated string tags = 1;
map<string, string> properties = 2;
}
Metadata metadata = 7;
}
message TelemetryData {
string device_id = 1;
int64 timestamp = 2;
repeated SensorData sensors = 3;
message Location {
double latitude = 1;
double longitude = 2;
double altitude = 3;
double accuracy = 4;
}
Location location = 4;
message DeviceMetrics {
double cpu_usage = 1;
double memory_usage = 2;
double disk_usage = 3;
double network_usage = 4;
double temperature = 5;
int64 uptime = 6;
}
DeviceMetrics device_metrics = 5;
repeated string events = 6;
repeated string alerts = 7;
}
message DeviceCommand {
string command_id = 1;
string device_id = 2;
string command_type = 3;
string payload = 4;
int64 timestamp = 5;
int64 timeout = 6;
enum CommandStatus {
COMMAND_STATUS_UNSPECIFIED = 0;
PENDING = 1;
EXECUTING = 2;
COMPLETED = 3;
FAILED = 4;
TIMEOUT = 5;
CANCELLED = 6;
}
CommandStatus status = 7;
string error_message = 8;
string result = 9;
int64 executed_at = 10;
int64 completed_at = 11;
}
message DeviceAlert {
string alert_id = 1;
string device_id = 2;
string alert_type = 3;
string severity = 4; // critical, warning, info
string message = 5;
map<string, string> parameters = 6;
int64 timestamp = 7;
bool acknowledged = 8;
string acknowledged_by = 9;
int64 acknowledged_at = 10;
bool resolved = 11;
string resolved_by = 12;
int64 resolved_at = 13;
}
message DeviceConfig {
string device_id = 1;
int64 version = 2;
int64 applied_at = 3;
map<string, string> settings = 4;
repeated SensorConfig sensor_configs = 5;
message SensorConfig {
string sensor_id = 1;
bool enabled = 2;
double sampling_rate = 3;
double threshold_min = 4;
double threshold_max = 5;
map<string, string> parameters = 6;
}
}
message DeviceRegistration {
string device_id = 1;
string device_type = 2;
string manufacturer = 3;
string model = 4;
string firmware_version = 5;
map<string, string> metadata = 6;
string auth_token = 7;
int64 registered_at = 8;
}
message TelemetryBatch {
string device_id = 1;
repeated TelemetryData telemetry_data = 2;
int64 batch_timestamp = 3;
int32 message_count = 4;
}
// IoT Device Service Definition
service IoTDeviceService {
// Register a new device
rpc RegisterDevice(DeviceRegistration) returns (DeviceInfo);
// Send telemetry data
rpc SendTelemetry(TelemetryData) returns (Empty);
// Send batch telemetry data
rpc SendTelemetryBatch(TelemetryBatch) returns (Empty);
// Send device alert
rpc SendAlert(DeviceAlert) returns (Empty);
// Get device info
rpc GetDeviceInfo(GetDeviceInfoRequest) returns (DeviceInfo);
// List devices
rpc ListDevices(ListDevicesRequest) returns (ListDevicesResponse);
// Update device config
rpc UpdateDeviceConfig(DeviceConfig) returns (Empty);
// Send command to device
rpc SendCommand(DeviceCommand) returns (DeviceCommand);
// Get device status
rpc GetDeviceStatus(GetDeviceStatusRequest) returns (DeviceStatus);
// Stream telemetry data (server streaming)
rpc StreamTelemetry(StreamTelemetryRequest) returns (stream TelemetryData);
}
message Empty {}
message GetDeviceInfoRequest {
string device_id = 1;
}
message ListDevicesRequest {
int32 page = 1;
int32 page_size = 2;
DeviceStatus status = 3;
string device_type = 4;
}
message ListDevicesResponse {
repeated DeviceInfo devices = 1;
int32 total_count = 2;
int32 page = 3;
int32 page_size = 4;
}
message GetDeviceStatusRequest {
string device_id = 1;
}
message DeviceStatus {
string device_id = 1;
DeviceInfo.DeviceStatus status = 2;
int64 last_seen = 3;
double battery_level = 4;
double signal_strength = 5;
}
message StreamTelemetryRequest {
string device_id = 1;
int64 start_timestamp = 2;
int64 end_timestamp = 3;
repeated string sensor_types = 4;
}
📝 Esquema de Pedido de E-commerce
🔴 complex
Esquema protobuf completo de sistema de pedidos de e-commerce
syntax = "proto3";
package ecommerce;
// E-commerce Order Management System
message Product {
string product_id = 1;
string name = 2;
string description = 3;
double price = 4;
string currency = 5;
enum ProductStatus {
STATUS_UNSPECIFIED = 0;
ACTIVE = 1;
INACTIVE = 2;
OUT_OF_STOCK = 3;
DISCONTINUED = 4;
}
ProductStatus status = 6;
int32 stock_quantity = 7;
repeated string categories = 8;
repeated string tags = 9;
message Image {
string url = 1;
string alt_text = 2;
int32 width = 3;
int32 height = 4;
}
repeated Image images = 10;
message Dimensions {
double length = 1;
double width = 2;
double height = 3;
double weight = 4;
string unit = 5;
}
Dimensions dimensions = 11;
int64 created_at = 12;
int64 updated_at = 13;
}
message OrderItem {
string product_id = 1;
string product_name = 2;
int32 quantity = 3;
double unit_price = 4;
double total_price = 5;
string currency = 6;
repeated string variant_options = 7;
}
message ShippingAddress {
string street_address = 1;
string city = 2;
string state = 3;
string postal_code = 4;
string country = 5;
string address_type = 6; // shipping, billing
string recipient_name = 7;
string phone_number = 8;
}
message PaymentInfo {
string payment_id = 1;
string payment_method = 2; // credit_card, paypal, bank_transfer
enum PaymentStatus {
PAYMENT_UNSPECIFIED = 0;
PENDING = 1;
PROCESSING = 2;
COMPLETED = 3;
FAILED = 4;
REFUNDED = 5;
CANCELLED = 6;
}
PaymentStatus status = 3;
double amount = 4;
string currency = 5;
string transaction_id = 6;
int64 payment_date = 7;
message CreditCardInfo {
string last_four_digits = 1;
string card_type = 2;
string expiry_month = 3;
string expiry_year = 4;
string cardholder_name = 5;
}
CreditCardInfo credit_card_info = 8;
}
message Order {
string order_id = 1;
string customer_id = 2;
string customer_email = 3;
enum OrderStatus {
ORDER_STATUS_UNSPECIFIED = 0;
PENDING = 1;
CONFIRMED = 2;
PROCESSING = 3;
SHIPPED = 4;
DELIVERED = 5;
CANCELLED = 6;
REFUNDED = 7;
RETURNED = 8;
}
OrderStatus status = 4;
repeated OrderItem items = 5;
double subtotal = 6;
double tax_amount = 7;
double shipping_cost = 8;
double discount_amount = 9;
double total_amount = 10;
string currency = 11;
ShippingAddress shipping_address = 12;
ShippingAddress billing_address = 13;
PaymentInfo payment_info = 14;
message ShippingInfo {
string tracking_number = 1;
string carrier = 2;
string shipping_method = 3;
int64 shipped_at = 4;
int64 estimated_delivery = 5;
int64 actual_delivery = 6;
}
ShippingInfo shipping_info = 15;
int64 created_at = 16;
int64 updated_at = 17;
string notes = 18;
}
message OrderList {
repeated Order orders = 1;
int32 total_count = 2;
int32 page = 3;
int32 page_size = 4;
}
message CreateOrderRequest {
string customer_id = 1;
string customer_email = 2;
repeated OrderItem items = 3;
ShippingAddress shipping_address = 4;
ShippingAddress billing_address = 5;
string payment_method = 6;
string discount_code = 7;
string notes = 8;
}
message CreateOrderResponse {
bool success = 1;
string message = 2;
Order order = 3;
string redirect_url = 4;
}
message GetOrdersRequest {
string customer_id = 1;
OrderStatus status = 2;
int32 page = 3;
int32 page_size = 4;
int64 start_date = 5;
int64 end_date = 6;
}
message GetOrdersResponse {
bool success = 1;
string message = 2;
OrderList order_list = 3;
}
message UpdateOrderStatusRequest {
string order_id = 1;
OrderStatus status = 2;
string notes = 3;
message ShippingInfoUpdate {
string tracking_number = 1;
string carrier = 2;
int64 estimated_delivery = 3;
}
ShippingInfoUpdate shipping_info = 4;
}
message UpdateOrderStatusResponse {
bool success = 1;
string message = 2;
Order order = 3;
}
📝 Esquema de Sistema de Chat
🔴 complex
Definición de esquema protobuf para sistema de chat en tiempo real
syntax = "proto3";
package chat;
// Real-time Chat System Schema
message User {
string user_id = 1;
string username = 2;
string display_name = 3;
string avatar_url = 4;
enum UserStatus {
STATUS_UNSPECIFIED = 0;
ONLINE = 1;
AWAY = 2;
BUSY = 3;
INVISIBLE = 4;
OFFLINE = 5;
}
UserStatus status = 5;
string status_message = 6;
int64 last_seen = 7;
bool is_typing = 8;
}
message Message {
string message_id = 1;
string chat_id = 2;
string sender_id = 3;
string content = 4;
int64 timestamp = 5;
enum MessageType {
MESSAGE_TYPE_UNSPECIFIED = 0;
TEXT = 1;
IMAGE = 2;
FILE = 3;
VOICE = 4;
VIDEO = 5;
LOCATION = 6;
CONTACT = 7;
SYSTEM = 8;
}
MessageType type = 6;
message MediaInfo {
string url = 1;
string file_name = 2;
string mime_type = 3;
int64 file_size = 4;
int32 width = 5;
int32 height = 6;
int32 duration = 7; // for audio/video in seconds
}
MediaInfo media_info = 7;
message ReplyInfo {
string original_message_id = 1;
string original_sender_id = 2;
string original_content = 3;
int64 original_timestamp = 4;
}
ReplyInfo reply_info = 8;
message ForwardInfo {
string original_chat_id = 1;
string original_sender_id = 2;
int64 original_timestamp = 3;
}
ForwardInfo forward_info = 9;
enum MessageStatus {
MESSAGE_STATUS_UNSPECIFIED = 0;
SENT = 1;
DELIVERED = 2;
READ = 3;
FAILED = 4;
DELETED = 5;
}
MessageStatus status = 10;
int64 edited_at = 11;
int64 deleted_at = 12;
}
message Chat {
string chat_id = 1;
string chat_name = 2;
string description = 3;
enum ChatType {
CHAT_TYPE_UNSPECIFIED = 0;
DIRECT = 1;
GROUP = 2;
CHANNEL = 3;
BROADCAST = 4;
}
ChatType type = 4;
string avatar_url = 5;
repeated string participants = 6;
string admin_id = 7;
message GroupInfo {
repeated string admins = 1;
bool read_only = 2;
bool join_approval_required = 3;
int32 max_participants = 4;
}
GroupInfo group_info = 8;
message LastMessage {
string message_id = 1;
string content = 2;
string sender_id = 3;
int64 timestamp = 4;
MessageType type = 5;
}
LastMessage last_message = 9;
int64 created_at = 10;
int64 updated_at = 11;
message UnreadCount {
int32 total = 1;
int32 mentions = 2;
}
UnreadCount unread_count = 12;
bool is_pinned = 13;
bool is_muted = 14;
}
message ChatList {
repeated Chat chats = 1;
int32 total_count = 2;
int32 unread_chats = 3;
int32 unread_messages = 4;
}
message SendMessageRequest {
string chat_id = 1;
string content = 2;
MessageType type = 3;
string reply_to_message_id = 4;
MediaInfo media_info = 5;
}
message SendMessageResponse {
bool success = 1;
string message = 2;
Message sent_message = 3;
}
message GetChatsRequest {
int32 page = 1;
int32 page_size = 2;
bool archived_only = 3;
bool pinned_only = 4;
}
message GetChatsResponse {
bool success = 1;
string message = 2;
ChatList chat_list = 3;
}
message GetMessagesRequest {
string chat_id = 1;
string from_message_id = 2;
int32 limit = 3;
bool older_messages = 4;
}
message GetMessagesResponse {
bool success = 1;
string message = 2;
repeated Message messages = 3;
bool has_more = 4;
}
message TypingEvent {
string chat_id = 1;
string user_id = 2;
bool is_typing = 3;
int64 timestamp = 4;
}
message UserStatusEvent {
string user_id = 1;
UserStatus status = 2;
string status_message = 3;
int64 last_seen = 4;
}
message ReadReceipt {
string message_id = 1;
string user_id = 2;
int64 read_at = 3;
}
message NotificationEvent {
string event_type = 1;
string chat_id = 2;
string user_id = 3;
Message message = 4;
int64 timestamp = 5;
}
// Chat Service Definition
service ChatService {
// Send a message
rpc SendMessage(SendMessageRequest) returns (SendMessageResponse);
// Get chat list
rpc GetChats(GetChatsRequest) returns (GetChatsResponse);
// Get messages in a chat
rpc GetMessages(GetMessagesRequest) returns (GetMessagesResponse);
// Mark message as read
rpc MarkMessageRead(ReadReceipt) returns (Empty);
// Create group chat
rpc CreateGroupChat(CreateGroupChatRequest) returns (CreateGroupChatResponse);
// Join chat
rpc JoinChat(JoinChatRequest) returns (JoinChatResponse);
// Leave chat
rpc LeaveChat(LeaveChatRequest) returns (LeaveChatResponse);
}
message Empty {}
message CreateGroupChatRequest {
string chat_name = 1;
string description = 2;
repeated string participants = 3;
string avatar_url = 4;
}
message CreateGroupChatResponse {
bool success = 1;
string message = 2;
Chat chat = 3;
}
message JoinChatRequest {
string chat_id = 1;
string invite_link = 2;
}
message JoinChatResponse {
bool success = 1;
string message = 2;
Chat chat = 3;
}
message LeaveChatRequest {
string chat_id = 1;
bool delete_for_everyone = 2;
}
message LeaveChatResponse {
bool success = 1;
string message = 2;
}
📝 Esquema de Servicio gRPC
🔴 complex
Definición de servicio protobuf para servicio gRPC
syntax = "proto3";
package userservice;
import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto";
// User Management gRPC Service
message User {
string user_id = 1;
string username = 2;
string email = 3;
string first_name = 4;
string last_name = 5;
string phone_number = 6;
string avatar_url = 7;
enum Gender {
GENDER_UNSPECIFIED = 0;
MALE = 1;
FEMALE = 2;
OTHER = 3;
}
Gender gender = 8;
enum UserStatus {
STATUS_UNSPECIFIED = 0;
ACTIVE = 1;
INACTIVE = 2;
SUSPENDED = 3;
DELETED = 4;
}
UserStatus status = 9;
google.protobuf.Timestamp created_at = 10;
google.protobuf.Timestamp updated_at = 11;
google.protobuf.Timestamp last_login_at = 12;
}
message UserProfile {
User user = 1;
string bio = 2;
string location = 3;
string website = 4;
repeated string interests = 5;
repeated string skills = 6;
message SocialLinks {
string github = 1;
string twitter = 2;
string linkedin = 3;
string facebook = 4;
string instagram = 5;
}
SocialLinks social_links = 7;
message Preferences {
string language = 1;
string timezone = 2;
string theme = 3;
bool email_notifications = 4;
bool push_notifications = 5;
}
Preferences preferences = 8;
}
message CreateUserRequest {
string username = 1;
string email = 2;
string password = 3;
string first_name = 4;
string last_name = 5;
string phone_number = 6;
User.Gender gender = 7;
}
message CreateUserResponse {
bool success = 1;
string message = 2;
User user = 3;
}
message GetUserRequest {
oneof identifier {
string user_id = 1;
string username = 2;
string email = 3;
}
}
message GetUserResponse {
bool success = 1;
string message = 2;
UserProfile user_profile = 3;
}
message UpdateUserRequest {
string user_id = 1;
optional string first_name = 2;
optional string last_name = 3;
optional string phone_number = 4;
optional User.Gender gender = 5;
optional string avatar_url = 6;
}
message UpdateUserResponse {
bool success = 1;
string message = 2;
User user = 3;
}
message DeleteUserRequest {
string user_id = 1;
bool hard_delete = 2;
}
message DeleteUserResponse {
bool success = 1;
string message = 2;
}
message ListUsersRequest {
int32 page = 1;
int32 page_size = 2;
User.UserStatus status = 3;
string search_query = 4;
string sort_by = 5;
string sort_order = 6;
}
message ListUsersResponse {
bool success = 1;
string message = 2;
repeated User users = 3;
int32 total_count = 4;
int32 page = 5;
int32 page_size = 6;
}
message AuthenticateUserRequest {
string username = 1;
string password = 2;
}
message AuthenticateUserResponse {
bool success = 1;
string message = 2;
User user = 3;
string access_token = 4;
string refresh_token = 5;
int64 expires_in = 6;
}
message RefreshTokenRequest {
string refresh_token = 1;
}
message RefreshTokenResponse {
bool success = 1;
string message = 2;
string access_token = 3;
string refresh_token = 4;
int64 expires_in = 5;
}
message ChangePasswordRequest {
string user_id = 1;
string current_password = 2;
string new_password = 3;
}
message ChangePasswordResponse {
bool success = 1;
string message = 2;
}
message UploadAvatarRequest {
string user_id = 1;
bytes avatar_data = 2;
string file_name = 3;
string mime_type = 4;
}
message UploadAvatarResponse {
bool success = 1;
string message = 2;
string avatar_url = 3;
}
// User Management gRPC Service Definition
service UserService {
// Create a new user
rpc CreateUser(CreateUserRequest) returns (CreateUserResponse);
// Get user by ID, username, or email
rpc GetUser(GetUserRequest) returns (GetUserResponse);
// Update user information
rpc UpdateUser(UpdateUserRequest) returns (UpdateUserResponse);
// Delete user
rpc DeleteUser(DeleteUserRequest) returns (DeleteUserResponse);
// List users with pagination and filtering
rpc ListUsers(ListUsersRequest) returns (ListUsersResponse);
// Authenticate user credentials
rpc AuthenticateUser(AuthenticateUserRequest) returns (AuthenticateUserResponse);
// Refresh access token
rpc RefreshToken(RefreshTokenRequest) returns (RefreshTokenResponse);
// Change user password
rpc ChangePassword(ChangePasswordRequest) returns (ChangePasswordResponse);
// Upload user avatar
rpc UploadAvatar(stream UploadAvatarRequest) returns (UploadAvatarResponse);
// Get current user (from auth token)
rpc GetCurrentUser(google.protobuf.Empty) returns (GetUserResponse);
// Validate user token
rpc ValidateToken(ValidateTokenRequest) returns (ValidateTokenResponse);
// Logout user
rpc Logout(LogoutRequest) returns (LogoutResponse);
}
message ValidateTokenRequest {
string access_token = 1;
}
message ValidateTokenResponse {
bool success = 1;
string message = 2;
string user_id = 3;
int64 expires_at = 4;
}
message LogoutRequest {
string access_token = 1;
}
message LogoutResponse {
bool success = 1;
string message = 2;
}
📝 Esquema de Transacción Financiera
🔴 complex
Esquema de datos protobuf para sistema de transacciones financieras
syntax = "proto3";
package financial;
import "google/protobuf/timestamp.proto";
// Financial Transaction System Schema
message Account {
string account_id = 1;
string account_number = 2;
string customer_id = 3;
enum AccountType {
ACCOUNT_TYPE_UNSPECIFIED = 0;
CHECKING = 1;
SAVINGS = 2;
CREDIT_CARD = 3;
INVESTMENT = 4;
LOAN = 5;
}
AccountType account_type = 4;
enum AccountStatus {
ACCOUNT_STATUS_UNSPECIFIED = 0;
ACTIVE = 1;
INACTIVE = 2;
FROZEN = 3;
CLOSED = 4;
SUSPENDED = 5;
}
AccountStatus status = 5;
double balance = 6;
string currency = 7;
double credit_limit = 8;
double available_balance = 9;
google.protobuf.Timestamp created_at = 10;
google.protobuf.Timestamp updated_at = 11;
google.protobuf.Timestamp last_activity = 12;
}
message Transaction {
string transaction_id = 1;
string account_id = 2;
string reference_id = 3;
string description = 4;
double amount = 5;
string currency = 6;
enum TransactionType {
TRANSACTION_TYPE_UNSPECIFIED = 0;
DEBIT = 1;
CREDIT = 2;
TRANSFER_IN = 3;
TRANSFER_OUT = 4;
PAYMENT = 5;
REFUND = 6;
FEE = 7;
INTEREST = 8;
}
TransactionType transaction_type = 7;
enum TransactionStatus {
TRANSACTION_STATUS_UNSPECIFIED = 0;
PENDING = 1;
PROCESSING = 2;
COMPLETED = 3;
FAILED = 4;
CANCELLED = 5;
REVERSED = 6;
}
TransactionStatus status = 8;
google.protobuf.Timestamp transaction_date = 9;
google.protobuf.Timestamp post_date = 10;
message Counterparty {
string name = 1;
string account_number = 2;
string bank_code = 3;
string address = 4;
}
Counterparty counterparty = 11;
repeated string tags = 12;
string category = 13;
string subcategory = 14;
message Metadata {
map<string, string> custom_fields = 1;
string external_reference = 2;
string source = 3;
}
Metadata metadata = 15;
}
message Payment {
string payment_id = 1;
string payer_account_id = 2;
string payee_account_id = 3;
double amount = 4;
string currency = 5;
string reference = 6;
string description = 7;
enum PaymentMethod {
PAYMENT_METHOD_UNSPECIFIED = 0;
BANK_TRANSFER = 1;
CREDIT_CARD = 2;
DEBIT_CARD = 3;
DIGITAL_WALLET = 4;
CRYPTOCURRENCY = 5;
CASH = 6;
}
PaymentMethod payment_method = 8;
enum PaymentStatus {
PAYMENT_STATUS_UNSPECIFIED = 0;
INITIATED = 1;
PENDING = 2;
PROCESSING = 3;
COMPLETED = 4;
FAILED = 5;
CANCELLED = 6;
REFUNDED = 7;
}
PaymentStatus status = 9;
google.protobuf.Timestamp created_at = 10;
google.protobuf.Timestamp completed_at = 11;
message Fees {
double processing_fee = 1;
double transaction_fee = 2;
double currency_conversion_fee = 3;
string fee_currency = 4;
}
Fees fees = 12;
message ExchangeRate {
string from_currency = 1;
string to_currency = 2;
double rate = 3;
google.protobuf.Timestamp rate_date = 4;
}
ExchangeRate exchange_rate = 13;
}
message Card {
string card_id = 1;
string account_id = 2;
string card_number_masked = 3;
string cardholder_name = 4;
enum CardType {
CARD_TYPE_UNSPECIFIED = 0;
DEBIT = 1;
CREDIT = 2;
PREPAID = 3;
}
CardType card_type = 4;
enum CardBrand {
CARD_BRAND_UNSPECIFIED = 0;
VISA = 1;
MASTERCARD = 2;
AMERICAN_EXPRESS = 3;
DISCOVER = 4;
JCB = 5;
UNIONPAY = 6;
}
CardBrand card_brand = 5;
string expiry_month = 6;
string expiry_year = 7;
bool is_active = 8;
bool is_contactless = 9;
double credit_limit = 10;
double available_credit = 11;
google.protobuf.Timestamp issued_at = 12;
google.protobuf.Timestamp expires_at = 13;
google.protobuf.Timestamp last_used = 14;
}
message Customer {
string customer_id = 1;
string first_name = 2;
string last_name = 3;
string email = 4;
string phone_number = 5;
string date_of_birth = 6;
string ssn_last_4 = 7;
enum CustomerStatus {
CUSTOMER_STATUS_UNSPECIFIED = 0;
ACTIVE = 1;
INACTIVE = 2;
SUSPENDED = 3;
CLOSED = 4;
VERIFIED = 5;
UNVERIFIED = 6;
}
CustomerStatus status = 8;
enum CustomerTier {
CUSTOMER_TIER_UNSPECIFIED = 0;
BASIC = 1;
SILVER = 2;
GOLD = 3;
PLATINUM = 4;
}
CustomerTier tier = 9;
message Address {
string street = 1;
string city = 2;
string state = 3;
string postal_code = 4;
string country = 5;
bool is_primary = 6;
}
repeated Address addresses = 10;
google.protobuf.Timestamp created_at = 11;
google.protobuf.Timestamp updated_at = 12;
google.protobuf.Timestamp last_login = 13;
}
message TransactionList {
repeated Transaction transactions = 1;
int32 total_count = 2;
int32 page = 3;
int32 page_size = 4;
double total_debits = 5;
double total_credits = 6;
}
message AccountSummary {
Account account = 1;
double current_balance = 2;
double available_balance = 3;
double pending_debits = 4;
double pending_credits = 5;
message RecentTransaction {
string transaction_id = 1;
string description = 2;
double amount = 3;
google.protobuf.Timestamp date = 4;
}
repeated RecentTransaction recent_transactions = 6;
google.protobuf.Timestamp as_of_date = 7;
}
// Financial Service Definition
service FinancialService {
// Create new account
rpc CreateAccount(CreateAccountRequest) returns (CreateAccountResponse);
// Get account information
rpc GetAccount(GetAccountRequest) returns (Account);
// Get account summary
rpc GetAccountSummary(GetAccountSummaryRequest) returns (AccountSummary);
// Get transactions
rpc GetTransactions(GetTransactionsRequest) returns (TransactionList);
// Make payment
rpc MakePayment(MakePaymentRequest) returns (Payment);
// Get payment status
rpc GetPayment(GetPaymentRequest) returns (Payment);
// Issue new card
rpc IssueCard(IssueCardRequest) returns (Card);
// Get customer information
rpc GetCustomer(GetCustomerRequest) returns (Customer);
// Stream real-time transactions
rpc StreamTransactions(StreamTransactionsRequest) returns (stream Transaction);
}
message CreateAccountRequest {
string customer_id = 1;
AccountType account_type = 2;
string currency = 3;
double initial_deposit = 4;
}
message CreateAccountResponse {
bool success = 1;
string message = 2;
Account account = 3;
}
message GetAccountRequest {
oneof identifier {
string account_id = 1;
string account_number = 2;
}
}
message GetAccountSummaryRequest {
string account_id = 1;
google.protobuf.Timestamp as_of_date = 2;
}
message GetTransactionsRequest {
string account_id = 1;
google.protobuf.Timestamp start_date = 2;
google.protobuf.Timestamp end_date = 3;
int32 page = 4;
int32 page_size = 5;
TransactionType transaction_type = 6;
}
message MakePaymentRequest {
string payer_account_id = 1;
string payee_account_id = 2;
double amount = 3;
string currency = 4;
string reference = 5;
string description = 6;
PaymentMethod payment_method = 7;
}
message GetPaymentRequest {
string payment_id = 1;
}
message IssueCardRequest {
string account_id = 1;
CardType card_type = 2;
string cardholder_name = 3;
bool is_contactless = 4;
}
message GetCustomerRequest {
oneof identifier {
string customer_id = 1;
string email = 2;
string phone_number = 3;
}
}
message StreamTransactionsRequest {
string account_id = 1;
google.protobuf.Timestamp since_timestamp = 2;
repeated TransactionType transaction_types = 3;
}