Feat: update db model can auto update and delete

pull/21/head
zijiren233 3 years ago
parent 1a7757802a
commit f182a5a955

@ -99,7 +99,7 @@ func HasPermission(roomID uint, userID uint, permission model.Permission) (bool,
} }
func DeleteRoomByID(roomID uint) error { func DeleteRoomByID(roomID uint) error {
err := db.Where("id = ?", roomID).Delete(&model.Room{}).Error err := db.Unscoped().Delete(&model.Room{}, roomID).Error
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) { if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
return errors.New("room not found") return errors.New("room not found")
} }

@ -64,7 +64,7 @@ func GetUsersByRoomID(roomID uint) ([]model.User, error) {
} }
func DeleteUserByID(userID uint) error { func DeleteUserByID(userID uint) error {
err := db.Where("id = ?", userID).Delete(&model.User{}).Error err := db.Unscoped().Delete(&model.User{}, userID).Error
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
return errors.New("user not found") return errors.New("user not found")
} }
@ -73,7 +73,7 @@ func DeleteUserByID(userID uint) error {
func LoadAndDeleteUserByID(userID uint, columns ...clause.Column) (*model.User, error) { func LoadAndDeleteUserByID(userID uint, columns ...clause.Column) (*model.User, error) {
u := &model.User{} u := &model.User{}
err := db.Clauses(clause.Returning{Columns: columns}).Where("id = ?", userID).Delete(u).Error err := db.Unscoped().Clauses(clause.Returning{Columns: columns}).Delete(u, userID).Error
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
return u, errors.New("user not found") return u, errors.New("user not found")
} }
@ -81,7 +81,7 @@ func LoadAndDeleteUserByID(userID uint, columns ...clause.Column) (*model.User,
} }
func DeleteUserByUsername(username string) error { func DeleteUserByUsername(username string) error {
err := db.Where("username = ?", username).Delete(&model.User{}).Error err := db.Unscoped().Where("username = ?", username).Delete(&model.User{}).Error
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
return errors.New("user not found") return errors.New("user not found")
} }
@ -90,7 +90,7 @@ func DeleteUserByUsername(username string) error {
func LoadAndDeleteUserByUsername(username string, columns ...clause.Column) (*model.User, error) { func LoadAndDeleteUserByUsername(username string, columns ...clause.Column) (*model.User, error) {
u := &model.User{} u := &model.User{}
err := db.Clauses(clause.Returning{Columns: columns}).Where("username = ?", username).Delete(u).Error err := db.Unscoped().Clauses(clause.Returning{Columns: columns}).Where("username = ?", username).Delete(u).Error
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
return u, errors.New("user not found") return u, errors.New("user not found")
} }

@ -6,6 +6,7 @@ type Movie struct {
gorm.Model gorm.Model
Position uint `gorm:"not null"` Position uint `gorm:"not null"`
RoomID uint `gorm:"not null;index"` RoomID uint `gorm:"not null;index"`
Room Room `gorm:"foreignKey:RoomID"`
MovieInfo `gorm:"embedded"` MovieInfo `gorm:"embedded"`
} }
@ -13,7 +14,6 @@ type MovieInfo struct {
BaseMovieInfo `gorm:"embedded"` BaseMovieInfo `gorm:"embedded"`
PullKey string `gorm:"varchar(128)" json:"pullKey"` PullKey string `gorm:"varchar(128)" json:"pullKey"`
CreatorID uint `gorm:"not null;index" json:"creatorId"` CreatorID uint `gorm:"not null;index" json:"creatorId"`
Creator User `gorm:"foreignKey:CreatorID" json:"creator"`
} }
type BaseMovieInfo struct { type BaseMovieInfo struct {

@ -10,11 +10,11 @@ type Room struct {
gorm.Model gorm.Model
Name string `gorm:"not null;uniqueIndex;varchar(32)"` Name string `gorm:"not null;uniqueIndex;varchar(32)"`
Setting Setting
CreatorID uint `gorm:"not null;index"` CreatorID uint `gorm:"index"`
Creator User `gorm:"foreignKey:CreatorID"` Creator User `gorm:"foreignKey:CreatorID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"`
HashedPassword []byte HashedPassword []byte
GroupUserRelations []RoomUserRelation `gorm:"foreignKey:RoomID"` GroupUserRelations []RoomUserRelation `gorm:"foreignKey:RoomID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
Movies []Movie `gorm:"foreignKey:RoomID"` Movies []Movie `gorm:"foreignKey:RoomID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
} }
func (r *Room) CheckPassword(password string) bool { func (r *Room) CheckPassword(password string) bool {

@ -10,7 +10,8 @@ type User struct {
gorm.Model gorm.Model
Username string `gorm:"not null;uniqueIndex;varchar(32)"` Username string `gorm:"not null;uniqueIndex;varchar(32)"`
HashedPassword []byte HashedPassword []byte
GroupUserRelations []RoomUserRelation `gorm:"foreignKey:UserID"` GroupUserRelations []RoomUserRelation `gorm:"foreignKey:UserID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
Movies []Movie `gorm:"foreignKey:CreatorID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"`
} }
func (u *User) CheckPassword(password string) bool { func (u *User) CheckPassword(password string) bool {

Loading…
Cancel
Save