syntax = "proto3"; package users; option go_package = "proto;users"; import "google/protobuf/wrappers.proto"; service Users { rpc Create(CreateRequest) returns (CreateResponse) {} rpc Read(ReadRequest) returns (ReadResponse) {} rpc ReadByEmail(ReadByEmailRequest) returns (ReadByEmailResponse) {} rpc Update(UpdateRequest) returns (UpdateResponse) {} rpc Delete(DeleteRequest) returns (DeleteResponse) {} rpc List(ListRequest) returns (ListResponse) {} // Login using email and password returns the users profile and a token rpc Login(LoginRequest) returns (LoginResponse) {} // Logout expires all tokens for the user rpc Logout(LogoutRequest) returns (LogoutResponse) {} // Validate a token, each time a token is validated it extends its lifetime for another week rpc Validate(ValidateRequest) returns (ValidateResponse) {} } message User { string id = 1; string first_name = 2; string last_name = 3; string email = 4; } message CreateRequest { string first_name = 1; string last_name = 2; string email = 3; string password = 4; } message CreateResponse { User user = 1; string token = 2; } message ReadRequest { repeated string ids = 1; } message ReadResponse { map users = 1; } message ReadByEmailRequest { repeated string emails = 1; } message ReadByEmailResponse { map users = 1; } message UpdateRequest { string id = 1; google.protobuf.StringValue first_name = 2; google.protobuf.StringValue last_name = 3; google.protobuf.StringValue email = 4; google.protobuf.StringValue password = 5; } message UpdateResponse { User user = 1; } message DeleteRequest { string id = 1; } message DeleteResponse {} message ListRequest {} message ListResponse { repeated User users = 1; } message LoginRequest { string email = 1; string password = 2; } message LoginResponse { User user = 1; string token = 2; } message LogoutRequest { string id = 1; } message LogoutResponse {} message ValidateRequest { string token = 1; } message ValidateResponse { User user = 1; }