syntax = "proto3";

package user;

import "public_messages.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/wrappers.proto";
import "google/protobuf/duration.proto";  
import "google/protobuf/timestamp.proto";
import "google/api/annotations.proto";

option csharp_namespace = "CMSMicroservice.Protobuf.Protos.User";

service UserContract
{
    rpc CreateNewUser(CreateNewUserRequest) returns (CreateNewUserResponse){
        option (google.api.http) = {
            post: "/CreateNewUser"
            body: "*"
        };
    };
    rpc UpdateUser(UpdateUserRequest) returns (google.protobuf.Empty){
        option (google.api.http) = {
            put: "/UpdateUser"
            body: "*"
        };
    };
    rpc DeleteUser(DeleteUserRequest) returns (google.protobuf.Empty){
        option (google.api.http) = {
            delete: "/DeleteUser"
            body: "*"
        };
    };
    rpc GetUser(GetUserRequest) returns (GetUserResponse){
        option (google.api.http) = {
            get: "/GetUser"
            
        };
    };
    rpc GetAllUserByFilter(GetAllUserByFilterRequest) returns (GetAllUserByFilterResponse){
        option (google.api.http) = {
            get: "/GetAllUserByFilter"
            
        };
    };
    rpc GetJwtToken(GetJwtTokenRequest) returns (GetJwtTokenResponse){
        option (google.api.http) = {
            get: "/GetJwtToken"
            
        };
    };
    rpc AdminGetJwtToken(AdminGetJwtTokenRequest) returns (AdminGetJwtTokenResponse){
        option (google.api.http) = {
            get: "/AdminGetJwtToken"
            
        };
    };
    rpc SetPasswordForUser(SetPasswordForUserRequest) returns (google.protobuf.Empty){
        option (google.api.http) = {
            post: "/SetPasswordForUser"
            body: "*"
        };
    };
}
message CreateNewUserRequest
{
    google.protobuf.StringValue first_name = 1;
    google.protobuf.StringValue last_name = 2;
    string mobile = 3;
    google.protobuf.StringValue email = 4;
    google.protobuf.StringValue national_code = 5;
    google.protobuf.StringValue avatar_path = 6;
    google.protobuf.Int64Value parent_id = 7;
    bool email_notifications = 8;
    bool sms_notifications = 9;
    bool push_notifications = 10;
    google.protobuf.Timestamp birth_date = 11;
}
message CreateNewUserResponse
{
    int64 id = 1;
}
message UpdateUserRequest
{
    int64 id = 1;
    google.protobuf.StringValue first_name = 2;
    google.protobuf.StringValue last_name = 3;
    google.protobuf.StringValue email = 4;
    google.protobuf.StringValue national_code = 5;
    google.protobuf.StringValue avatar_path = 6;
    bool is_rules_accepted = 7;
    google.protobuf.Timestamp rules_accepted_at = 8;
    bool email_notifications = 9;
    bool sms_notifications = 10;
    bool push_notifications = 11;
    google.protobuf.Timestamp birth_date = 12;
}
message DeleteUserRequest
{
    int64 id = 1;
}
message GetUserRequest
{
    int64 id = 1;
}
message GetUserResponse
{
    int64 id = 1;
    google.protobuf.StringValue first_name = 2;
    google.protobuf.StringValue last_name = 3;
    string mobile = 4;
    google.protobuf.StringValue email = 5;
    google.protobuf.StringValue national_code = 6;
    google.protobuf.StringValue avatar_path = 7;
    google.protobuf.Int64Value parent_id = 8;
    string referral_code = 9;
    bool is_mobile_verified  = 10;
    google.protobuf.Timestamp mobile_verified_at = 11;
    bool email_notifications = 12;
    bool sms_notifications = 13;
    bool push_notifications = 14;
    google.protobuf.Timestamp birth_date = 15;
}
message GetAllUserByFilterRequest
{
    messages.PaginationState pagination_state = 1;
    google.protobuf.StringValue sort_by = 2;
    GetAllUserByFilterFilter filter = 3;
}
message GetAllUserByFilterFilter
{
    google.protobuf.Int64Value id = 1;
    google.protobuf.StringValue first_name = 2;
    google.protobuf.StringValue last_name = 3;
    google.protobuf.StringValue mobile = 4;
    google.protobuf.StringValue national_code = 5;
    google.protobuf.StringValue avatar_path = 6;
    google.protobuf.Int64Value parent_id = 7;
    google.protobuf.StringValue referral_code = 8;
    google.protobuf.BoolValue is_mobile_verified  = 9;
    google.protobuf.Timestamp mobile_verified_at = 10;
    google.protobuf.BoolValue email_notifications = 11;
    google.protobuf.BoolValue sms_notifications = 12;
    google.protobuf.BoolValue push_notifications = 13;
    google.protobuf.Timestamp birth_date = 14;
}
message GetAllUserByFilterResponse
{
    messages.MetaData meta_data = 1;
    repeated GetAllUserByFilterResponseModel models = 2;
}
message GetAllUserByFilterResponseModel
{
    int64 id = 1;
    google.protobuf.StringValue first_name = 2;
    google.protobuf.StringValue last_name = 3;
    string mobile = 4;
    google.protobuf.StringValue national_code = 5;
    google.protobuf.StringValue avatar_path = 6;
    google.protobuf.Int64Value parent_id = 7;
    string referral_code = 8;
    bool is_mobile_verified  = 9;
    google.protobuf.Timestamp mobile_verified_at = 10;
    bool email_notifications = 11;
    bool sms_notifications = 12;
    bool push_notifications = 13;
    google.protobuf.Timestamp birth_date = 14;
}
message GetJwtTokenRequest
{
    int64 id = 1;
}
message GetJwtTokenResponse
{
    string token = 1;
}
message AdminGetJwtTokenRequest
{
    string username = 1;
    string password = 2;
}
message AdminGetJwtTokenResponse
{
    string token = 1;
}
message SetPasswordForUserRequest
{
    int64 user_id = 1;
    google.protobuf.StringValue current_password = 2;
    string new_password = 3;
    string confirm_password = 4;
}
