models

package
Version: v0.12.2 Latest Latest
Warning

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

Go to latest
Published: Feb 2, 2023 License: MIT Imports: 17 Imported by: 53

Documentation

Overview

Package models implements all PocketBase DB models and DTOs.

Index

Constants

View Source
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"
)
View Source
const (
	CollectionTypeBase = "base"
	CollectionTypeAuth = "auth"
)
View Source
const (
	RequestAuthGuest  = "guest"
	RequestAuthAdmin  = "admin"
	RequestAuthRecord = "auth_record"
)

list with the supported values for `Request.Auth`

View Source
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 added in v0.8.0

func (m *Admin) RefreshTokenKey() error

RefreshTokenKey generates and sets new random token key.

func (*Admin) SetPassword added in v0.8.0

func (m *Admin) SetPassword(password string) error

SetPassword sets cryptographically secure string to `model.Password`.

Additionally this method also resets the LastResetSentAt and the TokenKey fields.

func (*Admin) TableName

func (m *Admin) TableName() string

TableName returns the Admin model SQL table name.

func (*Admin) ValidatePassword added in v0.8.0

func (m *Admin) ValidatePassword(password string) bool

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

func (m *BaseModel) GetCreated() types.DateTime

GetCreated returns the model Created datetime.

func (*BaseModel) GetId

func (m *BaseModel) GetId() string

GetId returns the model id.

func (*BaseModel) GetUpdated

func (m *BaseModel) GetUpdated() types.DateTime

GetUpdated returns the model Updated datetime.

func (*BaseModel) HasId

func (m *BaseModel) HasId() bool

HasId returns whether the model has a nonzero id.

func (*BaseModel) IsNew added in v0.4.0

func (m *BaseModel) IsNew() bool

IsNew indicates what type of db query (insert or update) should be used with the model instance.

func (*BaseModel) MarkAsNew added in v0.4.0

func (m *BaseModel) MarkAsNew()

MarkAsNew marks the model as "new" (aka. enforces m.IsNew() to be true).

func (*BaseModel) MarkAsNotNew added in v0.9.0

func (m *BaseModel) MarkAsNotNew()

MarkAsNotNew marks the model as "not new" (aka. enforces m.IsNew() to be false)

func (*BaseModel) PostScan added in v0.9.0

func (m *BaseModel) PostScan() error

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.

func (*BaseModel) SetId added in v0.4.0

func (m *BaseModel) SetId(id string)

SetId sets the model id to the provided string value.

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 added in v0.8.0

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 added in v0.8.0

func (m *Collection) BaseOptions() CollectionBaseOptions

BaseOptions decodes the current collection options and returns them as new CollectionBaseOptions instance.

func (*Collection) DecodeOptions added in v0.8.0

func (m *Collection) DecodeOptions(result any) error

DecodeOptions decodes the current collection options into the provided "result" (must be a pointer).

func (*Collection) IsAuth added in v0.8.0

func (m *Collection) IsAuth() bool

IsBase checks if the current collection has "auth" type.

func (*Collection) IsBase added in v0.8.0

func (m *Collection) IsBase() bool

IsBase checks if the current collection has "base" type.

func (Collection) MarshalJSON added in v0.8.0

func (m Collection) MarshalJSON() ([]byte, error)

MarshalJSON implements the json.Marshaler interface.

func (*Collection) NormalizeOptions added in v0.8.0

func (m *Collection) NormalizeOptions() error

NormalizeOptions updates the current collection options with a new normalized state based on the collection type.

func (*Collection) SetOptions added in v0.8.0

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 added in v0.8.0

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 added in v0.8.0

func (o CollectionAuthOptions) Validate() error

Validate implements validation.Validatable interface.

type CollectionBaseOptions added in v0.8.0

type CollectionBaseOptions struct {
}

CollectionAuthOptions defines the "base" Collection.Options fields.

func (CollectionBaseOptions) Validate added in v0.8.0

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 added in v0.6.0

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 added in v0.6.0

