Files
groups-management/grpcapi/groups.go
Arnaud Delcasse 68912e17a0
All checks were successful
Build and Push Docker Image / build_and_push (push) Successful in 1m58s
Add metadata to groups
2026-01-13 22:08:54 +01:00

93 lines
1.7 KiB
Go

package grpcapi
import (
"encoding/json"
"fmt"
"git.coopgo.io/coopgo-platform/groups-management/storage"
"google.golang.org/protobuf/encoding/protojson"
structpb "google.golang.org/protobuf/types/known/structpb"
)
func (g Group) ToStorageType() storage.Group {
group := storage.Group{
ID: g.Id,
Namespace: g.Namespace,
Members: g.Members,
Data: map[string]any{},
Metadata: map[string]any{},
}
for k, d := range g.Data.GetFields() {
jsondata, err := protojson.Marshal(d)
if err != nil {
fmt.Println(err)
break
}
var data any
json.Unmarshal(jsondata, &data)
group.Data[k] = data
}
for k, d := range g.Metadata.GetFields() {
jsondata, err := protojson.Marshal(d)
if err != nil {
fmt.Println(err)
break
}
var data any
json.Unmarshal(jsondata, &data)
group.Metadata[k] = data
}
return group
}
func GroupFromStorageType(group *storage.Group) (*Group, error) {
d, err := sanitizeData(group.Data)
if err != nil {
return nil, err
}
data, err := structpb.NewStruct(d)
if err != nil {
fmt.Println(err)
return nil, err
}
var metadata *structpb.Struct
if group.Metadata != nil {
m, err := sanitizeData(group.Metadata)
if err != nil {
return nil, err
}
metadata, err = structpb.NewStruct(m)
if err != nil {
fmt.Println(err)
return nil, err
}
}
return &Group{
Id: group.ID,
Namespace: group.Namespace,
Members: group.Members,
Data: data,
Metadata: metadata,
}, nil
}
func sanitizeData(data map[string]any) (d map[string]any, err error) {
j, err := json.Marshal(data)
if err != nil {
return nil, err
}
if err = json.Unmarshal(j, &d); err != nil {
return nil, err
}
return d, nil
}