mirror of
https://github.com/zitadel/zitadel.git
synced 2025-07-16 14:48:37 +00:00
81 lines
2.7 KiB
Go
81 lines
2.7 KiB
Go
![]() |
package user
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"connectrpc.com/connect"
|
||
|
"google.golang.org/protobuf/types/known/timestamppb"
|
||
|
|
||
|
"github.com/zitadel/zitadel/internal/api/grpc/filter/v2"
|
||
|
"github.com/zitadel/zitadel/internal/api/grpc/metadata/v2"
|
||
|
"github.com/zitadel/zitadel/internal/domain"
|
||
|
"github.com/zitadel/zitadel/internal/query"
|
||
|
"github.com/zitadel/zitadel/pkg/grpc/user/v2"
|
||
|
)
|
||
|
|
||
|
func (s *Server) ListUserMetadata(ctx context.Context, req *connect.Request[user.ListUserMetadataRequest]) (*connect.Response[user.ListUserMetadataResponse], error) {
|
||
|
metadataQueries, err := s.listUserMetadataRequestToModel(req.Msg)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
res, err := s.query.SearchUserMetadata(ctx, true, req.Msg.UserId, metadataQueries, s.checkPermission)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return connect.NewResponse(&user.ListUserMetadataResponse{
|
||
|
Metadata: metadata.UserMetadataListToPb(res.Metadata),
|
||
|
Pagination: filter.QueryToPaginationPb(metadataQueries.SearchRequest, res.SearchResponse),
|
||
|
}), nil
|
||
|
}
|
||
|
|
||
|
func (s *Server) listUserMetadataRequestToModel(req *user.ListUserMetadataRequest) (*query.UserMetadataSearchQueries, error) {
|
||
|
offset, limit, asc, err := filter.PaginationPbToQuery(s.systemDefaults, req.Pagination)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
queries, err := metadata.UserMetadataFiltersToQuery(req.Filters)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &query.UserMetadataSearchQueries{
|
||
|
SearchRequest: query.SearchRequest{
|
||
|
Offset: offset,
|
||
|
Limit: limit,
|
||
|
Asc: asc,
|
||
|
SortingColumn: query.UserMetadataCreationDateCol,
|
||
|
},
|
||
|
Queries: queries,
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
func (s *Server) SetUserMetadata(ctx context.Context, req *connect.Request[user.SetUserMetadataRequest]) (*connect.Response[user.SetUserMetadataResponse], error) {
|
||
|
result, err := s.command.BulkSetUserMetadata(ctx, req.Msg.UserId, "", setUserMetadataToDomain(req.Msg)...)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return connect.NewResponse(&user.SetUserMetadataResponse{
|
||
|
SetDate: timestamppb.New(result.EventDate),
|
||
|
}), nil
|
||
|
}
|
||
|
|
||
|
func setUserMetadataToDomain(req *user.SetUserMetadataRequest) []*domain.Metadata {
|
||
|
metadata := make([]*domain.Metadata, len(req.Metadata))
|
||
|
for i, data := range req.Metadata {
|
||
|
metadata[i] = &domain.Metadata{
|
||
|
Key: data.Key,
|
||
|
Value: data.Value,
|
||
|
}
|
||
|
}
|
||
|
return metadata
|
||
|
}
|
||
|
|
||
|
func (s *Server) DeleteUserMetadata(ctx context.Context, req *connect.Request[user.DeleteUserMetadataRequest]) (*connect.Response[user.DeleteUserMetadataResponse], error) {
|
||
|
result, err := s.command.BulkRemoveUserMetadata(ctx, req.Msg.UserId, "", req.Msg.Keys...)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return connect.NewResponse(&user.DeleteUserMetadataResponse{
|
||
|
DeletionDate: timestamppb.New(result.EventDate),
|
||
|
}), nil
|
||
|
}
|