models

package
v0.0.2 Latest Latest
Warning

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

Go to latest
Published: Mar 5, 2020 License: MIT Imports: 8 Imported by: 0

Documentation

Index

Constants

View Source
const (
	SexFemale = iota
	SexMale
	SexViolate
	SexUnspecified = -1

	StatusStandardValid   = 1
	StatusStandardInvalid = 0
	StatusMaskValid       = 1
	StatusMaskBlocked     = 0x00008000

	RoleGuest     = "guest"
	RoleUser      = "user"
	RoleAdvanced  = "adv"
	RolePowered   = "power"
	RoleVIP       = "vip"
	RoleAdmin     = "admin"
	RoleDeveloper = "developer"
	RoleImUser    = "im.c.user"
	RoleImAdmin   = "im.admin"
	RoleCMSUser   = "cms.user"
	RoleCMSPoster = "cms.poster"
	RoleCMSEditor = "cms.editor"
	RoleCMSAdmin  = "cms.admin"

	BackendAdminModulo    = 100
	BackendAdminRemainder = 99

	UniqueIdLength = 24

	// System Robot 是一个特殊用户:系统机器人
	// SR 总是任一用户的好友,它无需出现在用户的好友列表显示中,也无需被存储一条关系记录。
	// SR 总是任一会话中的成员。
	// SR 总是任一用户的任一联系人群组中的成员。
	// 因此:
	//   - 一个用户总是能够与一个虚拟账户进行对话交互,通过一个会话或空白的会话、通过一个群组中的群发。
	SystemBotId        = 25
	SystemBotLoginName = "sys-robot"
	SystemBotUnique    = "BP.RPJqFachbQzrBTK//LwVS"

	// Topic 中的全部 Members
	AllMembers = 0

	// 0:normal-user, 1: iot-device, 2: robot
	UserTypeNormal        = 0
	UserTypeSpecial       = 1
	UserTypeSpecialMask   = 1
	UserTypeIoTMask       = 2
	UserTypeBotMask       = 4
	UserTypeOrgBotMask    = 8
	UserTypeTopicBotMask  = 16
	UserTypeAppBotMask    = 32
	UserTypeHookBotMask   = 64
	UserTypeFilterBotMask = 128

	DefaultVersion     = "β"
	DefaultLocale      = "zh_CN"
	DefaultLanguage    = "zh-cn"
	DefaultTimezone    = "+0800"
	UTCTimezone        = "+0000"
	DefaultChannel     = "cms"
	DefaultNilTimeNano = -6795364578871345152 // =DefaultNilTime
)
View Source
const (
	CGUnsorted = "Unsorted"
	CGHome     = "Home"
	CGOffice   = "Office"
	CGWork     = "Work"
	CGFriends  = "Friends"
	CGMates    = "Mates"
)

Variables

View Source
var DefaultGenerator = &Generator{}
View Source
var (
	DefaultNilTime time.Time
)

Functions

This section is empty.

Types

type BaseModel

type BaseModel struct {
	Id        uint64     `gorm:"primary_key" xorm:"pk autoincr"`
	CreatedAt time.Time  `gorm:"type:timestamp(6)" xorm:"created"`
	UpdatedAt time.Time  `gorm:"type:timestamp(6)" xorm:"updated"`
	DeletedAt *time.Time `gorm:"type:timestamp(6)" xorm:"deleted" sql:"index" json:"-"` // `sql:"index"`
	Limit     int        `gorm:"-" xorm:"-" json:"-"`
	Offset    int        `gorm:"-" xorm:"-" json:"-"`
	SortBy    string     `gorm:"-" xorm:"-" json:"-"`
}

BaseModel == gorm.Model

type BasicResp

type BasicResp struct {
	Status bool
	Msg    string
	Count  int
}

type BxModel

type BxModel struct {
	Id        uint64    `gorm:"primary_key" xorm:"pk autoincr"`
	CreatedAt time.Time `gorm:"type:timestamp(6)" xorm:"created"`
	UpdatedAt time.Time `gorm:"type:timestamp(6)" xorm:"updated"`
}

BxModel == gorm.Model - DeletedAt

