Albirew/nyaa-pantsu
Archivé
1
0
Bifurcation 0

Models for User, Role and Comment

modelHelper for getting value from request and apply it to a Form
Getting value from a Form and apply to a Model
Cette révision appartient à :
akuma06 2017-05-06 17:55:02 +02:00
Parent dc050d29fc
révision 148f70b53f
4 fichiers modifiés avec 152 ajouts et 0 suppressions

18
model/comment.go Fichier normal
Voir le fichier

@ -0,0 +1,18 @@
package model
import (
"time"
)
// Comment is a comment model.
type Comment struct {
Id int `json:"id"`
Content string `json:"content"`
UserId int `json:"userId"`
TorrentId int
// LikingCount int `json:"likingCount"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
DeletedAt time.Time `json:"deletedAt"`
User User `json:"user"`
}

8
model/role.go Fichier normal
Voir le fichier

@ -0,0 +1,8 @@
package model
// Role is a role model for user permission.
type Role struct {
Id uint `json:"id"`
Name string `json:"name",sql:"size:255"`
Description string `json:"description",sql:"size:255"`
}

99
model/user.go Fichier normal
Voir le fichier

@ -0,0 +1,99 @@
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"`
// Name string `json:"name",sql:"size:255"`
Username string `json:"username",sql:"size:255;unique"`
// Birthday time.Time `json:"birthday"`
// Gender int8 `json:"gender"`
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"`
// Liking
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;"`
Connections []Connection
Roles []Role `gorm:"many2many:users_roles;"` // Many To Many, users_roles
// Articles []Article
}
// 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"`
Name omit `json:"name,omitempty",sql:"size:255"`
Birthday omit `json:"birthday,omitempty"`
Gender omit `json:"gender,omitempty"`
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"`
Languages omit `json:"languages,omitempty"`
Roles omit `json:"roles,omitempty"`
Articles omit `json:"articles,omitempty"`
}
// 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"`
}

Voir le fichier

@ -0,0 +1,27 @@
package modelHelper
import (
"reflect"
"github.com/dorajistyle/goyangi/util/log"
)
func IsZeroOfUnderlyingType(x interface{}) bool {
return x == reflect.Zero(reflect.TypeOf(x)).Interface()
}
// AssignValue assign form values to model.
func AssignValue(model interface{}, form interface{}) {
modelIndirect := reflect.Indirect(reflect.ValueOf(model))
formElem := reflect.ValueOf(form).Elem()
typeOfTForm := formElem.Type()
for i := 0; i < formElem.NumField(); i++ {
modelField := modelIndirect.FieldByName(typeOfTForm.Field(i).Name)
if modelField.IsValid() {
formField := formElem.Field(i)
modelField.Set(formField)
} else {
log.Warnf("modelField : %s - %s", typeOfTForm.Field(i).Name, modelField)
}
}
}