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