type Circle

type Circle struct {
	gorm.Model
	Pid     uint64 `gorm:"not null;default:0" xorm:"bigint notnull default 0"`
	UserId  uint64 `gorm:"not null;default:0" xorm:"bigint notnull default 0"`
	Header  string `gorm:"null;type:varchar(128)" xorm:"varchar(128) null"`
	Title   string `gorm:"null;type:varchar(128)" xorm:"varchar(128) null"`
	Content string `gorm:"null;type:text" xorm:"text null"`
	Footer  string `gorm:"null;type:text" xorm:"text null"`
	HeadUrl string `gorm:"null;type:text" xorm:"text null"`
	Remarks string `gorm:"null;type:text" xorm:"text null"`
}

func (Circle) TableName

func (Circle) TableName() string

type CircleImage

type CircleImage struct {
	BaseModel
	CircleId  uint64 `gorm:"not null;default:0;column:cid" xorm:"bigint notnull default 0 'cid'"`
	UserId    uint64 `gorm:"not null;default:0;column:uid" xorm:"bigint notnull default 0 'uid'"`
	BaseName  string `gorm:"null;type:text" xorm:"text null"`
	Mime      string `gorm:"null;type:text" xorm:"text null"`
	Size      int64  `gorm:"not null;default:0" xorm:"bigint notnull default 0"`
	LocalPath string `gorm:"null;type:text" xorm:"text null"`
	Url       string `gorm:"null;type:text" xorm:"text null"`
}

func (CircleImage) TableName

func (CircleImage) TableName() string

type Contact

type Contact struct {
	Id          uint64 `gorm:"primary_key" xorm:"pk autoincr"`
	Uid         uint64 `xorm:"bigint null index 'uid'"` // linked user id
	Nickname    string `xorm:"varchar(64) null"`
	FullName    string `xorm:"varchar(64) null"`
	Title       string `xorm:"varchar(64) null 'title'"` //
	OrgName     string `xorm:"varchar(128) null"`        //
	Avatar      string `xorm:"text null"`                //
	Tags        string `xorm:"text null"`                //
	Signature   string `xorm:"text null"`                //
	Slogan      string `xorm:"text null"`                //
	Type        int32  `xorm:"int default 0"`            // 0:normal-user, 1: iot-device, 2: robot
	Tel         string `xorm:"varchar(64) null"`
	TelFor      string `xorm:"varchar(16) null"`
	Email       string `xorm:"varchar(64) null"`
	EmailFor    string `xorm:"varchar(16) null"`
	Tel1        string `xorm:"varchar(64) null"`
	Tel1For     string `xorm:"varchar(16) null"`
	Email1      string `xorm:"varchar(64) null"`
	Email1For   string `xorm:"varchar(16) null"`
	Tel2        string `xorm:"varchar(64) null"`
	Tel2For     string `xorm:"varchar(16) null"`
	Email2      string `xorm:"varchar(64) null"`
	Email2For   string `xorm:"varchar(16) null"`
	FromSrc     string `xorm:"varchar(64) null"` // 通过手机通讯录、通过搜索方式添加的联系人
	FromRemarks string `xorm:"text null"`        //
	// Avatar        string    `xorm:"text"`                              // avatar
	// Gender           int16     `xorm:"smallint null default -1"`          // gender: 1=male, 0=female, 2=violated, -1=not specified
	// Birthday      string    `xorm:"varchar(32) null"`                  // valid formats: yyyy-MM-dd, yyyy, yyyy-MM
	// Country       string    `xorm:"varchar(64) null"`                  //
	// State      string    `xorm:"varchar(64) null"`                  //
	// City          string    `xorm:"varchar(64) null"`                  //
	// Lang          string    `xorm:"varchar(64) null default 'zh-cn'"`  // user's primary language
	// Tz            string    `xorm:"varchar(64) null default '+00:00'"` // user's primary TimeZone
	// GivenName     string    `xorm:"varchar(64) null"`                  // Given Name
	// GivenMobile   string    `xorm:"varchar(64) null"`                  // Qualified Cell Number
	// GivenSn       string    `xorm:"varchar(64) null"`                  // social number, idcard number, after authenticated
	CreatedAt     time.Time `xorm:"created"`   // `xorm:"timestamp(6)"` // `xorm:"created"`
	UpdatedAt     time.Time `xorm:"updated"`   // `xorm:"timestamp(6)"` // `xorm:"updated"`
	DeletedAt     time.Time `xorm:"deleted"`   // `xorm:"datetime(6)"` // `xorm:"deleted"`
	Remarks       string    `xorm:"text null"` //
	ImportRemarks string    `xorm:"text null"` //
}

