next-terminal/server/repository/authorised.go
2022-10-23 20:05:13 +08:00

168 lines
6.1 KiB
Go

package repository
import (
"context"
"next-terminal/server/dto"
"next-terminal/server/model"
)
var AuthorisedRepository = new(authorisedRepository)
type authorisedRepository struct {
baseRepository
}
func (r authorisedRepository) Create(c context.Context, m *model.Authorised) error {
return r.GetDB(c).Create(m).Error
}
func (r authorisedRepository) CreateInBatches(c context.Context, m []model.Authorised) error {
return r.GetDB(c).CreateInBatches(m, 100).Error
}
func (r authorisedRepository) DeleteByUserId(c context.Context, userId string) error {
return r.GetDB(c).Where("user_id = ?", userId).Delete(model.Authorised{}).Error
}
func (r authorisedRepository) DeleteByUserGroupId(c context.Context, userGroupId string) error {
return r.GetDB(c).Where("user_group_id = ?", userGroupId).Delete(model.Authorised{}).Error
}
func (r authorisedRepository) DeleteByAssetId(c context.Context, assetId string) error {
return r.GetDB(c).Where("asset_id = ?", assetId).Delete(model.Authorised{}).Error
}
func (r authorisedRepository) FindByUserId(c context.Context, userId string) (items []model.Authorised, err error) {
err = r.GetDB(c).Where("user_id = ?", userId).Find(&items).Error
return
}
func (r authorisedRepository) FindById(c context.Context, id string) (item model.Authorised, err error) {
err = r.GetDB(c).Where("id = ?", id).Find(&item).Error
return
}
func (r authorisedRepository) FindByUserGroupId(c context.Context, userGroupId string) (items []model.Authorised, err error) {
err = r.GetDB(c).Where("user_group_id = ?", userGroupId).Find(&items).Error
return
}
func (r authorisedRepository) FindByUserGroupIdIn(c context.Context, userGroupIds []string) (items []model.Authorised, err error) {
err = r.GetDB(c).Where("user_group_id in ?", userGroupIds).Find(&items).Error
return
}
func (r authorisedRepository) FindAll(c context.Context, userId, userGroupId, assetId string) (items []model.Authorised, err error) {
db := r.GetDB(c)
if userId != "" {
db = db.Where("user_id = ?", userId)
}
if userGroupId != "" {
db = db.Where("user_group_id = ?", userGroupId)
}
if assetId != "" {
db = db.Where("asset_id = ?", assetId)
}
err = db.Find(&items).Error
return
}
func (r authorisedRepository) FindAssetPage(c context.Context, pageIndex, pageSize int, assetName, userId, userGroupId string) (o []dto.AssetPageForAuthorised, total int64, err error) {
db := r.GetDB(c).Table("assets").
Select("authorised.id, authorised.created, assets.id as asset_id, assets.name as asset_name, strategies.id as strategy_id, strategies.name as strategy_name ").
Joins("left join authorised on authorised.asset_id = assets.id").
Joins("left join strategies on strategies.id = authorised.strategy_id").
Group("assets.id")
dbCounter := r.GetDB(c).Table("assets").Joins("left join authorised on assets.id = authorised.asset_id").Group("assets.id")
if assetName != "" {
db = db.Where("assets.name like ?", "%"+assetName+"%")
dbCounter = dbCounter.Where("assets.name like ?", "%"+assetName+"%")
}
if userId != "" {
db = db.Where("authorised.user_id = ?", userId)
dbCounter = dbCounter.Where("authorised.user_id = ?", userId)
}
if userGroupId != "" {
db = db.Where("authorised.user_group_id = ?", userGroupId)
dbCounter = dbCounter.Where("authorised.user_group_id = ?", userGroupId)
}
err = dbCounter.Count(&total).Error
if err != nil {
return nil, 0, err
}
err = db.Order("authorised.created desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&o).Error
if o == nil {
o = make([]dto.AssetPageForAuthorised, 0)
}
return
}
func (r authorisedRepository) DeleteById(c context.Context, id string) error {
return r.GetDB(c).Where("id = ?", id).Delete(model.Authorised{}).Error
}
func (r authorisedRepository) FindUserPage(c context.Context, pageIndex, pageSize int, userName, assetId string) (o []dto.UserPageForAuthorised, total int64, err error) {
db := r.GetDB(c).Table("users").
Select("authorised.id, authorised.created, users.id as user_id, users.nickname as user_name, strategies.id as strategy_id, strategies.name as strategy_name ").
Joins("left join authorised on authorised.user_id = users.id").
Joins("left join strategies on strategies.id = authorised.strategy_id").
Group("users.id")
dbCounter := r.GetDB(c).Table("assets").Joins("left join authorised on assets.id = authorised.asset_id").Group("assets.id")
if userName != "" {
db = db.Where("users.nickname like ?", "%"+userName+"%")
dbCounter = dbCounter.Where("users.nickname like ?", "%"+userName+"%")
}
if assetId != "" {
db = db.Where("authorised.asset_id = ?", assetId)
dbCounter = dbCounter.Where("authorised.asset_id = ?", assetId)
}
err = dbCounter.Count(&total).Error
if err != nil {
return nil, 0, err
}
err = db.Order("authorised.created desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&o).Error
if o == nil {
o = make([]dto.UserPageForAuthorised, 0)
}
return
}
func (r authorisedRepository) FindUserGroupPage(c context.Context, pageIndex, pageSize int, userName, assetId string) (o []dto.UserGroupPageForAuthorised, total int64, err error) {
db := r.GetDB(c).Table("user_groups").
Select("authorised.id, authorised.created, user_groups.id as user_group_id, user_groups.name as user_group_name, strategies.id as strategy_id, strategies.name as strategy_name ").
Joins("left join authorised on authorised.user_group_id = user_groups.id").
Joins("left join strategies on strategies.id = authorised.strategy_id").
Group("user_groups.id")
dbCounter := r.GetDB(c).Table("assets").Joins("left join authorised on assets.id = authorised.asset_id").Group("assets.id")
if userName != "" {
db = db.Where("user_groups.name like ?", "%"+userName+"%")
dbCounter = dbCounter.Where("user_groups.name like ?", "%"+userName+"%")
}
if assetId != "" {
db = db.Where("authorised.asset_id = ?", assetId)
dbCounter = dbCounter.Where("authorised.asset_id = ?", assetId)
}
err = dbCounter.Count(&total).Error
if err != nil {
return nil, 0, err
}
err = db.Order("authorised.created desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&o).Error
if o == nil {
o = make([]dto.UserGroupPageForAuthorised, 0)
}
return
}