2017-05-06 17:55:02 +02:00
package model
import (
"time"
)
// omit is the bool type for omitting a field of struct.
type omit bool
// User is a user model
type User struct {
Id uint ` json:"id" `
Email string ` json:"email",sql:"size:255;unique" `
Password string ` json:"password",sql:"size:255" `
Username string ` json:"username",sql:"size:255;unique" `
Description string ` json:"description",sql:"size:100" `
Token string ` json:"token" `
TokenExpiration time . Time ` json:"tokenExperiation" `
// email md5 for gravatar
Md5 string ` json:"md5" `
// admin
Activation bool ` json:"activation" `
PasswordResetToken string ` json:"passwordResetToken" `
ActivationToken string ` json:"activationToken" `
PasswordResetUntil time . Time ` json:"passwordResetUntil" `
ActivateUntil time . Time ` json:"activateUntil" `
ActivatedAt time . Time ` json:"activatedAt" `
CreatedAt time . Time ` json:"createdAt" `
UpdatedAt time . Time ` json:"updatedAt" `
DeletedAt * time . Time ` json:"deletedAt" `
LastLoginAt time . Time ` json:"lastLoginAt" `
CurrentLoginAt time . Time ` json:"currentLoginAt" `
LastLoginIp string ` json:"lastLoginIp",sql:"size:100" `
CurrentLoginIp string ` json:"currentLoginIp",sql:"size:100" `
2017-05-07 00:52:27 +02:00
Status Status ` gorm:"many2one:users_status;" `
2017-05-06 17:55:02 +02:00
// Liking
2017-05-07 00:52:27 +02:00
LikingCount int ` json:"likingCount" `
LikedCount int ` json:"likedCount" `
Likings [ ] User ` gorm:"foreignkey:userId;associationforeignkey:follower_id;many2many:users_followers;" `
Liked [ ] User ` gorm:"foreignkey:follower_id;associationforeignkey:userId;many2many:users_followers;" `
2017-05-06 17:55:02 +02:00
Connections [ ] Connection
2017-05-06 22:17:13 +02:00
2017-05-06 22:14:02 +02:00
Languages [ ] Language ` gorm:"many2many:user_languages;" ` // Many To Many, user_languages is the join table
2017-05-06 17:55:02 +02:00
Roles [ ] Role ` gorm:"many2many:users_roles;" ` // Many To Many, users_roles
2017-05-06 18:09:29 +02:00
Torrents [ ] Torrents
2017-05-06 17:55:02 +02:00
}
// UsersFollowers is a relation table to relate users each other.
type UsersFollowers struct {
UserID uint ` json:"user_id" `
FollowerID uint ` json:"follower_id" `
}
// PublicUser is a public user model that contains only a few information for everyone.
type PublicUser struct {
* User
Email omit ` json:"email,omitempty",sql:"size:255;unique" `
Password omit ` json:"password,omitempty",sql:"size:255" `
Token omit ` json:"token,omitempty" `
TokenExpiration omit ` json:"tokenExperiation,omitempty" `
// admin
Activation omit ` json:"activation,omitempty" `
PasswordResetToken omit ` json:"passwordResetToken,omitempty" `
ActivationToken omit ` json:"activationToken,omitempty" `
PasswordResetUntil omit ` json:"passwordResetUntil,omitempty" `
ActivateUntil omit ` json:"activateUntil,omitempty" `
ActivatedAt omit ` json:"activatedAt,omitempty" `
UpdatedAt omit ` json:"updatedAt,omitempty" `
DeletedAt omit ` json:"deletedAt,omitempty" `
LastLoginAt omit ` json:"lastLoginAt,omitempty" `
CurrentLoginAt omit ` json:"currentLoginAt,omitempty" `
LastLoginIp omit ` json:"lastLoginIp,omitempty",sql:"size:100" `
CurrentLoginIp omit ` json:"currentLoginIp,omitempty",sql:"size:100" `
Connections omit ` json:"connections,omitempty" `
2017-05-06 22:14:02 +02:00
Languages omit ` json:"languages,omitempty" `
2017-05-06 17:55:02 +02:00
Roles omit ` json:"roles,omitempty" `
2017-05-07 00:52:27 +02:00
Torrents omit ` json:"articles,omitempty" ` //should user torrents not be displayed?
2017-05-06 17:55:02 +02:00
}
// Connection is a connection model for oauth.
type Connection struct {
Id uint ` json:"id" `
UserId uint ` json:"userId" `
ProviderId uint ` gorm:"column:provider_id", json:"providerId" `
ProviderUserId string ` gorm:"column:provider_user_id", json:"providerUserId" `
AccessToken string ` json:"accessToken" `
ProfileUrl string ` gorm:"column:profile_url", json:"profileUrl" `
ImageUrl string ` gorm:"column:image_url", json:"imageUrl" `
}