Contact 一个 User 的附加信息,其人的联系人属性

func (*Contact) TableName

func (r *Contact) TableName() string

type ContactGroup

type ContactGroup struct {
	Id        uint64    `gorm:"primary_key" xorm:"pk autoincr"`
	UidOwner  uint64    `xorm:"bigint not null default 0 index"` // 属于给定用户
	Name      string    `xorm:"varchar(64) null"`                // 分组名称: Unsorted/Home/Work/Office/Friends/Mates 为预置名称,注意显示时自行转换为用户语言
	CreatedAt time.Time `xorm:"created"`                         // `xorm:"timestamp(6)"` // `xorm:"created"`
	UpdatedAt time.Time `xorm:"updated"`                         // `xorm:"timestamp(6)"` // `xorm:"updated"`
	DeletedAt time.Time `xorm:"deleted"`                         // `xorm:"datetime(6)"` // `xorm:"deleted"`
}
type ContactLinks struct {
	// Id        int64
	Uid       uint64 `xorm:"bigint pk"` // 属于给定用户
	LinkId    uint64 `xorm:"bigint pk"` // 链接标识
	ContactId uint64 `xorm:"bigint pk"` // 被链接的联系人
}

多个联系人可以被一个 linkId 链接在一起,相当于联系人合并效果。 用户也可以通过将两个联系人硬合并为一条联系人记录。 硬合并:如果多个联系人有多个 linkedUid 指向,则合并不应该被继续。此时交给重叠用户模块去处理。 注意:硬合并时不使用DeleteAt软删除方式。

type ContactRelation

type ContactRelation struct {
	Gid           uint64    `xorm:"bigint pk notnull"`               // user's contact group id // 联系人分组
	Cid           uint64    `xorm:"bigint pk notnull"`               // contact id // 联系人
	UidOwner      uint64    `xorm:"bigint not null default 0 index"` // 等同于 ContactGroup.Uid // 属于给定用户 (冗余)
	RelationShip  int       `xorm:"int default 0"`                   // b0: normal/xx; b1: spec; b7: blacklist; ... // 关系:0-标准, 1-特别关心,127-黑名单
	RemarkName    string    `xorm:"varchar(64) null"`
	RemarkTitle   string    `xorm:"varchar(64) null"`
	RemarkOrgName string    `xorm:"varchar(128) null"`
	RemarkMobile  string    `xorm:"varchar(64) null"`
	RemarkEmail   string    `xorm:"varchar(64) null"`
	RemarkAvatar  string    `xorm:"text null"`
	RemarkTags    string    `xorm:"text null"`
	Remarks       string    `xorm:"text null"`
	CreatedAt     time.Time `xorm:"created"` // `xorm:"timestamp(6)"` // `xorm:"created"`
	UpdatedAt     time.Time `xorm:"updated"` // `xorm:"timestamp(6)"` // `xorm:"updated"`
	DeletedAt     time.Time `xorm:"deleted"` // `xorm:"datetime(6)"` // `xorm:"deleted"`
}

type GenderType

type GenderType int16
const (
	GenderFemale      GenderType = 0
	GenderMale        GenderType = 1
	GenderViolated    GenderType = 2
	GenderUnspecified GenderType = -1
)

func (GenderType) Parse

func (gt GenderType) Parse(gender string) GenderType

func (GenderType) String

func (gt GenderType) String() string

type Generator

type Generator struct {
}

func (*Generator) Encode

func (r *Generator) Encode(s string) (ret string)

func (*Generator) IsRandomEmail

func (r *Generator) IsRandomEmail(email string) bool

