dao

package
v1.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 21, 2025 License: Apache-2.0 Imports: 4 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AuditLog

type AuditLog struct {
	ID         int64   `db:"id" json:"id"`
	UserID     *int64  `db:"user_id" json:"userId,omitempty"`       // who performed the action
	EntityType string  `db:"entity_type" json:"entityType"`         // e.g., users, groups
	EntityID   *int64  `db:"entity_id" json:"entityId,omitempty"`   // entity being modified (integer primary key)
	Action     string  `db:"action" json:"action"`                  // create, update, delete
	OldValues  []byte  `db:"old_values" json:"oldValues,omitempty"` // JSONB
	NewValues  []byte  `db:"new_values" json:"newValues,omitempty"` // JSONB
	Changes    []byte  `db:"changes" json:"changes,omitempty"`      // JSONB
	Reason     *string `db:"reason" json:"reason,omitempty"`
	IPAddress  *string `db:"ip_address" json:"ipAddress,omitempty"`
	UserAgent  *string `db:"user_agent" json:"userAgent,omitempty"`
	SessionID  *int64  `db:"session_id" json:"sessionId,omitempty"`
	Metadata   []byte  `db:"metadata" json:"metadata,omitempty"` // JSONB
	Severity   string  `db:"severity" json:"severity"`           // low, medium, high, critical
	CreatedAt  int64   `db:"created_at" json:"createdAt"`
}

Audit logs for tracking changes

type AuthProvider

type AuthProvider struct {
	ID           int64     `db:"id" json:"id"`
	UUID         uuid.UUID `db:"uuid" json:"uuid"`
	Name         string    `db:"name" json:"name"`
	DisplayName  string    `db:"display_name" json:"displayName"`
	ClientID     *string   `db:"client_id" json:"clientId,omitempty"`
	ClientSecret *string   `db:"client_secret" json:"clientSecret,omitempty"`
	AuthURL      *string   `db:"auth_url" json:"authUrl,omitempty"`
	TokenURL     *string   `db:"token_url" json:"tokenUrl,omitempty"`
	UserInfoURL  *string   `db:"user_info_url" json:"userInfoUrl,omitempty"`
	Scope        *string   `db:"scope" json:"scope,omitempty"`
	IsEnabled    bool      `db:"is_enabled" json:"isEnabled"`
	CreatedAt    int64     `db:"created_at" json:"createdAt"`
	UpdatedAt    int64     `db:"updated_at" json:"updatedAt"`
}

AuthProvider represents an OAuth or external provider

type Config

type Config struct {
	ID          int64     `db:"id" json:"id"`
	EntityID    int64     `db:"entity_id" json:"entityId"`
	Key         string    `db:"key" json:"key"`
	DisplayName string    `db:"display_name" json:"displayName,omitempty"`
	Description string    `db:"description" json:"description,omitempty"`
	Value       string    `db:"value" json:"value,omitempty"`
	Type        ValueType `db:"type" json:"type"`
	Metadata    *string   `db:"metadata" json:"metadata,omitempty"`
	CreatedBy   int64     `db:"created_by" json:"createdBy"`
	UpdatedBy   int64     `db:"updated_by" json:"updatedBy"`
	CreatedAt   int64     `db:"created_at" json:"createdAt"`
	UpdatedAt   int64     `db:"updated_at" json:"updatedAt"`
}

Config represents the configs table

func (*Config) FromCreateConfigRequest

func (c *Config) FromCreateConfigRequest(req *openauth_v1.CreateConfigRequest, createdBy int64) *Config

FromCreateConfigRequest creates a Config from a protobuf request

func (*Config) FromUpdateConfigRequest

func (c *Config) FromUpdateConfigRequest(req *openauth_v1.UpdateConfigRequest, updatedBy int64) *Config

FromUpdateConfigRequest updates a Config from a protobuf request

func (*Config) SetValue

func (c *Config) SetValue(value interface{}) error

SetValue sets the config value from any type

func (*Config) ToProtoConfig

func (c *Config) ToProtoConfig() *openauth_v1.Config

ToProtoConfig converts a Config DAO to protobuf Config

type ConfigEntity

