107 lines
3.0 KiB
Go
107 lines
3.0 KiB
Go
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
|
|
}
|