func (*Generator) IsRandomMobile

func (r *Generator) IsRandomMobile(mobile string) bool

func (*Generator) NewPassword

func (r *Generator) NewPassword() string

func (*Generator) NewRandomEmail

func (r *Generator) NewRandomEmail() string

func (*Generator) NewRandomMobile

func (r *Generator) NewRandomMobile() string

func (*Generator) NewRandomString

func (r *Generator) NewRandomString(length int) string

func (*Generator) NewUniqueId

func (r *Generator) NewUniqueId(src string, length int) string

func (*Generator) PasswordMatched

func (r *Generator) PasswordMatched(testPwd, pwdHashInDB string) (matched bool)

type GivenName

type GivenName struct {
	Generator `gorm:"-" xorm:"-"`
	BaseModel
	UserID      uint64
	NameTitle   *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null 'name_title'"` // title
	NameFirst   *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null 'name_first'"` // first-name
	NameMid     *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null 'name_mid'"`   // mid-name
	NameLast    *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null 'name_last'"`  // last-name
	GivenName   *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null"`              // fullname: Given Name
	GivenMobile *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null"`              // Qualified Cell Number
	Description *string    `gorm:"null;type:text" xorm:"text null"`
	Remarks     *string    `gorm:"null;type:text" xorm:"text null"`
	Identities  []Identity `gorm:"many2many:given_name_identities;"`
}

type Identity

type Identity struct {
	Generator `gorm:"-" xorm:"-"`
	BaseModel
	IdentType   string `gorm:"not null;type:varchar(16)" xorm:"varchar(16) not null 'ident_type'"`
	IdentNumber string `gorm:"not null;type:varchar(64)" xorm:"varchar(64) not null"` //
}

type Language

type Language struct {
	BaseModel
	Name string `gorm:"not null;type:varchar(64);unique_index" xorm:"varchar(64) not null"` //

}
db.Model(&user).Related(&languages, "Languages")

//// SELECT * FROM "languages" INNER JOIN "user_languages" ON "user_languages"."language_id" = "languages"."id" WHERE "user_languages"."user_id" = 111

type Location

type Location struct {
	Generator `gorm:"-" xorm:"-"`
	BaseModel
	Country       *string `gorm:"null;type:varchar(64)" xorm:"varchar(64) null"`   //
	State         *string `gorm:"null;type:varchar(64)" xorm:"varchar(64) null"`   //
	City          *string `gorm:"null;type:varchar(64)" xorm:"varchar(64) null"`   //
	Street        *string `gorm:"null;type:varchar(128)" xorm:"varchar(128) null"` //
	PostCode      *string `gorm:"null;type:varchar(32)" xorm:"varchar(32) null"`   //
	Latitude      float32 `gorm:"not null;default:0"`                              //
	Longitude     float32 `gorm:"not null;default:0"`                              //
	TzOffset      int     `gorm:"not null;default:0""`
	TzDescription *string `gorm:"null;type:varchar(64)" xorm:"varchar(64) null"` //
	Remarks       *string `gorm:"null;type:text" xorm:"text null"`
	Title         *string `gorm:"null;type:varchar(64)" xorm:"varchar(64) null"` //
	Description   *string `gorm:"null;type:text" xorm:"text null"`
}

type NormalUser

type NormalUser struct {
	*User
	Password bool `json:",omitempty"`
	Roles    bool `json:",omitempty"`
	// Limit         bool `json:",omitempty"`
	// Offset        bool `json:",omitempty"`
	// SortBy        bool `json:",omitempty"`
	Status        bool `json:",omitempty"`
	Salt          bool `json:",omitempty"`
	Ip            bool `json:",omitempty"`
	PlatId        bool `json:",omitempty"`
	UserId        bool `json:",omitempty"`
	Openid        bool `json:",omitempty"`
	Unionid       bool `json:",omitempty"`
	Blocked       bool `json:",omitempty"`
	Forbidden     bool `json:",omitempty"`
	ImportRemarks bool `json:",omitempty"`
	Privilege     bool `json:",omitempty"`
	JsonProfile   bool `json:",omitempty"`
}

type Role

type Role struct {
	// BaseModel
	Id       uint64 // `xorm:"pk autoincr"`
	RoleName string `xorm:"varchar(64) notnull unique"`
	RoleDesc string `xorm:"varchar(256) null unique"`
	Remarks  string `gorm:"null;type:text" xorm:"text null"`
}

type User

type User struct {
	Generator `gorm:"-" xorm:"-"`
	BaseModel
	Roles         []string   `gorm:"-" xorm:"-" json:"-"`
	Token         string     `gorm:"-" xorm:"-"`
	LoginName     string     `gorm:"type:varchar(64);default:'';unique_index" xorm:"varchar(64) not null"`
	Cell          string     `gorm:"type:varchar(64);default:'';unique_index" xorm:"varchar(64) not null"`
	Email         string     `gorm:"type:varchar(64);default:'';unique_index" xorm:"varchar(64) not null"`
	Nickname      *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null"`
	FullName      *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null 'full_name'"`
	Avatar        *string    `gorm:"null;type:text" xorm:"text"`
	AvatarMedium  *string    `gorm:"null;type:text" xorm:"text"`
	AvatarLarge   *string    `gorm:"null;type:text" xorm:"text"`
	Gender        GenderType `gorm:"not null;default:0" xorm:"smallint null default -1"` // gender: 1=male, 0=female, 2=violated, -1=not specified
	IdentType     *string    `gorm:"null;type:varchar(16)" xorm:"varchar(16) null 'name_last'"`
	IdentNumber   *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null"` //
	Birthday      *string    `gorm:"null;type:varchar(32)" xorm:"varchar(32) null"` // valid formats: yyyy-MM-dd, yyyy, yyyy-MM
	Phone         *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null 'name_last'"`
	Nationalities *string    `gorm:"null;type:varchar(16)" xorm:"varchar(16) null"`       //
	LocationId    uint64     `gorm:"not null;default:0" xorm:"bigint not null default 0"` // the exact location about this user.
	Country       *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null"`       // country,state,city,street for fast displaying
	State         *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null"`
	City          *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null"`
	Street        *string    `gorm:"null;type:varchar(128)" xorm:"varchar(128) null"`
	Lang          string     `gorm:"not null;type:varchar(64);default:'zh-cn'" xorm:"varchar(64) null default 'zh-cn'"` // user's primary language
	Tz            string     `gorm:"not null;type:varchar(64);default:'+0000'" xorm:"varchar(64) null default '+0000'"` // user's primary TimeZone
	StatusLine    *string    `gorm:"null;type:varchar(32)" xorm:"varchar(64) null"`
	TitleLine     *string    `gorm:"null;type:varchar(32)" xorm:"varchar(64) null"`
	SloganLine    *string    `gorm:"null;type:varchar(80)" xorm:"varchar(64) null"`
	DescLine      *string    `gorm:"null;type:varchar(80)" xorm:"varchar(64) null"`
	Type          int        `gorm:"not null;default:0" xorm:"int not null default 0"` // OLD: 用户类型(人,设备,机器人...) // 0:normal-user, 1: iot-device, 2: robot
	Status        int        `gorm:"not null;default:1" xorm:"int not null default 1"` // // bit0: valid(1), invalid(0); bit3: forbidden; bit4: blocked/locked; bit 5: waiting invoke
	Password      string     `gorm:"not null;type:varchar(64)" xorm:"varchar(64) null"`
	Salt          string     `gorm:"not null;type:varchar(64)" xorm:"varchar(64) null"`       //
	Ip            *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null"`           //
	UniqueId      string     `gorm:"not null;type:varchar(64)" xorm:"varchar(64) null"`       // internal unique id about this user
	Channel       string     `gorm:"not null;type:varchar(64)" xorm:"varchar(64) null"`       // channel: cms, im, webui, android, ios, mswin, linux, macos, ...
	PlatId        uint64     `gorm:"not null;default:0" xorm:"bigint not null default 0"`     // platform-id:
	UserId        uint64     `gorm:"not null;default:0" xorm:"bigint not null default 0"`     // 3rd-party platform user id. never used.
	Openid        *string    `gorm:"null;type:varchar(128)" xorm:"varchar(128) null"`         // wechat
	Unionid       *string    `gorm:"null;type:varchar(128)" xorm:"varchar(128) null"`         // alipay
	Blocked       bool       `gorm:"not null;default:0" xorm:"tinyint(1) not null default 0"` // NEVER USED. blocked/locked, == status==-2
	Forbidden     bool       `gorm:"not null;default:0" xorm:"tinyint(1) not null default 0"` // NEVER USED. forbidden, == status==-1
	Remarks       *string    `gorm:"null;type:text" xorm:"text null"`
	ImportRemarks *string    `gorm:"null;type:text" xorm:"text null"`
	InvokeStatus  bool       `gorm:"not null;default:0" xorm:"tinyint(1) not null default 0"` // 以下备用 // invoked grants by 3rd-party login module: yes(1) or no(0)
	Privilege     *string    `gorm:"null;type:varchar(64)" xorm:"varchar(64) null"`           // 以下备用 // comma splitted roles, from 3rd-party module
	JsonProfile   *string    `gorm:"null;type:text" xorm:"text null"`                         // 以下备用

	Languages  []Language `gorm:"many2many:user_languages;"`
	Locations  []Location `gorm:"many2many:user_locations;"`
	Identities []Identity `gorm:"many2many:user_identities;"`
	GivenName  GivenName  `gorm:"one2many:user_given_name;"`
}

func (*User) AfterUpdate

func (r *User) AfterUpdate(scope *gorm.Scope)

func (*User) Age

func (r *User) Age() int32

func (*User) BeforeCreate

func (r *User) BeforeCreate()

func (*User) BeforeInsert

func (r *User) BeforeInsert()

func (*User) DisplayName

func (r *User) DisplayName() (ret string)

func (*User) IsAppBot

func (r *User) IsAppBot() bool

func (*User) IsBot

func (r *User) IsBot() bool

func (*User) IsFilterBot

func (r *User) IsFilterBot() bool

func (*User) IsHookBot

func (r *User) IsHookBot() bool

func (*User) IsIoTDevice

func (r *User) IsIoTDevice() bool

func (*User) IsNormal

func (r *User) IsNormal() bool

func (*User) IsOrgBot

func (r *User) IsOrgBot() bool

func (*User) IsPasswordMatched

func (r *User) IsPasswordMatched(testPwd string) bool

func (*User) IsRandomEmail

func (r *User) IsRandomEmail() bool

func (*User) IsRandomLoginName

func (r *User) IsRandomLoginName() bool

func (*User) IsRandomMobile

func (r *User) IsRandomMobile() bool

func (*User) IsSpecial

func (r *User) IsSpecial() bool

func (*User) IsTopicBot

func (r *User) IsTopicBot() bool

func (*User) NewEncodePwd

func (r *User) NewEncodePwd()

func (*User) NewUniqueId

func (r *User) NewUniqueId()

type UserDevice

type UserDevice struct {
	Id            int64
	Uid           int64     `xorm:"bigint index"`
	SystemOs      string    `xorm:"varchar(64) null"`
	SystemVersion string    `xorm:"varchar(64) null"`
	Model         string    `xorm:"varchar(64) null"`
	Nickname      string    `xorm:"varchar(64) null"`
	Unique        string    `xorm:"varchar(128) not null unique 'uniq'"`
	CreatedAt     time.Time `xorm:"created"` // `xorm:"timestamp(6)"` // `xorm:"created"`
	UpdatedAt     time.Time `xorm:"updated"` // `xorm:"timestamp(6)"` // `xorm:"updated"`
	DeletedAt     time.Time `xorm:"deleted"` // `xorm:"datetime(6)"` // `xorm:"deleted"`
	Remarks       string    `xorm:"text null"`
	ImportRemarks string    `xorm:"text null"`
}

type UserRole

type UserRole struct {
	UserId uint64 `xorm:"bigint pk 'user_id'"`
	RoleId uint64 `xorm:"bigint pk 'role_id'"`
}

Jump to

Keyboard shortcuts

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