type ConfigEntity struct {
	ID            int64  `db:"id" json:"id"`
	Name          string `db:"name" json:"name"`
	DisplayName   string `db:"display_name" json:"displayName,omitempty"`
	Description   string `db:"description" json:"description,omitempty"`
	ReadPerm      int64  `db:"read_perm" json:"readPerm"`
	WritePerm     int64  `db:"write_perm" json:"writePerm"`
	ReadPermName  string `db:"permission.name" json:"readPermName,omitempty"`
	WritePermName string `db:"permission.name" json:"writePermName,omitempty"`
	CreatedBy     int64  `db:"created_by" json:"createdBy"`
	CreatedAt     int64  `db:"created_at" json:"createdAt"`
	UpdatedAt     int64  `db:"updated_at" json:"updatedAt"`
}

ConfigEntity represents the config_entities table

func (*ConfigEntity) FromCreateConfigEntityRequest

func (ce *ConfigEntity) FromCreateConfigEntityRequest(req *openauth_v1.CreateConfigEntityRequest, readPerm, writePerm int64, createdBy int64) *ConfigEntity

FromCreateConfigEntityRequest creates a ConfigEntity from a protobuf request

func (*ConfigEntity) ToProtoConfigEntity

func (ce *ConfigEntity) ToProtoConfigEntity() *openauth_v1.ConfigEntity

ToProtoConfigEntity converts a ConfigEntity DAO to protobuf ConfigEntity

type EffectivePermission

type EffectivePermission struct {
	// Permission details
	PermissionId          int64   `db:"permission_id" json:"permissionId,omitempty"`
	PermissionName        string  `db:"permission_name" json:"permissionName,omitempty"`
	PermissionDisplayName string  `db:"permission_display_name" json:"permissionDisplayName,omitempty"`
	PermissionDescription *string `db:"permission_description" json:"permissionDescription,omitempty"`
	// Source of the permission: "direct" or "group"
	Source string `db:"source" json:"source,omitempty"`
	// If source is "group", this contains the group details
	GroupId          *int64  `db:"group_id" json:"groupId,omitempty"`
	GroupName        *string `db:"group_name" json:"groupName,omitempty"`
	GroupDisplayName *string `db:"group_display_name" json:"groupDisplayName,omitempty"`
	// If source is "direct", this may contain expiration info
	ExpiresAt *int64 `db:"expires_at" json:"expiresAt,omitempty"`
	// When this permission was granted
	GrantedAt int64 `db:"granted_at" json:"grantedAt,omitempty"`
	// Who granted this permission
	GrantedBy int64 `db:"granted_by" json:"grantedBy,omitempty"`
}

func (*EffectivePermission) ToProtoUserEffectivePermission

func (p *EffectivePermission) ToProtoUserEffectivePermission() *openauth_v1.EffectivePermission

type EmailVerificationToken

type EmailVerificationToken struct {
	ID        int64  `db:"id" json:"id"`
	UserID    int64  `db:"user_id" json:"userId"`
	Email     string `db:"email" json:"email"`
	Token     string `db:"token" json:"token"`
	ExpiresAt int64  `db:"expires_at" json:"expiresAt"`
	IsUsed    bool   `db:"is_used" json:"isUsed"`
	CreatedAt int64  `db:"created_at" json:"createdAt"`
}

type Group

type Group struct {
	ID          int64   `db:"id" json:"id"`
	Name        string  `db:"name" json:"name"`
	DisplayName string  `db:"display_name" json:"displayName"`
	Description *string `db:"description" json:"description,omitempty"`
	IsSystem    bool    `db:"is_system" json:"isSystem"`
	IsDefault   bool    `db:"is_default" json:"isDefault"`
	CreatedBy   int64   `db:"created_by" json:"createdBy"`
	CreatedAt   int64   `db:"created_at" json:"createdAt"`
	UpdatedAt   int64   `db:"updated_at" json:"updatedAt"`
}

Groups (roles) table

func (*Group) FromCreateGroupRequest

func (g *Group) FromCreateGroupRequest(req *openauth_v1.CreateGroupRequest, createdBy int64) *Group

func (*Group) ToProtoGroup

