syntax = "proto3"; import "google/protobuf/empty.proto"; option csharp_namespace = "Aoba.RPC"; package aoba; service AobaRpc { rpc GetMedia (Id) returns (MediaResponse); rpc DeleteMedia (Id) returns (google.protobuf.Empty); rpc UpdateMedia (google.protobuf.Empty) returns (google.protobuf.Empty); rpc ListMedia(PageFilter) returns (ListResponse); rpc GetUser(Id) returns (UserResponse); rpc GetShareXDestination(google.protobuf.Empty) returns (ShareXResponse); } message PageFilter { optional int32 page = 1; optional int32 pageSize = 2; optional string query = 3; } message Id { string value = 1; } message MediaResponse { oneof result { MediaModel value = 1; google.protobuf.Empty empty = 2; } } message ListResponse { repeated MediaModel items = 1; Pagination pagination = 2; } message Pagination { int32 page = 1; int32 pageSize = 2; int64 totalPages = 3; int64 totalItems = 4; optional string query = 5; } message UserResponse { oneof userResult { UserModel user = 1; google.protobuf.Empty empty = 2; } } message UserModel { Id id = 1; string username = 2; string email = 3; bool isAdmin = 4; } message MediaModel { Id id = 1; string fileName = 2; MediaType mediaType = 3; string ext = 4; int32 viewCount = 5; Id owner = 6; string thumbUrl = 7; } enum MediaType { Image = 0; Audio = 1; Video = 2; Text = 3; Code = 4; Raw = 5; } message ShareXResponse { oneof dstResult { string destination = 1; string error = 2; } }