Skip to content
Snippets Groups Projects
Commit b2fe6b97 authored by Pavel Antonov's avatar Pavel Antonov :asterisk:
Browse files

Merge branch 'feature/2905-ActionUserInfo' into 'master'

Добавлены поля для передачи клиентских данных при запросах ActionRequest

See merge request perxis/perxis-go!400
parents c600c620 e09530b4
No related branches found
No related tags found
No related merge requests found
Subproject commit b43d6b33bf6c47d659bc3f14075dfa8473fdc707
Subproject commit e86c1f4304bde0094f870346f4ba3bf4a7e8858f
......@@ -15,6 +15,13 @@ type (
ResponseState = pb.ActionResponse_State
ResponseFormat = pb.ActionResponse_Format
UserPreferences struct {
Timezone string `json:"timezone,omitempty"` // Timezone в формате IANA. Пример: "Europe/Moscow", "America/New_York" https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Locale string `json:"locale,omitempty"` // Текущая локаль пользователя в UI
Theme string `json:"theme,omitempty"` // Текущая тема пользователя в UI
Agent string `json:"agent,omitempty"` // Браузер или приложение пользователя
}
ActionRequest struct {
Extension string `json:"extension,omitempty"`
Action string `json:"action"`
......@@ -28,6 +35,7 @@ type (
Metadata map[string]string `json:"metadata,omitempty"`
Refs []*references.Reference `json:"refs,omitempty"`
Params *references.Reference `json:"params,omitempty"`
UserPreferences *UserPreferences `json:"user,omitempty"`
}
ActionResponse struct {
......@@ -141,6 +149,17 @@ func ActionRequestToPB(req *ActionRequest) *pb.ActionRequest {
if req == nil {
return nil
}
var userPref *pb.ActionRequest_UserPreferences
if req.UserPreferences != nil {
userPref = &pb.ActionRequest_UserPreferences{
Timezone: req.UserPreferences.Timezone,
Locale: req.UserPreferences.Locale,
Theme: req.UserPreferences.Theme,
Agent: req.UserPreferences.Agent,
}
}
return &pb.ActionRequest{
Extension: req.Extension,
Action: req.Action,
......@@ -154,6 +173,7 @@ func ActionRequestToPB(req *ActionRequest) *pb.ActionRequest {
Metadata: req.Metadata,
Refs: references.ReferenceListToPB(req.Refs),
Params: references.ReferenceToPB(req.Params),
User: userPref,
}
}
......@@ -161,6 +181,17 @@ func ActionRequestFromPB(req *pb.ActionRequest) *ActionRequest {
if req == nil {
return nil
}
var userPref *UserPreferences
if req.User != nil {
userPref = &UserPreferences{
Timezone: req.User.Timezone,
Locale: req.User.Locale,
Theme: req.User.Theme,
Agent: req.User.Agent,
}
}
return &ActionRequest{
Extension: req.Extension,
Action: req.Action,
......@@ -174,6 +205,7 @@ func ActionRequestFromPB(req *pb.ActionRequest) *ActionRequest {
Metadata: req.Metadata,
Refs: references.ReferenceListFromPB(req.Refs),
Params: references.ReferenceFromPB(req.Params),
UserPreferences: userPref,
}
}
func ActionResponseToPB(out *ActionResponse) *pb.ActionResponse {
......
......@@ -58,6 +58,17 @@ func TestActionRequestToProto(t *testing.T) {
require.Equal(t, pbAction, result)
})
t.Run("User is nil", func(t *testing.T) {
var pbAction *pb.ActionRequest
err := gofakeit.Struct(&pbAction)
require.NoError(t, err)
pbAction.User = nil
action := ActionRequestFromPB(pbAction)
result := ActionRequestToPB(action)
require.Equal(t, pbAction, result)
})
t.Run("Action is nil", func(t *testing.T) {
var pbAction *pb.ActionRequest
action := ActionRequestFromPB(pbAction)
......
......@@ -499,6 +499,7 @@ type ActionRequest struct {
// Ссылка на документ с параметрами выполнения Action.
// Чтобы при выполнении действия открывалась форма параметров, необходимо указать `Action.params_collection`
Params *references.Reference `protobuf:"bytes,11020,opt,name=params,proto3" json:"params,omitempty"`
User *ActionRequest_UserPreferences `protobuf:"bytes,11030,opt,name=user,proto3" json:"user,omitempty"`
}
func (x *ActionRequest) Reset() {
......@@ -615,6 +616,83 @@ func (x *ActionRequest) GetParams() *references.Reference {
return nil
}
func (x *ActionRequest) GetUser() *ActionRequest_UserPreferences {
if x != nil {
return x.User
}
return nil
}
// Параметры запроса пользователя
type ActionRequest_UserPreferences struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Timezone string `protobuf:"bytes,1000,opt,name=timezone,proto3" json:"timezone,omitempty"` // Timezone в формате IANA. Пример: "Europe/Moscow", "America/New_York" https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Locale string `protobuf:"bytes,1020,opt,name=locale,proto3" json:"locale,omitempty"` // Текущая локаль пользователя в UI
Theme string `protobuf:"bytes,1030,opt,name=theme,proto3" json:"theme,omitempty"` // Текущая тема пользователя в UI
Agent string `protobuf:"bytes,1040,opt,name=agent,proto3" json:"agent,omitempty"` // Браузера или приложение пользователя
}
func (x *ActionRequest_UserPreferences) Reset() {
*x = ActionRequest_UserPreferences{}
mi := &file_extensions_extension_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ActionRequest_UserPreferences) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ActionRequest_UserPreferences) ProtoMessage() {}
func (x *ActionRequest_UserPreferences) ProtoReflect() protoreflect.Message {
mi := &file_extensions_extension_proto_msgTypes[3]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ActionRequest_UserPreferences.ProtoReflect.Descriptor instead.
func (*ActionRequest_UserPreferences) Descriptor() ([]byte, []int) {
return file_extensions_extension_proto_rawDescGZIP(), []int{1, 1}
}
func (x *ActionRequest_UserPreferences) GetTimezone() string {
if x != nil {
return x.Timezone
}
return ""
}
func (x *ActionRequest_UserPreferences) GetLocale() string {
if x != nil {
return x.Locale
}
return ""
}
func (x *ActionRequest_UserPreferences) GetTheme() string {
if x != nil {
return x.Theme
}
return ""
}
func (x *ActionRequest_UserPreferences) GetAgent() string {
if x != nil {
return x.Agent
}
return ""
}
var File_extensions_extension_proto protoreflect.FileDescriptor
var file_extensions_extension_proto_rawDesc = []byte{
......@@ -680,7 +758,7 @@ var file_extensions_extension_proto_rawDesc = []byte{
0x44, 0x44, 0x45, 0x4e, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4d,
0x41, 0x49, 0x4e, 0x5f, 0x4d, 0x45, 0x4e, 0x55, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x10, 0x02, 0x12,
0x19, 0x0a, 0x15, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x4d, 0x45, 0x4e, 0x55, 0x5f, 0x42, 0x4f, 0x54,
0x54, 0x4f, 0x4d, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x10, 0x03, 0x22, 0xfd, 0x03, 0x0a, 0x0d, 0x41,
0x54, 0x4f, 0x4d, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x10, 0x03, 0x22, 0xb4, 0x05, 0x0a, 0x0d, 0x41,
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x09,
0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x09,
0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x06, 0x61,
......@@ -708,22 +786,33 @@ var file_extensions_extension_proto_rawDesc = []byte{
0x04, 0x72, 0x65, 0x66, 0x73, 0x12, 0x36, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18,
0x8c, 0x56, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
0x2e, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x66, 0x65,
0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x3b, 0x0a,
0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3e, 0x0a,
0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x96, 0x56, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x65,
0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66,
0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x1a, 0x3b, 0x0a,
0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x67, 0x0a, 0x06, 0x54, 0x61,
0x72, 0x67, 0x65, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10,
0x00, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x4f, 0x44, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04,
0x57, 0x49, 0x44, 0x45, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x41, 0x49, 0x4e, 0x10, 0x04,
0x12, 0x0a, 0x0a, 0x06, 0x44, 0x52, 0x41, 0x57, 0x45, 0x52, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c,
0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x06, 0x12, 0x09,
0x0a, 0x05, 0x42, 0x4c, 0x41, 0x4e, 0x4b, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e,
0x45, 0x10, 0x64, 0x42, 0x3a, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x2e, 0x70, 0x65, 0x72, 0x78, 0x2e,
0x72, 0x75, 0x2f, 0x70, 0x65, 0x72, 0x78, 0x69, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x78, 0x69, 0x73,
0x2d, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x75, 0x0a, 0x0f, 0x55, 0x73,
0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x0a,
0x08, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x09,
0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x17, 0x0a, 0x06, 0x6c, 0x6f,
0x63, 0x61, 0x6c, 0x65, 0x18, 0xfc, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x63,
0x61, 0x6c, 0x65, 0x12, 0x15, 0x0a, 0x05, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x86, 0x08, 0x20,
0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x05, 0x61, 0x67,
0x65, 0x6e, 0x74, 0x18, 0x90, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x67, 0x65, 0x6e,
0x74, 0x2a, 0x67, 0x0a, 0x06, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x44,
0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x4f, 0x44, 0x41,
0x4c, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x49, 0x44, 0x45, 0x10, 0x02, 0x12, 0x08, 0x0a,
0x04, 0x4d, 0x41, 0x49, 0x4e, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x52, 0x41, 0x57, 0x45,
0x52, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54,
0x49, 0x4f, 0x4e, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x4c, 0x41, 0x4e, 0x4b, 0x10, 0x07,
0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x64, 0x42, 0x3a, 0x5a, 0x38, 0x67, 0x69,
0x74, 0x2e, 0x70, 0x65, 0x72, 0x78, 0x2e, 0x72, 0x75, 0x2f, 0x70, 0x65, 0x72, 0x78, 0x69, 0x73,
0x2f, 0x70, 0x65, 0x72, 0x78, 0x69, 0x73, 0x2d, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x65, 0x78, 0x74, 0x65,
0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
......@@ -739,7 +828,7 @@ func file_extensions_extension_proto_rawDescGZIP() []byte {
}
var file_extensions_extension_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
var file_extensions_extension_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
var file_extensions_extension_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_extensions_extension_proto_goTypes = []any{
(Target)(0), // 0: extensions.Target
(Action_Kind)(0), // 1: extensions.Action.Kind
......@@ -747,23 +836,25 @@ var file_extensions_extension_proto_goTypes = []any{
(*Action)(nil), // 3: extensions.Action
(*ActionRequest)(nil), // 4: extensions.ActionRequest
nil, // 5: extensions.ActionRequest.MetadataEntry
(*references.Reference)(nil), // 6: content.references.Reference
(*ActionRequest_UserPreferences)(nil), // 6: extensions.ActionRequest.UserPreferences
(*references.Reference)(nil), // 7: content.references.Reference
}
var file_extensions_extension_proto_depIdxs = []int32{
0, // 0: extensions.Action.target:type_name -> extensions.Target
6, // 1: extensions.Action.image:type_name -> content.references.Reference
7, // 1: extensions.Action.image:type_name -> content.references.Reference
1, // 2: extensions.Action.kind:type_name -> extensions.Action.Kind
6, // 3: extensions.Action.refs:type_name -> content.references.Reference
7, // 3: extensions.Action.refs:type_name -> content.references.Reference
4, // 4: extensions.Action.request:type_name -> extensions.ActionRequest
2, // 5: extensions.Action.view:type_name -> extensions.Action.View
5, // 6: extensions.ActionRequest.metadata:type_name -> extensions.ActionRequest.MetadataEntry
6, // 7: extensions.ActionRequest.refs:type_name -> content.references.Reference
6, // 8: extensions.ActionRequest.params:type_name -> content.references.Reference
9, // [9:9] is the sub-list for method output_type
9, // [9:9] is the sub-list for method input_type
9, // [9:9] is the sub-list for extension type_name
9, // [9:9] is the sub-list for extension extendee
0, // [0:9] is the sub-list for field type_name
7, // 7: extensions.ActionRequest.refs:type_name -> content.references.Reference
7, // 8: extensions.ActionRequest.params:type_name -> content.references.Reference
6, // 9: extensions.ActionRequest.user:type_name -> extensions.ActionRequest.UserPreferences
10, // [10:10] is the sub-list for method output_type
10, // [10:10] is the sub-list for method input_type
10, // [10:10] is the sub-list for extension type_name
10, // [10:10] is the sub-list for extension extendee
0, // [0:10] is the sub-list for field type_name
}
func init() { file_extensions_extension_proto_init() }
......@@ -777,7 +868,7 @@ func file_extensions_extension_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_extensions_extension_proto_rawDesc,
NumEnums: 3,
NumMessages: 3,
NumMessages: 4,
NumExtensions: 0,
NumServices: 0,
},
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment