Initial commit: Open sourcing all of the Maple Open Technologies code.
This commit is contained in:
commit
755d54a99d
2010 changed files with 448675 additions and 0 deletions
114
cloud/maplefile-backend/internal/repo/user/helpers.go
Normal file
114
cloud/maplefile-backend/internal/repo/user/helpers.go
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
package user
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"hash/fnv"
|
||||
"strings"
|
||||
|
||||
dom "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/domain/user"
|
||||
)
|
||||
|
||||
// Serialization helpers
|
||||
func (r *userStorerImpl) serializeProfileData(data *dom.UserProfileData) (string, error) {
|
||||
if data == nil {
|
||||
return "", nil
|
||||
}
|
||||
bytes, err := json.Marshal(data)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(bytes), nil
|
||||
}
|
||||
|
||||
func (r *userStorerImpl) serializeSecurityData(data *dom.UserSecurityData) (string, error) {
|
||||
if data == nil {
|
||||
return "", nil
|
||||
}
|
||||
bytes, err := json.Marshal(data)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(bytes), nil
|
||||
}
|
||||
|
||||
func (r *userStorerImpl) serializeMetadata(data *dom.UserMetadata) (string, error) {
|
||||
if data == nil {
|
||||
return "", nil
|
||||
}
|
||||
bytes, err := json.Marshal(data)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(bytes), nil
|
||||
}
|
||||
|
||||
// Deserialization helper
|
||||
func (r *userStorerImpl) deserializeUserData(profileJSON, securityJSON, metadataJSON string, user *dom.User) error {
|
||||
// Deserialize profile data
|
||||
if profileJSON != "" {
|
||||
var profileData dom.UserProfileData
|
||||
if err := json.Unmarshal([]byte(profileJSON), &profileData); err != nil {
|
||||
return fmt.Errorf("failed to unmarshal profile data: %w", err)
|
||||
}
|
||||
user.ProfileData = &profileData
|
||||
}
|
||||
|
||||
// Deserialize security data
|
||||
if securityJSON != "" {
|
||||
var securityData dom.UserSecurityData
|
||||
if err := json.Unmarshal([]byte(securityJSON), &securityData); err != nil {
|
||||
return fmt.Errorf("failed to unmarshal security data: %w", err)
|
||||
}
|
||||
user.SecurityData = &securityData
|
||||
}
|
||||
|
||||
// Deserialize metadata
|
||||
if metadataJSON != "" {
|
||||
var metadata dom.UserMetadata
|
||||
if err := json.Unmarshal([]byte(metadataJSON), &metadata); err != nil {
|
||||
return fmt.Errorf("failed to unmarshal metadata: %w", err)
|
||||
}
|
||||
user.Metadata = &metadata
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Search helpers
|
||||
func (r *userStorerImpl) generateSearchTerms(user *dom.User) []string {
|
||||
terms := make([]string, 0)
|
||||
|
||||
// Add lowercase versions of searchable fields
|
||||
if user.Email != "" {
|
||||
terms = append(terms, strings.ToLower(user.Email))
|
||||
// Also add email prefix for partial matching
|
||||
parts := strings.Split(user.Email, "@")
|
||||
if len(parts) > 0 {
|
||||
terms = append(terms, strings.ToLower(parts[0]))
|
||||
}
|
||||
}
|
||||
|
||||
if user.Name != "" {
|
||||
terms = append(terms, strings.ToLower(user.Name))
|
||||
// Add individual words from name
|
||||
words := strings.Fields(strings.ToLower(user.Name))
|
||||
terms = append(terms, words...)
|
||||
}
|
||||
|
||||
if user.FirstName != "" {
|
||||
terms = append(terms, strings.ToLower(user.FirstName))
|
||||
}
|
||||
|
||||
if user.LastName != "" {
|
||||
terms = append(terms, strings.ToLower(user.LastName))
|
||||
}
|
||||
|
||||
return terms
|
||||
}
|
||||
|
||||
func (r *userStorerImpl) calculateSearchBucket(term string) int {
|
||||
h := fnv.New32a()
|
||||
h.Write([]byte(term))
|
||||
return int(h.Sum32() % 100) // Distribute across 100 buckets
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue