This commit is contained in:
107
proto/glifa/media/v1/service.proto
Normal file
107
proto/glifa/media/v1/service.proto
Normal file
@@ -0,0 +1,107 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package glifa.media.v1;
|
||||
|
||||
import "glifa/common/v1/types.proto";
|
||||
import "glifa/media/v1/types.proto";
|
||||
|
||||
option go_package = "glifa/contracts/gen/go/glifa/media/v1;mediav1";
|
||||
|
||||
service MediaService {
|
||||
rpc InitiateUpload(InitiateUploadRequest) returns (InitiateUploadResponse);
|
||||
rpc PresignPartUpload(PresignPartUploadRequest) returns (PresignPartUploadResponse);
|
||||
rpc CompletePart(CompletePartRequest) returns (CompletePartResponse);
|
||||
rpc FinalizeUpload(FinalizeUploadRequest) returns (FinalizeUploadResponse);
|
||||
rpc AbortUpload(AbortUploadRequest) returns (AbortUploadResponse);
|
||||
rpc GetMediaObject(GetMediaObjectRequest) returns (GetMediaObjectResponse);
|
||||
rpc CreateAccessGrant(CreateAccessGrantRequest) returns (CreateAccessGrantResponse);
|
||||
rpc ResolveDownload(ResolveDownloadRequest) returns (ResolveDownloadResponse);
|
||||
}
|
||||
|
||||
message InitiateUploadRequest {
|
||||
glifa.common.v1.RequestMeta meta = 1; // Метаданные запроса, такие как идентификатор корреляции, язык и т.д.
|
||||
string file_name = 2; // Исходное имя файла, который будет загружен
|
||||
string declared_mime_type = 3; // MIME-тип файла, который будет загружен (например, "image/jpeg", "video/mp4")
|
||||
uint64 expected_size = 4; // Ожидаемый размер файла в байтах, который будет загружен
|
||||
bool multipart = 5; // Флаг, указывающий, будет ли загрузка выполняться в несколько частей (multipart upload)
|
||||
MediaVisibility visibility = 6; // Видимость медиа-объекта (публичный или приватный)
|
||||
}
|
||||
|
||||
message InitiateUploadResponse {
|
||||
UploadIntent upload_intent = 1; // Намерение загрузки, содержащее информацию о процессе загрузки и его статусе
|
||||
}
|
||||
|
||||
message PresignPartUploadRequest {
|
||||
glifa.common.v1.RequestMeta meta = 1; // Метаданные запроса, такие как идентификатор корреляции, язык и т.д.
|
||||
string upload_intent_id = 2; // UUID намерения загрузки, к которому относится эта часть
|
||||
int32 part_number = 3; // Номер части в последовательности загрузки (начинается с 1)
|
||||
}
|
||||
|
||||
message PresignPartUploadResponse {
|
||||
string url = 1; // Предварительно подписанный URL для загрузки части файла в хранилище
|
||||
map<string, string> headers = 2; // Дополнительные заголовки, которые должны быть включены в запрос загрузки части (например, для аутентификации или указания типа контента)
|
||||
}
|
||||
|
||||
message CompletePartRequest {
|
||||
glifa.common.v1.RequestMeta meta = 1; // Метаданные запроса, такие как идентификатор корреляции, язык и т.д.
|
||||
string upload_intent_id = 2; // UUID намерения загрузки, к которому относится эта часть
|
||||
int32 part_number = 3; // Номер части в последовательности загрузки (начинается с 1)
|
||||
string etag = 4; // ETag, возвращаемый хранилищем после успешной загрузки части, который будет использоваться для финализации загрузки
|
||||
uint64 size = 5; // Размер части в байтах
|
||||
}
|
||||
|
||||
message CompletePartResponse {
|
||||
UploadPart part = 1; // Информация о загруженной части, включая номер части, ETag и размер
|
||||
}
|
||||
|
||||
message FinalizeUploadRequest {
|
||||
glifa.common.v1.RequestMeta meta = 1; // Метаданные запроса, такие как идентификатор корреляции, язык и т.д.
|
||||
string upload_intent_id = 2; // UUID намерения загрузки, который будет финализирован
|
||||
string checksum = 3; // Контрольная сумма (например, MD5 или SHA-256) всего файла, который был загружен, для проверки целостности данных
|
||||
}
|
||||
|
||||
message FinalizeUploadResponse {
|
||||
UploadIntent upload_intent = 1; // Намерение загрузки с обновленным статусом, указывающим, что загрузка была успешно завершена
|
||||
MediaObject media_object = 2; // Информация о созданном медиа-объекте, включая его UUID, размер, MIME-тип и т.д.
|
||||
}
|
||||
|
||||
message AbortUploadRequest {
|
||||
glifa.common.v1.RequestMeta meta = 1; // Метаданные запроса, такие как идентификатор корреляции, язык и т.д.
|
||||
string upload_intent_id = 2; // UUID намерения загрузки, который будет прерван
|
||||
}
|
||||
|
||||
message AbortUploadResponse {
|
||||
bool success = 1; // Флаг, указывающий, была ли операция прерывания успешной
|
||||
}
|
||||
|
||||
message GetMediaObjectRequest {
|
||||
glifa.common.v1.RequestMeta meta = 1; // Метаданные запроса, такие как идентификатор корреляции, язык и т.д.
|
||||
string media_object_id = 2; // UUID медиа-объекта, который пользователь хочет получить
|
||||
}
|
||||
|
||||
message GetMediaObjectResponse {
|
||||
MediaObject media_object = 1; // Информация о запрошенном медиа-объекте, включая его UUID, размер, MIME-тип, статус и т.д.
|
||||
}
|
||||
|
||||
message CreateAccessGrantRequest {
|
||||
glifa.common.v1.RequestMeta meta = 1; // Метаданные запроса, такие как идентификатор корреляции, язык и т.д.
|
||||
string media_object_id = 2; // UUID медиа-объекта, для которого создается грант доступа
|
||||
string subject_user_id = 3; // UUID пользователя, которому предоставляется доступ к медиа-объекту
|
||||
bool single_use = 4; // Флаг, указывающий, является ли грант доступа одноразовым (может быть использован только один раз для доступа к медиа-объекту)
|
||||
}
|
||||
|
||||
message CreateAccessGrantResponse {
|
||||
MediaAccessGrant grant = 1; // Информация о созданном гранте доступа, включая его UUID, связанный медиа-объект, субъект доступа и т.д.
|
||||
}
|
||||
|
||||
message ResolveDownloadRequest {
|
||||
glifa.common.v1.RequestMeta meta = 1; // Метаданные запроса, такие как идентификатор корреляции, язык и т.д.
|
||||
string media_object_id = 2; // UUID медиа-объекта, который пользователь хочет скачать
|
||||
string access_grant_id = 3; // UUID гранта доступа, который будет использоваться для авторизации доступа к медиа-объекту при скачивании
|
||||
}
|
||||
|
||||
message ResolveDownloadResponse {
|
||||
string url = 1; // Предварительно подписанный URL для скачивания файла медиа-объекта из хранилища
|
||||
map<string, string> headers = 2; // Дополнительные заголовки, которые должны быть включены в запрос скачивания файла (например, для аутентификации или указания типа контента)
|
||||
string method = 3; // HTTP-метод, который должен быть использован для скачивания файла (например, "GET", "POST")
|
||||
}
|
||||
80
proto/glifa/media/v1/types.proto
Normal file
80
proto/glifa/media/v1/types.proto
Normal file
@@ -0,0 +1,80 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package glifa.media.v1;
|
||||
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
||||
option go_package = "glifa/contracts/gen/go/glifa/media/v1;mediav1";
|
||||
|
||||
enum UploadIntentStatus{
|
||||
UPLOAD_INTENT_STATUS_UNSPECIFIED = 0; // Неопределенный статус намерения загрузки
|
||||
UPLOAD_INTENT_STATUS_INITIATED = 1; // Намерение загрузки было инициализировано, но загрузка еще не началась
|
||||
UPLOAD_INTENT_STATUS_UPLOADING = 2; // Процесс загрузки медиа-объекта начался, но еще не завершился
|
||||
UPLOAD_INTENT_STATUS_FINALIZED = 3; // Процесс загрузки медиа-объекта успешно завершился, и медиа-объект был создан
|
||||
UPLOAD_INTENT_STATUS_ABORTED = 4; // Процесс загрузки был прерван или отменен до его завершения
|
||||
UPLOAD_INTENT_STATUS_EXPIRED = 5; // Намерение загрузки истекло, и загрузка не может быть завершена
|
||||
}
|
||||
|
||||
enum MediaObjectStatus {
|
||||
MEDIA_OBJECT_STATUS_UNSPECIFIED = 0; // Неопределенный статус медиа-объекта
|
||||
MEDIA_OBJECT_STATUS_PENDING = 1; // Медиа-объект находится в ожидании обработки (например, конвертации или проверки)
|
||||
MEDIA_OBJECT_STATUS_ACTIVE = 2; // Медиа-объект активен и доступен для использования
|
||||
MEDIA_OBJECT_STATUS_QUARANTINED = 3; // Медиа-объект помещен в карантин из-за подозрения на нарушение правил (например, неподобающий контент)
|
||||
MEDIA_OBJECT_STATUS_DELETED = 4; // Медиа-объект удален и больше не доступен
|
||||
}
|
||||
|
||||
enum MediaVisibility {
|
||||
MEDIA_VISIBILITY_UNSPECIFIED = 0; // Неопределенная видимость медиа-объекта
|
||||
MEDIA_VISIBILITY_PUBLIC = 1; // Медиа-объект публичный и доступен всем пользователям
|
||||
MEDIA_VISIBILITY_PRIVATE = 2; // Медиа-объект приватный и доступен только владельцу
|
||||
}
|
||||
|
||||
message UploadIntent {
|
||||
string id = 1; // UUID намерения загрузки, который будет использоваться для идентификации процесса загрузки
|
||||
string owner_user_id = 2; // UUID пользователя, который инициализировал
|
||||
string file_name = 3; // Исходное имя файла, который будет загружен
|
||||
string declared_mime_type = 4; // MIME-тип файла, который будет загружен (например, "image/jpeg", "video/mp4")
|
||||
uint64 expected_size = 5; // Ожидаемый размер файла в байтах, который будет загружен
|
||||
bool multipart = 6; // Флаг, указывающий, будет ли загрузка выполняться в несколько частей (multipart upload)
|
||||
UploadIntentStatus status = 7; // Текущий статус намерения загрузки
|
||||
google.protobuf.Timestamp expires_at = 8; // Временная метка, указывающая, когда намерение загрузки истекает и больше не может быть использовано для загрузки файла
|
||||
google.protobuf.Timestamp created_at = 9; // Временная метка создания намерения загрузки
|
||||
google.protobuf.Timestamp updated_at = 10; // Временная метка последнего обновления намерения загрузки
|
||||
|
||||
}
|
||||
|
||||
message UploadPart {
|
||||
string upload_intent_id = 1; // UUID намерения загрузки, к которому относится эта часть
|
||||
int32 part_number = 2; // Номер части в последовательности загрузки (начинается с 1)
|
||||
string etag = 3; // ETag, возвращаемый хранилищем после успешной загрузки части, который будет использоваться для финализации загрузки
|
||||
uint64 size = 4; // Размер части в байтах
|
||||
google.protobuf.Timestamp completed_at = 5; // Временная метка, указывающая, когда эта часть была успешно загружена
|
||||
}
|
||||
|
||||
message MediaObject {
|
||||
string id = 1; // UUID медиа-объекта, который будет использоваться для идентификации и доступа к медиа-объекту
|
||||
string owner_user_id = 2; // UUID пользователя, которому принадлежит этот медиа-объект
|
||||
string object_key = 3; // Ключ объекта в хранилище, который указывает на местоположение файла медиа-объекта
|
||||
string checksum = 4; // Контрольная сумма (например, MD5 или SHA-256) файла медиа-объекта, которая может использоваться для проверки целостности данных
|
||||
uint64 size = 5; // Размер файла медиа-объекта в бай
|
||||
string detected_mime_type = 6; // MIME-тип, определенный после загрузки и анализа файла медиа-объекта
|
||||
MediaVisibility visibility = 7; // Видимость медиа-объекта (публичный или приватный)
|
||||
MediaObjectStatus status = 8; // Текущий статус медиа-объекта (например, ожидает обработки, активен, в карантине, удален)
|
||||
string encryption_key_ref = 9; // Ссылка на ключ шифрования, если медиа-объект зашифрован
|
||||
string link_resource_type = 10; // Тип ресурса, с которым связан этот медиа-объект (например, "post", "profile_picture", "document")
|
||||
string link_resource_id = 11; // UUID ресурса, с которым связан этот медиа-объект (например, идентификатор поста, идентификатор профиля пользователя, идентификатор документа)
|
||||
google.protobuf.Timestamp created_at = 12; // Временная метка создания медиа-объекта
|
||||
google.protobuf.Timestamp updated_at = 13; // Временная метка последнего обновления медиа-объекта
|
||||
}
|
||||
|
||||
message MediaAccessGrant{
|
||||
string id = 1; // UUID разрешения доступа, который будет использоваться для идентификации и управления разрешением доступа
|
||||
string media_object_id = 2; // UUID медиа-объекта, к
|
||||
string subject_user_id = 3; // UUID пользователя, которому предоставлено разрешение доступа к медиа-объекту
|
||||
bool single_use = 4; // Флаг, указывающий, является ли это разрешение одноразовым (single-use), которое может быть использовано только один раз для доступа к медиа-объекту
|
||||
google.protobuf.Timestamp expires_at = 5; // Временная метка, указывающая, когда разрешение доступа истекает и больше не может быть использовано для доступа к медиа-объекту
|
||||
google.protobuf.Timestamp consumed_at = 6; // Временная метка, указывающая, когда это разрешение доступа было использовано для доступа к медиа-объекту (для одноразовых разрешений)
|
||||
google.protobuf.Timestamp created_at = 7; // Временная метка создания разрешения доступа
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user