func (g *Group) ToProtoGroup() *openauth_v1.Group

ToProtoGroup converts a Group DAO to protobuf Group

func (*Group) ToProtoUserGroup

func (g *Group) ToProtoUserGroup(assignedAt int64) *openauth_v1.UserGroup

ToProtoUserGroup converts a Group DAO to protobuf UserGroup for user group listings

type GroupPermission

type GroupPermission struct {
	ID           int64 `db:"id" json:"id"`
	GroupID      int64 `db:"group_id" json:"groupId"`
	PermissionID int64 `db:"permission_id" json:"permissionId"`
	GrantedBy    int64 `db:"granted_by" json:"grantedBy"`
	CreatedAt    int64 `db:"created_at" json:"createdAt"`
}

Group ↔ Permission junction

type LoginAttempt

type LoginAttempt struct {
	ID             int64   `db:"id" json:"id"`
	Identifier     string  `db:"identifier" json:"identifier"`          // username/email/phone
	IdentifierType string  `db:"identifier_type" json:"identifierType"` // username, email, phone
	IPAddress      string  `db:"ip_address" json:"ipAddress"`
	UserAgent      *string `db:"user_agent" json:"userAgent,omitempty"`
	Success        bool    `db:"success" json:"success"`
	FailureReason  *string `db:"failure_reason" json:"failureReason,omitempty"`
	UserID         *int64  `db:"user_id" json:"userId,omitempty"`
	SessionID      *int64  `db:"session_id" json:"sessionId,omitempty"`
	CreatedAt      int64   `db:"created_at" json:"createdAt"`
}

Login attempts tracking

type OTPVerification

type OTPVerification struct {
	ID          int64  `db:"id" json:"id"`
	UserID      *int64 `db:"user_id" json:"userId,omitempty"`
	Identifier  string `db:"identifier" json:"identifier"` // email or phone
	OTPCode     string `db:"otp_code" json:"otpCode"`
	OTPType     string `db:"otp_type" json:"otpType"` // email_verification, phone_verification, password_reset, login
	IsUsed      bool   `db:"is_used" json:"isUsed"`
	ExpiresAt   int64  `db:"expires_at" json:"expiresAt"`
	Attempts    int    `db:"attempts" json:"attempts"`
	MaxAttempts int    `db:"max_attempts" json:"maxAttempts"`
	CreatedAt   int64  `db:"created_at" json:"createdAt"`
}

type PasswordResetToken

type PasswordResetToken struct {
	ID        int64  `db:"id" json:"id"`
	UserID    int64  `db:"user_id" json:"userId"`
	Token     string `db:"token" json:"token"`
	ExpiresAt int64  `db:"expires_at" json:"expiresAt"`
	IsUsed    bool   `db:"is_used" json:"isUsed"`
	CreatedAt int64  `db:"created_at" json:"createdAt"`
}

type Permission

type Permission struct {
	ID          int64   `db:"id" json:"id"`
	Name        string  `db:"name" json:"name"` // e.g., users.create
	DisplayName string  `db:"display_name" json:"displayName"`
	Description *string `db:"description" json:"description,omitempty"`
	IsSystem    bool    `db:"is_system" json:"isSystem"` // system permissions cannot be deleted
	CreatedBy   int64   `db:"created_by" json:"createdBy"`
	CreatedAt   int64   `db:"created_at" json:"createdAt"`
	UpdatedAt   int64   `db:"updated_at" json:"updatedAt"`
}

Permissions table

func (*Permission) FromCreatePermissionRequest

func (p *Permission) FromCreatePermissionRequest(req *openauth_v1.CreatePermissionRequest, createdBy int64) *Permission

func (*Permission) ToProtoPermission

func (p *Permission) ToProtoPermission() *openauth_v1.Permission

ToProtoPermission converts a Permission DAO to protobuf Permission

type Profile

