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; } }