chore(project): initialize project with core configuration and dependencies

- Add .gitignore and .env.example files for project setup
- Create build script for proto compilation with tonic-prost
- Generate Cargo.lock with all project dependencies
- Configure project structure and ignore patterns for development environment
This commit is contained in:
zhenyi
2026-06-07 22:46:30 +08:00
commit 5fa7a82548
19 changed files with 3717 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
syntax = "proto3";
package email.v1;
import "google/protobuf/timestamp.proto";
enum EmailPriority {
EMAIL_PRIORITY_UNSPECIFIED = 0;
EMAIL_PRIORITY_LOW = 1;
EMAIL_PRIORITY_NORMAL = 2;
EMAIL_PRIORITY_HIGH = 3;
}
enum SendStatus {
SEND_STATUS_UNSPECIFIED = 0;
SEND_STATUS_QUEUED = 1;
SEND_STATUS_SENT = 2;
SEND_STATUS_FAILED = 3;
SEND_STATUS_SENDING = 4;
}
message EmailAddress {
string email = 1;
string name = 2;
}
message Attachment {
string filename = 1;
string content_type = 2;
bytes data = 3;
string url = 4;
}
message SendEmailRequest {
EmailAddress from = 1;
repeated EmailAddress to = 2;
repeated EmailAddress cc = 3;
repeated EmailAddress bcc = 4;
string subject = 5;
string text_body = 6;
string html_body = 7;
repeated Attachment attachments = 8;
EmailPriority priority = 9;
map<string, string> headers = 10;
string reply_to = 11;
}
message SendEmailResponse {
string message_id = 1;
SendStatus status = 2;
string provider = 3;
google.protobuf.Timestamp sent_at = 4;
}
message BatchSendEmailRequest {
repeated SendEmailRequest emails = 1;
bool fail_fast = 2;
}
message BatchSendEmailResponse {
repeated SendEmailResponse results = 1;
int32 success_count = 2;
int32 failure_count = 3;
}
message GetEmailStatusRequest {
string message_id = 1;
}
message GetEmailStatusResponse {
string message_id = 1;
SendStatus status = 2;
string error_detail = 3;
google.protobuf.Timestamp updated_at = 4;
}
service EmailService {
rpc SendEmail(SendEmailRequest) returns (SendEmailResponse);
rpc BatchSendEmail(BatchSendEmailRequest) returns (BatchSendEmailResponse);
rpc GetEmailStatus(GetEmailStatusRequest) returns (GetEmailStatusResponse);
rpc StreamBatchStatus(BatchSendEmailRequest)
returns (stream SendEmailResponse);
}