type Profile struct {
	ID          int64      `db:"id" json:"id"`
	UUID        uuid.UUID  `db:"uuid" json:"uuid"`
	UserID      int64      `db:"user_id" json:"userId"`
	ProfileName *string    `db:"profile_name" json:"profileName,omitempty"` // Name/label for this profile
	FirstName   *string    `db:"first_name" json:"firstName,omitempty"`
	LastName    *string    `db:"last_name" json:"lastName,omitempty"`
	DisplayName *string    `db:"display_name" json:"displayName,omitempty"`
	Bio         *string    `db:"bio" json:"bio,omitempty"`
	AvatarURL   *string    `db:"avatar_url" json:"avatarUrl,omitempty"`
	DateOfBirth *time.Time `db:"date_of_birth" json:"dateOfBirth,omitempty"`
	Gender      *string    `db:"gender" json:"gender,omitempty"`
	Timezone    *string    `db:"timezone" json:"timezone,omitempty"`
	Locale      *string    `db:"locale" json:"locale,omitempty"`
	Country     *string    `db:"country" json:"country,omitempty"`
	City        *string    `db:"city" json:"city,omitempty"`
	Address     *string    `db:"address" json:"address,omitempty"`
	PostalCode  *string    `db:"postal_code" json:"postalCode,omitempty"`
	WebsiteURL  *string    `db:"website_url" json:"websiteUrl,omitempty"`
	Metadata    []byte     `db:"metadata" json:"metadata,omitempty"` // JSONB as raw bytes
	CreatedAt   int64      `db:"created_at" json:"createdAt"`
	UpdatedAt   int64      `db:"updated_at" json:"updatedAt"`
}

func (*Profile) FromCreateProfileRequest

func (p *Profile) FromCreateProfileRequest(req *openauth_v1.CreateProfileRequest, userId int64) *Profile

func (*Profile) ToProtoUserProfile

func (p *Profile) ToProtoUserProfile() *openauth_v1.UserProfile

ToProtoUserProfile converts a Profile DAO to protobuf UserProfile

type SecurityEvent

type SecurityEvent struct {
	ID          int64   `db:"id" json:"id"`
	UserID      *int64  `db:"user_id" json:"userId,omitempty"`
	EventType   string  `db:"event_type" json:"eventType"` // e.g., login_success
	Severity    string  `db:"severity" json:"severity"`    // low, medium, high
	Description *string `db:"description" json:"description,omitempty"`
	IPAddress   *string `db:"ip_address" json:"ipAddress,omitempty"`
	UserAgent   *string `db:"user_agent" json:"userAgent,omitempty"`
	Location    *string `db:"location" json:"location,omitempty"`
	DeviceID    *string `db:"device_id" json:"deviceId,omitempty"`
	SessionID   *int64  `db:"session_id" json:"sessionId,omitempty"`
	Metadata    []byte  `db:"metadata" json:"metadata,omitempty"` // JSONB
	Resolved    bool    `db:"resolved" json:"resolved"`
	ResolvedBy  *int64  `db:"resolved_by" json:"resolvedBy,omitempty"`
	ResolvedAt  *int64  `db:"resolved_at" json:"resolvedAt,omitempty"`
	CreatedAt   int64   `db:"created_at" json:"createdAt"`
}

Security events table

type Session

type Session struct {
	ID               int64     `db:"id" json:"id"`
	UUID             uuid.UUID `db:"uuid" json:"uuid"`
	UserID           int64     `db:"user_id" json:"userId"`
	UserUUID         uuid.UUID `db:"user_uuid" json:"userUuid"` // For easier lookups
	SessionToken     string    `db:"session_token" json:"sessionToken"`
	RefreshToken     *string   `db:"refresh_token" json:"refreshToken,omitempty"`
	DeviceID         *string   `db:"device_id" json:"deviceId,omitempty"`
	DeviceName       *string   `db:"device_name" json:"deviceName,omitempty"`
	DeviceType       *string   `db:"device_type" json:"deviceType,omitempty"` // web, mobile, desktop
	UserAgent        *string   `db:"user_agent" json:"userAgent,omitempty"`
	IPAddress        *string   `db:"ip_address" json:"ipAddress,omitempty"` // stored as INET
	Location         *string   `db:"location" json:"location,omitempty"`
	Lat              *float64  `db:"lat" json:"lat,omitempty"`
	Lon              *float64  `db:"lon" json:"lon,omitempty"`
	IsActive         bool      `db:"is_active" json:"isActive"`
	Status           string    `db:"status" json:"status"` // active, expired, revoked, logged_out
	ExpiresAt        int64     `db:"expires_at" json:"expiresAt"`
	RefreshExpiresAt *int64    `db:"refresh_expires_at" json:"refreshExpiresAt,omitempty"`
	LastActivityAt   int64     `db:"last_activity_at" json:"lastActivityAt"`
	RevokedAt        *int64    `db:"revoked_at" json:"revokedAt,omitempty"`
	CreatedAt        int64     `db:"created_at" json:"createdAt"`
}

