Documentation ¶
Overview ¶
Package models implements all PocketBase DB models and DTOs.
Index ¶
- Constants
- type Admin
- type BaseModel
- func (m *BaseModel) GetCreated() types.DateTime
- func (m *BaseModel) GetId() string
- func (m *BaseModel) GetUpdated() types.DateTime
- func (m *BaseModel) HasId() bool
- func (m *BaseModel) IsNew() bool
- func (m *BaseModel) MarkAsNew()
- func (m *BaseModel) MarkAsNotNew()
- func (m *BaseModel) PostScan() error
- func (m *BaseModel) RefreshCreated()
- func (m *BaseModel) RefreshId()
- func (m *BaseModel) RefreshUpdated()
- func (m *BaseModel) SetId(id string)
- type Collection
- func (m *Collection) AuthOptions() CollectionAuthOptions
- func (m *Collection) BaseFilesPath() string
- func (m *Collection) BaseOptions() CollectionBaseOptions
- func (m *Collection) DecodeOptions(result any) error
- func (m *Collection) IsAuth() bool
- func (m *Collection) IsBase() bool
- func (m Collection) MarshalJSON() ([]byte, error)
- func (m *Collection) NormalizeOptions() error
- func (m *Collection) SetOptions(typedOptions any) error
- func (m *Collection) TableName() string
- type CollectionAuthOptions
- type CollectionBaseOptions
- type ColumnValueMapper
- type ExternalAuth
- type FilesManager
- type Model
- type Param
- type Record
- func (m *Record) BaseFilesPath() string
- func (m *Record) Collection() *Collection
- func (m *Record) ColumnValueMap() map[string]any
- func (m *Record) Email() string
- func (m *Record) EmailVisibility() bool
- func (m *Record) Expand() map[string]any
- func (m *Record) FindFileFieldByFile(filename string) *schema.SchemaField
- func (m *Record) Get(key string) any
- func (m *Record) GetBool(key string) bool
- func (m *Record) GetDateTime(key string) types.DateTime
- func (m *Record) GetFloat(key string) float64
- func (m *Record) GetInt(key string) int
- func (m *Record) GetString(key string) string
- func (m *Record) GetStringSlice(key string) []string
- func (m *Record) GetTime(key string) time.Time
- func (m *Record) IgnoreEmailVisibility(state bool)
- func (m *Record) LastResetSentAt() types.DateTime
- func (m *Record) LastVerificationSentAt() types.DateTime
- func (m *Record) Load(data map[string]any)
- func (m Record) MarshalJSON() ([]byte, error)
- func (m *Record) MergeExpand(expand map[string]any)
- func (m *Record) OriginalCopy() *Record
- func (m *Record) PasswordHash() string
- func (m *Record) PublicExport() map[string]any
- func (m *Record) RefreshTokenKey() error
- func (m *Record) SchemaData() map[string]any
- func (m *Record) Set(key string, value any)
- func (m *Record) SetEmail(email string) error
- func (m *Record) SetEmailVisibility(visible bool) error
- func (m *Record) SetExpand(expand map[string]any)
- func (m *Record) SetLastResetSentAt(dateTime types.DateTime) error
- func (m *Record) SetLastVerificationSentAt(dateTime types.DateTime) error
- func (m *Record) SetPassword(password string) error
- func (m *Record) SetTokenKey(key string) error
- func (m *Record) SetUsername(username string) error
- func (m *Record) SetVerified(verified bool) error
- func (m *Record) TableName() string
- func (m *Record) TokenKey() string
- func (m *Record) UnknownData() map[string]any
- func (m *Record) UnmarshalJSON(data []byte) error
- func (m *Record) UnmarshalJSONField(key string, result any) error
- func (m *Record) Username() string
- func (m *Record) ValidatePassword(password string) bool
- func (m *Record) Verified() bool
- func (m *Record) WithUnkownData(state bool)
- type Request
- type RequestData
Constants ¶
const ( // DefaultIdLength is the default length of the generated model id. DefaultIdLength = 15 // DefaultIdAlphabet is the default characters set used for generating the model id. DefaultIdAlphabet = "abcdefghijklmnopqrstuvwxyz0123456789" )
const ( CollectionTypeBase = "base" CollectionTypeAuth = "auth" )
const ( RequestAuthGuest = "guest" RequestAuthAdmin = "admin" RequestAuthRecord = "auth_record" )
list with the supported values for `Request.Auth`
const (
ParamAppSettings = "settings"
)
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Admin ¶
type Admin struct { BaseModel Avatar int `db:"avatar" json:"avatar"` Email string `db:"email" json:"email"` TokenKey string `db:"tokenKey" json:"-"` PasswordHash string `db:"passwordHash" json:"-"` LastResetSentAt types.DateTime `db:"lastResetSentAt" json:"-"` }
func (*Admin) RefreshTokenKey ¶
RefreshTokenKey generates and sets new random token key.
func (*Admin) SetPassword ¶
SetPassword sets cryptographically secure string to `model.Password`.
Additionally this method also resets the LastResetSentAt and the TokenKey fields.
func (*Admin) ValidatePassword ¶
ValidatePassword validates a plain password against the model's password.
type BaseModel ¶
type BaseModel struct { Id string `db:"id" json:"id"` Created types.DateTime `db:"created" json:"created"` Updated types.DateTime `db:"updated" json:"updated"` // contains filtered or unexported fields }
BaseModel defines common fields and methods used by all other models.
func (*BaseModel) GetCreated ¶
GetCreated returns the model Created datetime.
func (*BaseModel) GetUpdated ¶
GetUpdated returns the model Updated datetime.
func (*BaseModel) IsNew ¶
IsNew indicates what type of db query (insert or update) should be used with the model instance.
func (*BaseModel) MarkAsNew ¶
func (m *BaseModel) MarkAsNew()
MarkAsNew marks the model as "new" (aka. enforces m.IsNew() to be true).
func (*BaseModel) MarkAsNotNew ¶
func (m *BaseModel) MarkAsNotNew()
MarkAsNotNew marks the model as "not new" (aka. enforces m.IsNew() to be false)
func (*BaseModel) PostScan ¶
PostScan implements the dbx.PostScanner interface.
It is executed right after the model was populated with the db row values.
func (*BaseModel) RefreshCreated ¶
func (m *BaseModel) RefreshCreated()
RefreshCreated updates the model Created field with the current datetime.
func (*BaseModel) RefreshId ¶
func (m *BaseModel) RefreshId()
RefreshId generates and sets a new model id.
The generated id is a cryptographically random 15 characters length string.
func (*BaseModel) RefreshUpdated ¶
func (m *BaseModel) RefreshUpdated()
RefreshUpdated updates the model Updated field with the current datetime.
type Collection ¶
type Collection struct { BaseModel Name string `db:"name" json:"name"` Type string `db:"type" json:"type"` System bool `db:"system" json:"system"` Schema schema.Schema `db:"schema" json:"schema"` // rules ListRule *string `db:"listRule" json:"listRule"` ViewRule *string `db:"viewRule" json:"viewRule"` CreateRule *string `db:"createRule" json:"createRule"` UpdateRule *string `db:"updateRule" json:"updateRule"` DeleteRule *string `db:"deleteRule" json:"deleteRule"` Options types.JsonMap `db:"options" json:"options"` }
func (*Collection) AuthOptions ¶
func (m *Collection) AuthOptions() CollectionAuthOptions
AuthOptions decodes the current collection options and returns them as new CollectionAuthOptions instance.
func (*Collection) BaseFilesPath ¶
func (m *Collection) BaseFilesPath() string
BaseFilesPath returns the storage dir path used by the collection.
func (*Collection) BaseOptions ¶
func (m *Collection) BaseOptions() CollectionBaseOptions
BaseOptions decodes the current collection options and returns them as new CollectionBaseOptions instance.
func (*Collection) DecodeOptions ¶
func (m *Collection) DecodeOptions(result any) error
DecodeOptions decodes the current collection options into the provided "result" (must be a pointer).
func (*Collection) IsAuth ¶
func (m *Collection) IsAuth() bool
IsBase checks if the current collection has "auth" type.
func (*Collection) IsBase ¶
func (m *Collection) IsBase() bool
IsBase checks if the current collection has "base" type.
func (Collection) MarshalJSON ¶
func (m Collection) MarshalJSON() ([]byte, error)
MarshalJSON implements the json.Marshaler interface.
func (*Collection) NormalizeOptions ¶
func (m *Collection) NormalizeOptions() error
NormalizeOptions updates the current collection options with a new normalized state based on the collection type.
func (*Collection) SetOptions ¶
func (m *Collection) SetOptions(typedOptions any) error
SetOptions normalizes and unmarshals the specified options into m.Options.
func (*Collection) TableName ¶
func (m *Collection) TableName() string
TableName returns the Collection model SQL table name.
type CollectionAuthOptions ¶
type CollectionAuthOptions struct { ManageRule *string `form:"manageRule" json:"manageRule"` AllowOAuth2Auth bool `form:"allowOAuth2Auth" json:"allowOAuth2Auth"` AllowUsernameAuth bool `form:"allowUsernameAuth" json:"allowUsernameAuth"` AllowEmailAuth bool `form:"allowEmailAuth" json:"allowEmailAuth"` RequireEmail bool `form:"requireEmail" json:"requireEmail"` ExceptEmailDomains []string `form:"exceptEmailDomains" json:"exceptEmailDomains"` OnlyEmailDomains []string `form:"onlyEmailDomains" json:"onlyEmailDomains"` MinPasswordLength int `form:"minPasswordLength" json:"minPasswordLength"` }
CollectionAuthOptions defines the "auth" Collection.Options fields.
func (CollectionAuthOptions) Validate ¶
func (o CollectionAuthOptions) Validate() error
Validate implements validation.Validatable interface.
type CollectionBaseOptions ¶
type CollectionBaseOptions struct { }
CollectionAuthOptions defines the "base" Collection.Options fields.
func (CollectionBaseOptions) Validate ¶
func (o CollectionBaseOptions) Validate() error
Validate implements validation.Validatable interface.
type ColumnValueMapper ¶
type ColumnValueMapper interface { // ColumnValueMap returns the data to be used when persisting the model. ColumnValueMap() map[string]any }
ColumnValueMapper defines an interface for custom db model data serialization.
type ExternalAuth ¶
type ExternalAuth struct { BaseModel CollectionId string `db:"collectionId" json:"collectionId"` RecordId string `db:"recordId" json:"recordId"` Provider string `db:"provider" json:"provider"` ProviderId string `db:"providerId" json:"providerId"` }
func (*ExternalAuth) TableName ¶
func (m *ExternalAuth) TableName() string
type FilesManager ¶
type FilesManager interface { // BaseFilesPath returns the storage dir path used by the interface instance. BaseFilesPath() string }
FilesManager defines an interface with common methods that files manager models should implement.
type Model ¶
type Model interface { TableName() string IsNew() bool MarkAsNew() MarkAsNotNew() HasId() bool GetId() string SetId(id string) GetCreated() types.DateTime GetUpdated() types.DateTime RefreshId() RefreshCreated() RefreshUpdated() }
Model defines an interface with common methods that all db models should have.
type Param ¶
type Record ¶
type Record struct { BaseModel // contains filtered or unexported fields }
func NewRecord ¶
func NewRecord(collection *Collection) *Record
NewRecord initializes a new empty Record model.
func NewRecordFromNullStringMap ¶
func NewRecordFromNullStringMap(collection *Collection, data dbx.NullStringMap) *Record
NewRecordFromNullStringMap initializes a single new Record model with data loaded from the provided NullStringMap.
func NewRecordsFromNullStringMaps ¶
func NewRecordsFromNullStringMaps(collection *Collection, rows []dbx.NullStringMap) []*Record
NewRecordsFromNullStringMaps initializes a new Record model for each row in the provided NullStringMap slice.
func (*Record) BaseFilesPath ¶
BaseFilesPath returns the storage dir path used by the record.
func (*Record) Collection ¶
func (m *Record) Collection() *Collection
Collection returns the Collection model associated to the current Record model.
func (*Record) ColumnValueMap ¶
ColumnValueMap implements ColumnValueMapper interface.
func (*Record) EmailVisibility ¶
Verified returns the "emailVisibility" auth record data value.
func (*Record) Expand ¶
Expand returns a shallow copy of the record.expand data attached to the current Record model.
func (*Record) FindFileFieldByFile ¶
func (m *Record) FindFileFieldByFile(filename string) *schema.SchemaField
FindFileFieldByFile returns the first file type field for which any of the record's data contains the provided filename.
func (*Record) GetDateTime ¶
GetDateTime returns the data value for "key" as a DateTime instance.
func (*Record) GetStringSlice ¶
GetStringSlice returns the data value for "key" as a slice of unique strings.
func (*Record) IgnoreEmailVisibility ¶
IgnoreEmailVisibility toggles the flag to ignore the auth record email visibility check.
func (*Record) LastResetSentAt ¶
LastResetSentAt returns the "lastResentSentAt" auth record data value.
func (*Record) LastVerificationSentAt ¶
LastVerificationSentAt returns the "lastVerificationSentAt" auth record data value.
func (Record) MarshalJSON ¶
MarshalJSON implements the json.Marshaler interface.
Only the data exported by `PublicExport()` will be serialized.
func (*Record) MergeExpand ¶
MergeExpand merges recursively the provided expand data into the current model's expand (if any).
Note that if an expanded prop with the same key is a slice (old or new expand) then both old and new records will be merged into a new slice (aka. a :merge: [b,c] => [a,b,c]). Otherwise the "old" expanded record will be replace with the "new" one (aka. a :merge: aNew => aNew).
func (*Record) OriginalCopy ¶
OriginalCopy returns a copy of the current record model populated with its original (aka. the initially loaded) data state.
func (*Record) PasswordHash ¶
PasswordHash returns the "passwordHash" auth record data value.
func (*Record) PublicExport ¶
PublicExport exports only the record fields that are safe to be public.
Fields marked as hidden will be exported only if `m.IgnoreEmailVisibility(true)` is set.
func (*Record) RefreshTokenKey ¶
RefreshTokenKey generates and sets new random auth record "tokenKey".
Returns an error if the record is not from an auth collection.
func (*Record) SchemaData ¶
SchemaData returns a shallow copy ONLY of the defined record schema fields data.
func (*Record) Set ¶
Set sets the provided key-value data pair for the current Record model.
If the record collection has field with name matching the provided "key", the value will be further normalized according to the field rules.
func (*Record) SetEmail ¶
SetEmail sets the "email" auth record data value.
This method doesn't check whether the provided value is a valid email.
Returns an error if the record is not from an auth collection.
func (*Record) SetEmailVisibility ¶
SetEmailVisibility sets the "emailVisibility" auth record data value.
Returns an error if the record is not from an auth collection.
func (*Record) SetLastResetSentAt ¶
SetLastResetSentAt sets the "lastResentSentAt" auth record data value.
Returns an error if the record is not from an auth collection.
func (*Record) SetLastVerificationSentAt ¶
SetLastVerificationSentAt sets an "lastVerificationSentAt" auth record data value.
Returns an error if the record is not from an auth collection.
func (*Record) SetPassword ¶
SetPassword sets cryptographically secure string to the auth record "password" field. This method also resets the "lastResetSentAt" and the "tokenKey" fields.
Returns an error if the record is not from an auth collection or an empty password is provided.
func (*Record) SetTokenKey ¶
SetTokenKey sets the "tokenKey" auth record data value.
Returns an error if the record is not from an auth collection.
func (*Record) SetUsername ¶
SetUsername sets the "username" auth record data value.
This method doesn't check whether the provided value is a valid username.
Returns an error if the record is not from an auth collection.
func (*Record) SetVerified ¶
SetVerified sets the "verified" auth record data value.
Returns an error if the record is not from an auth collection.
func (*Record) UnknownData ¶
UnknownData returns a shallow copy ONLY of the unknown record fields data, aka. fields that are neither one of the base and special system ones, nor defined by the collection schema.
func (*Record) UnmarshalJSON ¶
UnmarshalJSON implements the json.Unmarshaler interface.
func (*Record) UnmarshalJSONField ¶
Retrieves the "key" json field value and unmarshals it into "result".
Example
result := struct { FirstName string `json:"first_name"` }{} err := m.UnmarshalJSONField("my_field_name", &result)
func (*Record) ValidatePassword ¶
ValidatePassword validates a plain password against the auth record password.
Returns false if the password is incorrect or record is not from an auth collection.
func (*Record) WithUnkownData ¶
WithUnkownData toggles the export/serialization of unknown data fields (false by default).
type Request ¶
type Request struct { BaseModel Url string `db:"url" json:"url"` Method string `db:"method" json:"method"` Status int `db:"status" json:"status"` Auth string `db:"auth" json:"auth"` UserIp string `db:"userIp" json:"userIp"` RemoteIp string `db:"remoteIp" json:"remoteIp"` Referer string `db:"referer" json:"referer"` UserAgent string `db:"userAgent" json:"userAgent"` Meta types.JsonMap `db:"meta" json:"meta"` }
type RequestData ¶
type RequestData struct { Method string `json:"method"` Query map[string]any `json:"query"` Data map[string]any `json:"data"` AuthRecord *Record `json:"authRecord"` Admin *Admin `json:"admin"` }
RequestData defines a HTTP request data struct, usually used as part of the `@request.*` filter resolver.