func (m *ExternalAuth) TableName() string

type FilesManager added in v0.3.0

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 Param struct {
	BaseModel

	Key   string        `db:"key" json:"key"`
	Value types.JsonRaw `db:"value" json:"value"`
}

func (*Param) TableName

func (m *Param) TableName() string

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

func (m *Record) BaseFilesPath() string

BaseFilesPath returns the storage dir path used by the record.

func (*Record) CleanCopy added in v0.12.0

func (m *Record) CleanCopy() *Record

CleanCopy returns a copy of the current record model populated only with its LATEST data state and everything else reset to the defaults.

func (*Record) Collection

func (m *Record) Collection() *Collection

Collection returns the Collection model associated to the current Record model.

func (*Record) ColumnValueMap

func (m *Record) ColumnValueMap() map[string]any

ColumnValueMap implements ColumnValueMapper interface.

func (*Record) Email added in v0.8.0

func (m *Record) Email() string

Email returns the "email" auth record data value.

func (*Record) EmailVisibility added in v0.8.0

func (m *Record) EmailVisibility() bool

Verified returns the "emailVisibility" auth record data value.

func (*Record) Expand added in v0.8.0

func (m *Record) Expand() map[string]any

Expand returns a shallow copy of the current Record model expand data.

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) Get added in v0.8.0

func (m *Record) Get(key string) any

Get returns a single record model data value for "key".

func (*Record) GetBool added in v0.8.0

func (m *Record) GetBool(key string) bool

GetBool returns the data value for "key" as a bool.

func (*Record) GetDateTime added in v0.8.0

func (m *Record) GetDateTime(key string) types.DateTime

GetDateTime returns the data value for "key" as a DateTime instance.

func (*Record) GetFloat added in v0.8.0

func (m *Record) GetFloat(key string) float64

GetFloat returns the data value for "key" as a float64.

func (*Record) GetInt added in v0.8.0

func (m *Record) GetInt(key string) int

GetInt returns the data value for "key" as an int.

func (*Record) GetString added in v0.8.0

func (m *Record) GetString(key string) string

GetString returns the data value for "key" as a string.

func (*Record) GetStringSlice added in v0.8.0

func (m *Record) GetStringSlice(key string) []string

GetStringSlice returns the data value for "key" as a slice of unique strings.

func (*Record) GetTime added in v0.8.0

func (m *Record) GetTime(key string) time.Time

GetTime returns the data value for "key" as a time.Time instance.

func (*Record) IgnoreEmailVisibility added in v0.8.0

func (m *Record) IgnoreEmailVisibility(state bool)

IgnoreEmailVisibility toggles the flag to ignore the auth record email visibility check.

func (*Record) LastResetSentAt added in v0.8.0

func (m *Record) LastResetSentAt() types.DateTime

LastResetSentAt returns the "lastResentSentAt" auth record data value.

func (*Record) LastVerificationSentAt added in v0.8.0

func (m *Record) LastVerificationSentAt() types.DateTime

LastVerificationSentAt returns the "lastVerificationSentAt" auth record data value.

func (*Record) Load

func (m *Record) Load(data map[string]any)

Load bulk loads the provided data into the current Record model.

func (Record) MarshalJSON

func (m Record) MarshalJSON() ([]byte, error)

MarshalJSON implements the json.Marshaler interface.

Only the data exported by `PublicExport()` will be serialized.

func (*Record) MergeExpand added in v0.10.2

func (m *Record) MergeExpand(expand map[string]any)

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 added in v0.9.0

func (m *Record) OriginalCopy() *Record

OriginalCopy returns a copy of the current record model populated with its ORIGINAL data state (aka. the initially loaded) and everything else reset to the defaults.

func (*Record) PasswordHash added in v0.8.0

func (m *Record) PasswordHash() string

PasswordHash returns the "passwordHash" auth record data value.

func (*Record) PublicExport

func (m *Record) PublicExport() map[string]any

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 added in v0.8.0

func (m *Record) RefreshTokenKey() error

