package db
import (
"context"
"errors"
"fmt"
"github.com/google/uuid"
"gorm.io/gorm"
)
type User struct {
ID uuid.UUID `gorm:"primary_key;column:id;type:char;size:36;"`
OrganizationID *uuid.UUID `gorm:"column:organizationId;type:char;size:255;"`
UsageAttributionID AttributionID `gorm:"column:usageAttributionId;type:char;size:60;default:'';not null;"`
Name string `gorm:"column:name;type:char;size:255;"`
FullName string `gorm:"column:fullName;type:char;size:255;"`
AvatarURL string `gorm:"column:avatarUrl;type:char;size:255;"`
Blocked bool `gorm:"column:blocked;type:tinyint;default:0;not null;" json:"blocked"`
Privileged bool `gorm:"column:privileged;type:tinyint;default:0;not null;" json:"privileged"`
RolesOrPermissions *string `gorm:"column:rolesOrPermissions;type:text;"`
FeatureFlags *string `gorm:"column:featureFlags;type:text;"`
VerificationPhoneNumber string `gorm:"column:verificationPhoneNumber;type:char;size:30;default:'';not null;"`
LastVerificationTime VarcharTime `gorm:"column:lastVerificationTime;type:char;size:30;default:'';not null;"`
AdditionalData *string `gorm:"column:additionalData;type:text;"`
Identities []Identity `gorm:"foreignKey:userId;references:id"`
CreationDate VarcharTime `gorm:"column:creationDate;type:varchar;size:255;"`
MarkedDeleted bool `gorm:"column:markedDeleted;type:tinyint;default:0;" json:"markedDeleted"`
}
func (user *User) TableName() string {
return "d_b_user"
}
func GetUser(ctx context.Context, conn *gorm.DB, id uuid.UUID) (User, error) {
if id == uuid.Nil {
return User{}, errors.New("id must be nil")
}
var user User
tx := conn.
Model(&User{}).
Preload("Identities").
First(&user, id)
if tx.Error != nil {
if errors.Is(tx.Error, gorm.ErrRecordNotFound) {
return User{}, fmt.Errorf("user with ID %s does not exist: %w", id, ErrorNotFound)
}
return User{}, fmt.Errorf("Failed to retrieve user: %v", tx.Error)
}
return user, nil
}