هذا الالتزام موجود في:
Thomas Miceli
2023-03-14 23:26:39 +01:00
الأصل 8630f647c6
التزام 1607d8fc93
9 ملفات معدلة مع 235 إضافات و86 حذوفات

عرض الملف

@@ -16,10 +16,13 @@ type Gist struct {
User User `validate:"-"`
NbFiles int
NbLikes int
NbForks int
CreatedAt int64
UpdatedAt int64
Likes []User `gorm:"many2many:likes;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
Likes []User `gorm:"many2many:likes;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
Forked *Gist `gorm:"foreignKey:ForkedID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"`
ForkedID uint
Files []File `gorm:"-" validate:"min=1,dive"`
}
@@ -40,7 +43,7 @@ type Commit struct {
func GetGist(user string, gistUuid string) (*Gist, error) {
gist := new(Gist)
err := db.Preload("User").
err := db.Preload("User").Preload("Forked.User").
Where("gists.uuid = ? AND users.username like ?", gistUuid, user).
Joins("join users on gists.user_id = users.id").
First(&gist).Error
@@ -50,7 +53,7 @@ func GetGist(user string, gistUuid string) (*Gist, error) {
func GetGistByID(gistId string) (*Gist, error) {
gist := new(Gist)
err := db.Preload("User").
err := db.Preload("User").Preload("Forked.User").
Where("gists.id = ?", gistId).
First(&gist).Error
@@ -59,7 +62,7 @@ func GetGistByID(gistId string) (*Gist, error) {
func GetAllGistsForCurrentUser(currentUserId uint, offset int, sort string, order string) ([]*Gist, error) {
var gists []*Gist
err := db.Preload("User").
err := db.Preload("User").Preload("Forked.User").
Where("gists.private = 0 or gists.user_id = ?", currentUserId).
Limit(11).
Offset(offset * 10).
@@ -82,7 +85,7 @@ func GetAllGists(offset int) ([]*Gist, error) {
func GetAllGistsFromUser(fromUser string, currentUserId uint, offset int, sort string, order string) ([]*Gist, error) {
var gists []*Gist
err := db.Preload("User").
err := db.Preload("User").Preload("Forked.User").
Where("users.username = ? and ((gists.private = 0) or (gists.private = 1 and gists.user_id = ?))", fromUser, currentUserId).
Joins("join users on gists.user_id = users.id").
Limit(11).
@@ -94,11 +97,16 @@ func GetAllGistsFromUser(fromUser string, currentUserId uint, offset int, sort s
}
func CreateGist(gist *Gist) error {
// avoids foreign key constraint error because the default value in the struct is 0
return db.Omit("forked_id").Create(&gist).Error
}
func CreateForkedGist(gist *Gist) error {
return db.Create(&gist).Error
}
func UpdateGist(gist *Gist) error {
return db.Save(&gist).Error
return db.Omit("forked_id").Save(&gist).Error
}
func DeleteGist(gist *Gist) error {
@@ -112,16 +120,40 @@ func GistLastActiveNow(gistID uint) error {
}
func AppendUserLike(gist *Gist, user *User) error {
db.Model(&gist).Omit("updated_at").Update("nb_likes", gist.NbLikes+1)
err := db.Model(&gist).Omit("updated_at").Update("nb_likes", gist.NbLikes+1).Error
if err != nil {
return err
}
return db.Model(&gist).Omit("updated_at").Association("Likes").Append(user)
}
func RemoveUserLike(gist *Gist, user *User) error {
db.Model(&gist).Omit("updated_at").Update("nb_likes", gist.NbLikes-1)
err := db.Model(&gist).Omit("updated_at").Update("nb_likes", gist.NbLikes-1).Error
if err != nil {
return err
}
return db.Model(&gist).Omit("updated_at").Association("Likes").Delete(user)
}
func GetUsersLikesForGists(gist *Gist, offset int) ([]*User, error) {
func IncrementGistForkCount(gist *Gist) error {
return db.Model(&gist).Omit("updated_at").Update("nb_forks", gist.NbForks+1).Error
}
func DecrementGistForkCount(gist *Gist) error {
return db.Model(&gist).Omit("updated_at").Update("nb_forks", gist.NbForks-1).Error
}
func GetForkedGist(gist *Gist, user *User) (*Gist, error) {
fork := new(Gist)
err := db.Preload("User").
Where("forked_id = ? and user_id = ?", gist.ID, user.ID).
First(&fork).Error
return fork, err
}
func GetUsersLikesForGist(gist *Gist, offset int) ([]*User, error) {
var users []*User
err := db.Model(&gist).
Where("gist_id = ?", gist.ID).
@@ -131,6 +163,19 @@ func GetUsersLikesForGists(gist *Gist, offset int) ([]*User, error) {
return users, err
}
func GetUsersForksForGist(gist *Gist, currentUserId uint, offset int) ([]*Gist, error) {
var gists []*Gist
err := db.Model(&gist).Preload("User").
Where("forked_id = ?", gist.ID).
Where("(gists.private = 0) or (gists.private = 1 and gists.user_id = ?)", currentUserId).
Limit(11).
Offset(offset * 10).
Order("updated_at desc").
Find(&gists).Error
return gists, err
}
func UserCanWrite(user *User, gist *Gist) bool {
return !(user == nil) && (gist.UserID == user.ID)
}