RefreshTokenKey generates and sets new random auth record "tokenKey".

Returns an error if the record is not from an auth collection.

func (*Record) ReplaceModifers added in v0.11.0

func (m *Record) ReplaceModifers(data map[string]any) map[string]any

ReplaceModifers returns a new map with applied modifier values based on the current record and the specified data.

The resolved modifier keys will be removed.

Multiple modifiers will be applied one after another, while reusing the previous base key value result (eg. 1; -5; +2 => -2).

Example usage:

 newData := record.ReplaceModifers(data)
	// record:  {"field": 10}
	// data:    {"field+": 5}
	// newData: {"field": 15}

func (*Record) SchemaData added in v0.8.0

func (m *Record) SchemaData() map[string]any

SchemaData returns a shallow copy ONLY of the defined record schema fields data.

func (*Record) Set added in v0.8.0

func (m *Record) Set(key string, value any)

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 added in v0.8.0

func (m *Record) SetEmail(email string) error

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 added in v0.8.0

func (m *Record) SetEmailVisibility(visible bool) error

SetEmailVisibility sets the "emailVisibility" auth record data value.

Returns an error if the record is not from an auth collection.

func (*Record) SetExpand

func (m *Record) SetExpand(expand map[string]any)

SetExpand shallow copies the provided data to the current Record model's expand.

func (*Record) SetLastResetSentAt added in v0.8.0

func (m *Record) SetLastResetSentAt(dateTime types.DateTime) error

SetLastResetSentAt sets the "lastResentSentAt" auth record data value.

Returns an error if the record is not from an auth collection.

func (*Record) SetLastVerificationSentAt added in v0.8.0

func (m *Record) SetLastVerificationSentAt(dateTime types.DateTime) error

SetLastVerificationSentAt sets an "lastVerificationSentAt" auth record data value.

Returns an error if the record is not from an auth collection.

func (*Record) SetPassword added in v0.8.0

func (m *Record) SetPassword(password string) error

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 added in v0.8.0

func (m *Record) SetTokenKey(key string) error

SetTokenKey sets the "tokenKey" auth record data value.

Returns an error if the record is not from an auth collection.

func (*Record) SetUsername added in v0.8.0

func (m *Record) SetUsername(username string) error

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 added in v0.8.0

func (m *Record) SetVerified(verified bool) error

SetVerified sets the "verified" auth record data value.

Returns an error if the record is not from an auth collection.

func (*Record) TableName

func (m *Record) TableName() string

TableName returns the table name associated to the current Record model.

func (*Record) TokenKey added in v0.8.0

func (m *Record) TokenKey() string

TokenKey returns the "tokenKey" auth record data value.

func (*Record) UnknownData added in v0.8.0

func (m *Record) UnknownData() map[string]any

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

func (m *Record) UnmarshalJSON(data []byte) error

UnmarshalJSON implements the json.Unmarshaler interface.

func (*Record) UnmarshalJSONField added in v0.8.0

func (m *Record) UnmarshalJSONField(key string, result any) error

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) Username added in v0.8.0

func (m *Record) Username() string

Username returns the "username" auth record data value.

func (*Record) ValidatePassword added in v0.8.0

func (m *Record) ValidatePassword(password string) bool

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) Verified added in v0.8.0

func (m *Record) Verified() bool

Verified returns the "verified" auth record data value.

func (*Record) WithUnkownData added in v0.8.0

func (m *Record) WithUnkownData(state bool)

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"`
}

func (*Request) TableName

func (m *Request) TableName() string

type RequestData added in v0.8.0

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.

func (*RequestData) HasModifierDataKeys added in v0.11.0

func (r *RequestData) HasModifierDataKeys() bool

HasModifierDataKeys loosely checks if the current struct has any modifier Data keys.

Directories

Path Synopsis
Package schema implements custom Schema and SchemaField datatypes for handling the Collection schema definitions.
Package schema implements custom Schema and SchemaField datatypes for handling the Collection schema definitions.

Jump to

Keyboard shortcuts

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