-
ko_oler authoredef1cfdde
files.proto 5.13 KiB
syntax = "proto3";
import "google/protobuf/empty.proto";
option go_package = "git.perx.ru/perxis/perxis-go/proto/files;files";
package files;
// Сущности
message File {
string id = 1; // Уникальный идентификатор файла в хранилище
string name = 2; // Имя файла
uint64 size = 3; // Размер файла
string mime_type = 4; // Mime-type файла
string url = 5; // Адрес для загрузки файла
bool temporary = 6; // Находится ли файл во временном хранилище
}
message MultipartUpload {
File file = 1;
string upload_id = 2; // Идентификатор загрузки хранилища
uint64 part_size = 3; // Размер блока для загрузки
repeated string part_urls = 4; // Адреса для загрузки пол
repeated CompletedPart parts = 5; // Идентификаторы загруженных блоков (S3 ETAGs)
}
message Upload {
File file = 1;
string upload_url = 2; // URL для загрузки файлов
}
message CompletedPart {
int32 number = 1;
string id = 2;
}
// Запросы и ответы
message StartUploadRequest {
MultipartUpload upload = 1;
}
message StartUploadResponse {
MultipartUpload upload = 1;
}
message CompleteUploadRequest {
MultipartUpload upload = 1;
}
message CompleteUploadResponse {
MultipartUpload upload = 1;
}
message AbortUploadRequest {
MultipartUpload upload = 1;
}
message AbortUploadResponse {}
message MoveUploadRequest {
MultipartUpload upload = 1;
}
message MoveUploadResponse {
File file = 1;
}
message UploadRequest {
File file = 1;
}
message UploadResponse {
Upload upload = 1;
}
message GetFileRequest {
string id = 1;
}
message GetFileResponse {
File file = 1;
}
message DeleteFileRequest {
File file = 1;
}
message DeleteFileResponse {}
service Files {
// StartUpload - инициирует процедуру загрузки файла в файловое хранилище.
// Используется клиентским приложением для начала загрузки файла
// Требуемые параметры: объект `MultipartUpload` с вложенным объектом `File`, в котором
// обязательные поля Name и Size.
// Возвращает объект с заполненными полями ID, PartSize, PartURLs, MimeType, Size, UploadID.
rpc StartUpload(StartUploadRequest) returns(StartUploadResponse) {}
// CompleteUpload - завершает процедуру загрузку файла
// Предполагается, что в объекте, полученном из `StartUpload`, клиент должен заполнить поле
// Parts (идентификаторами загруженных блоков (S3 ETAGs)) и передать его в `CompleteUpload`
rpc CompleteUpload(CompleteUploadRequest) returns(CompleteUploadResponse) {}
// AbortUpload - прерывает процедуру загрузки файла, все загруженные части файла удаляются их хранилища
rpc AbortUpload(AbortUploadRequest) returns(google.protobuf.Empty) {}
// MoveUpload - перемещает загруженный файл из временного расположения в постоянное месторасположения.
// После перемещение загрузки хранилище выдает новый идентификатор постоянного файла
rpc MoveUpload(MoveUploadRequest) returns(MoveUploadResponse) {}
// Upload - инициация загрузки файла в хранилище. Возвращает объект, содержащий подписанный URL.
// Завершение загрузки файла осуществляется выполнением POST-запроса
rpc Upload(UploadRequest) returns(UploadResponse) {}
// GetFile - получить информацию о файле (ссылку) по ID
rpc GetFile(GetFileRequest) returns(GetFileResponse) {}
// DeleteFile - удаляет файл. Если происходит удаление оригинала,
// удаляются и все связанные структуры
// Возможны следующие ситуации:
// - Удаление оригинального файла. Удаляется файл и все связанные с ним файлы.
// - Удаление связанного файла. Для удаления конкретного файла передается 'ID', 'Type' и 'Name'
// - Удаления связанных файлов конкретного типа (например, все 'thumbnails'). Передается 'ID' и 'Type'
rpc DeleteFile(DeleteFileRequest) returns(google.protobuf.Empty) {}
}
message FileEvent {
string file_id = 1;
message Upload {}
message MoveUpload {}
message Delete {}
oneof event {
Upload upload = 100;
MoveUpload move_upload = 101;
Delete delete = 102;
}
}