Fix: cascade delete user

pull/134/head
zijiren233 11 months ago
parent 97c81edc7c
commit c535cd4296

@ -30,7 +30,7 @@ func InitDatabase(ctx context.Context) (err error) {
TranslateError: true,
Logger: newDBLogger(),
PrepareStmt: true,
DisableForeignKeyConstraintWhenMigrating: true,
DisableForeignKeyConstraintWhenMigrating: false,
IgnoreRelationshipsWhenMigrating: true,
})
d, err := gorm.Open(dialector, opts...)

@ -7,6 +7,7 @@ import (
"github.com/zijiren233/stream"
"golang.org/x/crypto/bcrypt"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
type CreateRoomConfig func(r *model.Room)
@ -20,7 +21,7 @@ func WithSetting(setting model.RoomSettings) CreateRoomConfig {
func WithCreator(creator *model.User) CreateRoomConfig {
return func(r *model.Room) {
r.CreatorID = creator.ID
r.GroupUserRelations = []model.RoomUserRelation{
r.GroupUserRelations = []*model.RoomUserRelation{
{
UserID: creator.ID,
Status: model.RoomUserStatusActive,
@ -30,7 +31,7 @@ func WithCreator(creator *model.User) CreateRoomConfig {
}
}
func WithRelations(relations []model.RoomUserRelation) CreateRoomConfig {
func WithRelations(relations []*model.RoomUserRelation) CreateRoomConfig {
return func(r *model.Room) {
r.GroupUserRelations = append(r.GroupUserRelations, relations...)
}
@ -92,7 +93,7 @@ func SaveRoomSettings(roomID string, setting model.RoomSettings) error {
}
func DeleteRoomByID(roomID string) error {
err := db.Unscoped().Where("id = ?", roomID).Delete(&model.Room{}).Error
err := db.Unscoped().Select(clause.Associations).Delete(&model.Room{ID: roomID}).Error
return HandleNotFound(err, "room")
}

@ -40,7 +40,7 @@ func DeleteSettingItem(item *model.Setting) error {
}
func DeleteSettingItemByName(name string) error {
return db.Where("name = ?", name).Delete(&model.Setting{}).Error
return db.Delete(&model.Setting{Name: name}).Error
}
func GetSettingItemValue(name string) (string, error) {

@ -15,7 +15,7 @@ type dbVersion struct {
Upgrade func(*gorm.DB) error
}
const CurrentVersion = "0.0.5"
const CurrentVersion = "0.0.6"
var models = []any{
new(model.Setting),
@ -56,6 +56,9 @@ var dbVersions = map[string]dbVersion{
NextVersion: "0.0.5",
},
"0.0.5": {
NextVersion: "0.0.6",
},
"0.0.6": {
NextVersion: "",
},
}

@ -296,15 +296,16 @@ func UnbanUserByID(userID string) error {
}
func DeleteUserByID(userID string) error {
err := db.Unscoped().Where("id = ?", userID).Delete(&model.User{}).Error
err := db.Unscoped().Select(clause.Associations).Delete(&model.User{ID: userID}).Error
return HandleNotFound(err, "user")
}
func LoadAndDeleteUserByID(userID string, columns ...clause.Column) (*model.User, error) {
u := &model.User{}
u := &model.User{ID: userID}
if db.Unscoped().
Clauses(clause.Returning{Columns: columns}).
Delete(u, userID).
Select(clause.Associations).
Delete(u).
RowsAffected == 0 {
return u, errors.New("user not found")
}

@ -39,8 +39,8 @@ type Room struct {
Settings RoomSettings `gorm:"embedded;embeddedPrefix:settings_"`
CreatorID string `gorm:"index;type:char(32)"`
HashedPassword []byte
GroupUserRelations []RoomUserRelation `gorm:"foreignKey:RoomID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
Movies []Movie `gorm:"foreignKey:RoomID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
GroupUserRelations []*RoomUserRelation `gorm:"foreignKey:RoomID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
Movies []*Movie `gorm:"foreignKey:RoomID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
}
func (r *Room) BeforeCreate(tx *gorm.DB) error {

@ -50,8 +50,8 @@ type User struct {
Email string `gorm:"type:varchar(128);uniqueIndex:,where:email <> ''"`
Role Role `gorm:"not null;default:2"`
RoomUserRelations []*RoomUserRelation `gorm:"foreignKey:UserID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
Rooms []Room `gorm:"foreignKey:CreatorID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
Movies []Movie `gorm:"foreignKey:CreatorID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"`
Rooms []*Room `gorm:"foreignKey:CreatorID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
Movies []*Movie `gorm:"foreignKey:CreatorID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"`
BilibiliVendor *BilibiliVendor `gorm:"foreignKey:UserID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
AlistVendor []*AlistVendor `gorm:"foreignKey:UserID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
EmbyVendor []*EmbyVendor `gorm:"foreignKey:UserID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`

Loading…
Cancel
Save