89 lines
2.8 KiB
Protocol Buffer
89 lines
2.8 KiB
Protocol Buffer
syntax = "proto3";
|
||
|
||
package agate.grpc;
|
||
|
||
import "google/protobuf/timestamp.proto";
|
||
import "google/api/annotations.proto";
|
||
|
||
option go_package = "gitea.unprism.ru/KRBL/Agate/grpc";
|
||
|
||
// Сервис для управления снапшотами
|
||
service SnapshotService {
|
||
// Получить список доступных снапшотов (краткая информация)
|
||
rpc ListSnapshots(ListSnapshotsRequest) returns (ListSnapshotsResponse) {
|
||
option (google.api.http) = {
|
||
get: "/v1/snapshots"
|
||
};
|
||
}
|
||
|
||
// Получить детальную информацию о снапшоте, включая список файлов с хешами
|
||
rpc GetSnapshotDetails(GetSnapshotDetailsRequest) returns (SnapshotDetails) {
|
||
option (google.api.http) = {
|
||
get: "/v1/snapshots/{snapshot_id}"
|
||
};
|
||
}
|
||
|
||
// Скачать конкретный файл из снапшота (потоковая передача)
|
||
rpc DownloadFile(DownloadFileRequest) returns (stream DownloadFileResponse) {
|
||
option (google.api.http) = {
|
||
get: "/v1/snapshots/{snapshot_id}/files/{file_path}"
|
||
};
|
||
}
|
||
|
||
// Скачать архив, содержащий только разницу между двумя снапшотами
|
||
rpc DownloadSnapshotDiff(DownloadSnapshotDiffRequest) returns (stream DownloadFileResponse) {}
|
||
}
|
||
|
||
// Метаданные файла внутри снапшота
|
||
message FileInfo {
|
||
string path = 1;
|
||
int64 size_bytes = 2;
|
||
string sha256_hash = 3;
|
||
bool is_dir = 4;
|
||
}
|
||
|
||
// Краткая информация о снапшоте
|
||
message SnapshotInfo {
|
||
string id = 1;
|
||
string name = 2;
|
||
string parent_id = 3;
|
||
google.protobuf.Timestamp creation_time = 4;
|
||
}
|
||
|
||
// Детальная информация о снапшоте
|
||
message SnapshotDetails {
|
||
SnapshotInfo info = 1;
|
||
repeated FileInfo files = 2;
|
||
}
|
||
|
||
// Запрос на получение списка снапшотов
|
||
message ListSnapshotsRequest {}
|
||
|
||
// Ответ со списком снапшотов
|
||
message ListSnapshotsResponse {
|
||
repeated SnapshotInfo snapshots = 1;
|
||
}
|
||
|
||
// Запрос на получение деталей снапшота
|
||
message GetSnapshotDetailsRequest {
|
||
string snapshot_id = 1;
|
||
}
|
||
|
||
// Запрос на скачивание файла
|
||
message DownloadFileRequest {
|
||
string snapshot_id = 1;
|
||
string file_path = 2;
|
||
}
|
||
|
||
// Ответ (часть файла) при скачивании
|
||
message DownloadFileResponse {
|
||
bytes chunk_data = 1;
|
||
}
|
||
|
||
// Запрос на скачивание разницы между снапшотами
|
||
message DownloadSnapshotDiffRequest {
|
||
string snapshot_id = 1; // ID целевого снапшота
|
||
string local_parent_id = 2; // ID снапшота, который уже есть у клиента
|
||
int64 offset = 3; // Смещение в байтах для докачки
|
||
}
|