Add gRPC user service
diff --git a/core/kg/model/proto/Makefile b/core/kg/model/proto/Makefile
new file mode 100644
index 0000000..a0efc58
--- /dev/null
+++ b/core/kg/model/proto/Makefile
@@ -0,0 +1,9 @@
+.PHONY: help
+
+.DEFAULT_GOAL := help
+
+help:
+ @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
+
+generate: ## generates the gRPC server interfaces from `*.proto` service definition
+ @protoc --go_out=. --go-grpc_out=. user.proto
\ No newline at end of file
diff --git a/core/kg/model/proto/user.proto b/core/kg/model/proto/user.proto
new file mode 100644
index 0000000..eb543a5
--- /dev/null
+++ b/core/kg/model/proto/user.proto
@@ -0,0 +1,55 @@
+syntax = "proto3";
+
+option go_package = ".;proto";
+
+package proto;
+
+import "google/protobuf/timestamp.proto";
+
+// UserService handles commands dispatch and user view actions
+service UserService {
+ rpc GetUser (GetUserRequest) returns (User);
+ rpc ListUsers (ListUserRequest) returns (ListUserResponse);
+ rpc CreateUser (CreateUserRequest) returns (User);
+}
+
+// DispatchUserCommandRequest is passed when dispatching
+message DispatchUserCommandRequest {
+ string name = 1;
+ bytes payload = 2;
+}
+
+// User object
+message User {
+ optional string id = 1;
+ optional google.protobuf.Timestamp create_at = 2;
+ optional google.protobuf.Timestamp update_at = 3;
+ optional google.protobuf.Timestamp delete_at = 4;
+ string username = 5;
+ string password = 6;
+ optional google.protobuf.Timestamp last_password_update = 7;
+}
+
+// GetUserRequest is a request data to read user
+message GetUserRequest {
+ string id = 1;
+}
+
+// ListUserRequest is a request data to read all user for a given page
+message ListUserRequest {
+ int64 page = 1;
+ int64 limit = 2;
+}
+
+// ListUserResponse list of all users
+message ListUserResponse {
+ repeated User users = 1;
+ int64 page = 2;
+ int64 limit = 3;
+ int64 total = 4;
+}
+
+// CreateUserRequest is a request data to create a user
+message CreateUserRequest {
+ User user = 1;
+}
\ No newline at end of file