Files
terminal/server/repository/user_department.go
T

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
}