package repository import ( "context" "next-terminal/server/model" ) var UserDepartmentRepository = new(userDepartmentRepository) type userDepartmentRepository struct { baseRepository } func (r userDepartmentRepository) FindByUserId(c context.Context, userId string) (o []model.UserDepartmentRef, err error) { err = r.GetDB(c).Where("user_id = ?", userId).Find(&o).Error return } func (r userDepartmentRepository) FindByDepartmentId(c context.Context, departmentId string) (o []model.UserDepartmentRef, err error) { err = r.GetDB(c).Where("department_id = ?", departmentId).Find(&o).Error return } func (r userDepartmentRepository) FindUsersByDepartmentId(c context.Context, departmentId string) (userIds []string, err error) { var refs []model.UserDepartmentRef err = r.GetDB(c).Where("department_id = ?", departmentId).Find(&refs).Error if err != nil { return } for _, ref := range refs { userIds = append(userIds, ref.UserId) } return } func (r userDepartmentRepository) SaveUserDepartments(c context.Context, userId string, departmentIds []string) error { tx := r.GetDB(c).Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() if err := tx.Where("user_id = ?", userId).Delete(&model.UserDepartmentRef{}).Error; err != nil { tx.Rollback() return err } for _, deptId := range departmentIds { ref := model.UserDepartmentRef{ UserId: userId, DepartmentId: deptId, } if err := tx.Create(&ref).Error; err != nil { tx.Rollback() return err } } return tx.Commit().Error } func (r userDepartmentRepository) SaveDepartmentUsers(c context.Context, departmentId string, userIds []string) error { tx := r.GetDB(c).Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() if err := tx.Where("department_id = ?", departmentId).Delete(&model.UserDepartmentRef{}).Error; err != nil { tx.Rollback() return err } for _, userId := range userIds { ref := model.UserDepartmentRef{ UserId: userId, DepartmentId: departmentId, } if err := tx.Create(&ref).Error; err != nil { tx.Rollback() return err } } return tx.Commit().Error } func (r userDepartmentRepository) RemoveUsersFromDepartment(c context.Context, departmentId string, userIds []string) error { return r.GetDB(c).Where("department_id = ? AND user_id IN ?", departmentId, userIds).Delete(&model.UserDepartmentRef{}).Error } func (r userDepartmentRepository) DeleteByUserId(c context.Context, userId string) error { return r.GetDB(c).Where("user_id = ?", userId).Delete(&model.UserDepartmentRef{}).Error } func (r userDepartmentRepository) DeleteByDepartmentId(c context.Context, departmentId string) error { return r.GetDB(c).Where("department_id = ?", departmentId).Delete(&model.UserDepartmentRef{}).Error } func (r userDepartmentRepository) CountByDepartmentId(c context.Context, departmentId string) (total int64, err error) { err = r.GetDB(c).Model(&model.UserDepartmentRef{}).Where("department_id = ?", departmentId).Count(&total).Error return }