func (*Session) FromSignInRequest

func (s *Session) FromSignInRequest(
	sessionUUID uuid.UUID,
	userID int64,
	userUUID uuid.UUID,
	sessionToken string,
	refreshToken string,
	expiresAt int64,
	refreshExpiresAt int64,
	req *openauth_v1.SignInRequest,
) *Session

FromSignInRequest initializes a Session DAO from SignInRequest data

func (*Session) ToProtoSession

func (s *Session) ToProtoSession() *openauth_v1.Session

ToProtoSession converts Session DAO to protobuf Session

type SessionActivity

type SessionActivity struct {
	ID           int64   `db:"id" json:"id"`
	SessionID    int64   `db:"session_id" json:"sessionId"`
	ActivityType string  `db:"activity_type" json:"activityType"` // login, logout, refresh, access
	IPAddress    *string `db:"ip_address" json:"ipAddress,omitempty"`
	UserAgent    *string `db:"user_agent" json:"userAgent,omitempty"`
	Location     *string `db:"location" json:"location,omitempty"`
	Metadata     []byte  `db:"metadata" json:"metadata,omitempty"` // JSONB
	CreatedAt    int64   `db:"created_at" json:"createdAt"`
}

type SessionArchive

type SessionArchive struct {
	ID               int64     `db:"id" json:"id"`
	OriginalID       int64     `db:"original_id" json:"originalId"`
	UUID             uuid.UUID `db:"uuid" json:"uuid"`
	UserID           int64     `db:"user_id" json:"userId"`
	UserUUID         uuid.UUID `db:"user_uuid" json:"userUuid"`
	SessionToken     *string   `db:"session_token" json:"sessionToken,omitempty"`
	RefreshToken     *string   `db:"refresh_token" json:"refreshToken,omitempty"`
	DeviceID         *string   `db:"device_id" json:"deviceId,omitempty"`
	DeviceName       *string   `db:"device_name" json:"deviceName,omitempty"`
	DeviceType       *string   `db:"device_type" json:"deviceType,omitempty"`
	UserAgent        *string   `db:"user_agent" json:"userAgent,omitempty"`
	IPAddress        *string   `db:"ip_address" json:"ipAddress,omitempty"`
	Location         *string   `db:"location" json:"location,omitempty"`
	Lat              *float64  `db:"lat" json:"lat,omitempty"`
	Lon              *float64  `db:"lon" json:"lon,omitempty"`
	IsActive         bool      `db:"is_active" json:"isActive"`
	Status           string    `db:"status" json:"status"` // archived, deleted
	ExpiresAt        int64     `db:"expires_at" json:"expiresAt"`
	RefreshExpiresAt *int64    `db:"refresh_expires_at" json:"refreshExpiresAt,omitempty"`
	LastActivityAt   int64     `db:"last_activity_at" json:"lastActivityAt"`
	RevokedAt        *int64    `db:"revoked_at" json:"revokedAt,omitempty"`
	CreatedAt        int64     `db:"created_at" json:"createdAt"`
	ArchivedAt       int64     `db:"archived_at" json:"archivedAt"`
}

SessionArchive represents an archived session record

type User

