syntax = "proto3"; option csharp_namespace = "Aoba.RPC"; package aoba; service AobaRpc { rpc GetMedia (Id) returns (MediaResponse); rpc DeleteMedia (Id) returns (Empty); rpc UpdateMedia (Empty) returns (Empty); rpc ListMedia(PageFilter) returns (ListResponse); rpc GetUser(Id) returns (UserResponse); } 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; 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; Empty empty = 2; } } message UserModel { Id id = 1; string username = 2; string email = 3; bool isAdmin = 4; } message Empty {} message MediaModel { Id id = 1; Id mediaId = 2; string fileName = 3; MediaType mediaType = 4; string ext = 5; int32 viewCount = 6; Id owner = 7; } enum MediaType{ Image = 0; Audio = 1; Video = 2; Text = 3; Code = 4; Raw = 5; }