mirror of
https://github.com/andwati/zitadel.git
synced 2026-10-25 16:52:17 +00:00
This pull request introduces a new set of domain models and repositories for managing users within the new v3 structure. The goal is to establish a clean, robust, and extensible foundation for user management. ### Summary This PR accomplishes the following: - **Polymorphic User Model**: Introduces a `User` model in user.go that can represent either a `Human` or a `Machine` user. This provides a unified way to handle different user types while allowing for specific attributes and logic for each. - **Repository Pattern**: Implements the repository pattern for accessing and manipulating user data. This decouples the business logic from the data storage implementation. The main repository interfaces (`UserRepository`, `HumanUserRepository`, `MachineUserRepository`) are now defined in `backend/v3/domain/user_repository.go`. - **Comprehensive User Models**: The user.go file now also defines the domain models for associated user data, including `UserMetadata`, `IdentityProviderLink`, `Passkey`, `PersonalAccessToken`, and `MachineKey`. - **Generic Verification and Check System**: Introduces verification.go and check.go to provide a standardized way of handling various verification flows (e.g., email verification, OTP checks). - **Generated Code**: Adds new generated files for enums (`humangender_enumer.go`, `machinekeytype_enumer.go`, `passkeytype_enumer.go`, `personalaccesstokentype_enumer.go`, `userstate_enumer.go`, `usertype_enumer.go`) and mocks for the new repositories. - **Session Domain Refactoring**: Updates the session domain (`backend/v3/domain/session*.go`) to align with the new user model structure. This foundational work paves the way for migrating user management logic to the new `v3` backend, with a more maintainable and testable architecture. part of #10224 --------- Co-authored-by: Copilot <[email protected]> Co-authored-by: Marco A. <[email protected]>
39 lines
1.5 KiB
Go
39 lines
1.5 KiB
Go
package domain
|
|
|
|
import (
|
|
"net"
|
|
"net/http"
|
|
|
|
"github.com/zitadel/zitadel/backend/v3/storage/database"
|
|
)
|
|
|
|
type SessionUserAgent struct {
|
|
InstanceID string `json:"instanceId,omitempty" db:"instance_id"`
|
|
FingerprintID *string `json:"fingerprintId,omitempty" db:"fingerprint_id"`
|
|
Description *string `json:"description,omitempty" db:"description"`
|
|
IP net.IP `json:"ip,omitempty" db:"ip"`
|
|
Header http.Header `json:"header,omitempty" db:"headers"`
|
|
}
|
|
|
|
type SessionUserAgentColumns interface {
|
|
// InstanceIDColumn returns the column for the instance id field.
|
|
InstanceIDColumn() database.Column
|
|
// FingerprintIDColumn returns the column for the fingerprint id field.
|
|
FingerprintIDColumn() database.Column
|
|
// IPColumn returns the column for the ip field.
|
|
IPColumn() database.Column
|
|
// DescriptionColumn returns the column for the description field.
|
|
DescriptionColumn() database.Column
|
|
// HeadersColumn returns the column for the headers field.
|
|
HeadersColumn() database.Column
|
|
}
|
|
|
|
type SessionUserAgentConditions interface {
|
|
// PrimaryKeyCondition returns a filter on the primary key fields.
|
|
PrimaryKeyCondition(instanceID, fingerprintID string) database.Condition
|
|
// InstanceIDCondition returns an equal filter on the instance id field.
|
|
InstanceIDCondition(instanceID string) database.Condition
|
|
// FingerprintIDCondition returns an equal filter on the fingerprint id field.
|
|
FingerprintIDCondition(fingerprintID string) database.Condition
|
|
}
|