type User struct {
	ID                int64     `db:"id" json:"id"`
	UUID              uuid.UUID `db:"uuid" json:"uuid"`
	Username          string    `db:"username" json:"username"`
	Email             *string   `db:"email" json:"email,omitempty"`
	Phone             *string   `db:"phone" json:"phone,omitempty"`
	Name              *string   `db:"name" json:"name,omitempty"`
	AvatarURL         *string   `db:"avatar_url" json:"avatarUrl,omitempty"`
	PasswordHash      string    `db:"password_hash" json:"passwordHash"`
	EmailVerified     bool      `db:"email_verified" json:"emailVerified"`
	PhoneVerified     bool      `db:"phone_verified" json:"phoneVerified"`
	IsActive          bool      `db:"is_active" json:"isActive"`
	IsLocked          bool      `db:"is_locked" json:"isLocked"`
	FailedLoginCount  int       `db:"failed_login_attempts" json:"failedLoginAttempts"`
	LastLoginAt       *int64    `db:"last_login_at" json:"lastLoginAt,omitempty"`
	PasswordChangedAt int64     `db:"password_changed_at" json:"passwordChangedAt"`
	CreatedAt         int64     `db:"created_at" json:"createdAt"`
	UpdatedAt         int64     `db:"updated_at" json:"updatedAt"`
}

func (*User) FromSignUpRequest

func (u *User) FromSignUpRequest(req *openauth_v1.SignUpRequest, hashedPassword string) *User

func (*User) ToProtoGroupUser

func (u *User) ToProtoGroupUser(assignedAt int64) *openauth_v1.GroupUser

ToProtoGroupUser converts a User DAO to protobuf GroupUser for group user listings

func (*User) ToProtoUser

func (u *User) ToProtoUser() *openauth_v1.User

ToProtoUser converts a User DAO to protobuf User

type UserExternalAccount

type UserExternalAccount struct {
	ID               int64     `db:"id" json:"id"`
	UUID             uuid.UUID `db:"uuid" json:"uuid"`
	UserID           int64     `db:"user_id" json:"userId"`
	ProviderID       int64     `db:"provider_id" json:"providerId"`
	ExternalUserID   string    `db:"external_user_id" json:"externalUserId"`
	ExternalUsername *string   `db:"external_username" json:"externalUsername,omitempty"`
	ExternalEmail    *string   `db:"external_email" json:"externalEmail,omitempty"`
	AccessToken      *string   `db:"access_token" json:"accessToken,omitempty"`
	RefreshToken     *string   `db:"refresh_token" json:"refreshToken,omitempty"`
	TokenExpiresAt   *int64    `db:"token_expires_at" json:"tokenExpiresAt,omitempty"`
	ExternalData     []byte    `db:"external_data" json:"externalData,omitempty"` // JSONB → []byte or map[string]any
	CreatedAt        int64     `db:"created_at" json:"createdAt"`
	UpdatedAt        int64     `db:"updated_at" json:"updatedAt"`
}

UserExternalAccount represents linked external accounts for a user

type UserGroup

type UserGroup struct {
	ID         int64  `db:"id" json:"id"`
	UserID     int64  `db:"user_id" json:"userId"`
	GroupID    int64  `db:"group_id" json:"groupId"`
	AssignedBy int64  `db:"assigned_by" json:"assignedBy"`
	ExpiresAt  *int64 `db:"expires_at" json:"expiresAt,omitempty"`
	CreatedAt  int64  `db:"created_at" json:"createdAt"`
}

User ↔ Group junction

type UserPermission

type UserPermission struct {
	ID           int64  `db:"id" json:"id"`
	UserID       int64  `db:"user_id" json:"userId"`
	PermissionID int64  `db:"permission_id" json:"permissionId"`
	GrantedBy    int64  `db:"granted_by" json:"grantedBy"`
	ExpiresAt    *int64 `db:"expires_at" json:"expiresAt,omitempty"`
	CreatedAt    int64  `db:"created_at" json:"createdAt"`
}

Direct User ↔ Permission mapping

type ValueType

type ValueType string
const (
	ValueTypeString ValueType = "string"
	ValueTypeInt    ValueType = "int"
	ValueTypeFloat  ValueType = "float"
	ValueTypeBool   ValueType = "bool"
	ValueTypeJSON   ValueType = "json"
)

func (ValueType) FromProto

func (vt ValueType) FromProto(protoType openauth_v1.ValueType) ValueType

func (ValueType) ToProto

func (vt ValueType) ToProto() openauth_v1.ValueType

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL