init: web_hgcg_server 初始化提交
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
package mwacc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
"videoweb/pub/common/errors"
|
||||
sErr "videoweb/pub/common/errors"
|
||||
"videoweb/pub/common/log"
|
||||
"videoweb/pub/common/srvdef"
|
||||
"videoweb/pub/mongos"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
// 过滤查询数量
|
||||
func AccCountByFilter(ctx context.Context, filters primitive.M, opts ...*options.CountOptions) (c int64, err error) {
|
||||
c, err = mwAccColl.Count(ctx, filters)
|
||||
return
|
||||
}
|
||||
|
||||
// 过滤查询账号
|
||||
func FindOneAccByFilter(ctx context.Context, filters primitive.M, opts ...*options.FindOneOptions) (*MwAcc, error) {
|
||||
var res MwAcc
|
||||
err := mwAccColl.FindOne(ctx, &res, filters, opts...)
|
||||
if err != nil {
|
||||
log.Error("mwacc FindOneAccByFilter err", log.Any("filters", filters), log.E(err))
|
||||
}
|
||||
return &res, err
|
||||
}
|
||||
|
||||
// 过滤更新
|
||||
func UpOneAccByFilter(ctx context.Context, query primitive.M, update primitive.M) (err error) {
|
||||
_, err = mwAccColl.UpdateOne(ctx, query, primitive.M{"$set": update})
|
||||
return
|
||||
}
|
||||
|
||||
// 过滤删除角色
|
||||
func DelAccByFilter(ctx context.Context, filters primitive.M) (err error) {
|
||||
_, err = mwAccColl.DeleteOne(ctx, filters)
|
||||
if err != nil {
|
||||
log.Error("mwacc DelAccByFilter err", log.Any("filters", filters), log.E(err))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// // 更新最后登录时间
|
||||
// func UpAccLastTimeById(ctx context.Context, id int64) (*mongo.UpdateResult, error) {
|
||||
// ret, err := mwAccColl.UpdateOne(ctx, primitive.M{FN.MwAcc.Id: id}, primitive.M{"$set": primitive.M{FN.MwAcc.LastTime: time.Now()}})
|
||||
// if err != nil {
|
||||
// log.Error("mvacc UpLastTimeById err", log.Any(FN.MwAcc.Id, id), log.E(err))
|
||||
// }
|
||||
// return ret, err
|
||||
// }
|
||||
|
||||
// 绑定二维码
|
||||
func BindAccQurl(ctx context.Context, acc string) (ok bool, err error) {
|
||||
|
||||
res, dataErr := FindOneAccByFilter(ctx, primitive.M{
|
||||
FN.MwAcc.Acc: acc,
|
||||
})
|
||||
|
||||
if dataErr != nil || res.Id == 0 {
|
||||
err = sErr.MakeWithMsg(sErr.Logo, "用户不存在!")
|
||||
return false, err
|
||||
}
|
||||
|
||||
if res.IsEnb == false {
|
||||
err = sErr.MakeWithMsg(sErr.UserPermission, "用户被禁用!")
|
||||
return false, err
|
||||
}
|
||||
err = UpOneAccByFilter(ctx, primitive.M{
|
||||
FN.MwAcc.Acc: acc,
|
||||
}, primitive.M{
|
||||
FN.MwAcc.IsBase32: true,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return true, err
|
||||
}
|
||||
|
||||
// 插入角色
|
||||
func AccAdd(ctx context.Context, insertReq *AccInsertDoc) (id int64, ok bool, err error) {
|
||||
|
||||
insertReq.Id = int64(mongos.Lid.MwAcc.Get())
|
||||
insertReq.CreatedAt = time.Now()
|
||||
|
||||
_, err = mwAccColl.InsertOne(ctx, insertReq)
|
||||
if err != nil {
|
||||
log.ZapLog.Error(fmt.Sprintf("InsertRole mongo error %v", err))
|
||||
err = errors.MakeWithErr(errors.DBInsert, err)
|
||||
return 0, false, err
|
||||
}
|
||||
return insertReq.Id, true, nil
|
||||
}
|
||||
|
||||
// 获取角色列表
|
||||
func GetAccList(ctx context.Context, search primitive.M, sort []primitive.M) (
|
||||
total int64, data []*AccGetListRec, err error) {
|
||||
|
||||
var countPipe []primitive.M
|
||||
countPipe = append(countPipe, search, bson.M{"$count": "total"})
|
||||
var aggCount AggStatCount
|
||||
err = mwAccColl.ObjectAggregate(ctx, &aggCount, countPipe)
|
||||
if err != nil {
|
||||
return 0, nil, err
|
||||
}
|
||||
total = aggCount.Total
|
||||
|
||||
var pip []primitive.M
|
||||
pip = append(pip, search)
|
||||
pip = append(pip, sort...)
|
||||
pip = append(pip,
|
||||
primitive.M{
|
||||
"$lookup": primitive.M{
|
||||
"localField": FN.MwAcc.RoleId,
|
||||
"from": TN.MwRole,
|
||||
"foreignField": FN.MwRole.Id,
|
||||
"as": "roles",
|
||||
},
|
||||
},
|
||||
primitive.M{"$unwind": primitive.M{
|
||||
"path": "$roles",
|
||||
"preserveNullAndEmptyArrays": true,
|
||||
},
|
||||
},
|
||||
primitive.M{
|
||||
"$project": primitive.M{
|
||||
FN.MwAcc.Id: 1,
|
||||
FN.MwAcc.UserName: 1,
|
||||
FN.MwAcc.Acc: 1,
|
||||
FN.MwAcc.Pwd: 1,
|
||||
FN.MwAcc.Email: 1,
|
||||
FN.MwAcc.RoleId: 1,
|
||||
FN.MwAcc.RoleName: "$roles.name",
|
||||
FN.MwAcc.Base32: 1,
|
||||
FN.MwAcc.IsBase32: 1,
|
||||
// mwacc.FN.MwAcc.LastTime: 1,
|
||||
FN.MwAcc.IsEnb: 1,
|
||||
FN.MwAcc.Feedback: 1,
|
||||
FN.MwAcc.CreatedAt: 1,
|
||||
FN.MwAcc.UpdatedAt: 1,
|
||||
FN.MwAcc.LimitIP: 1,
|
||||
},
|
||||
})
|
||||
|
||||
err = mwAccColl.Aggregate(ctx, &data, pip)
|
||||
if err != nil {
|
||||
err = errors.MakeWithErr(errors.DBQuery, err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 过滤查询账号
|
||||
func FindManyAccByFilter(ctx context.Context, filters primitive.M, opts ...*options.FindOptions) ([]*MwAcc, *srvdef.SrvErr) {
|
||||
var res []*MwAcc
|
||||
err := mwAccColl.Find(ctx, &res, filters, opts...)
|
||||
if err != nil {
|
||||
log.Error("mwacc FindOneAccByFilter err", log.Any("filters", filters), log.E(err))
|
||||
return res, srvdef.New(srvdef.ErrDbQueryError, "", "")
|
||||
}
|
||||
log.Info("success")
|
||||
|
||||
return res, nil
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package mwacc
|
||||
|
||||
import "videoweb/pub/mongos"
|
||||
|
||||
var (
|
||||
mwAccColl *mongos.Collection = nil
|
||||
mwRoleColl *mongos.Collection = nil
|
||||
mwAccTokenColl *mongos.Collection = nil
|
||||
)
|
||||
|
||||
type AggStatCount struct {
|
||||
Total int64 `bson:"total"`
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package mwacc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"videoweb/pub/mongos"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
)
|
||||
|
||||
// Init 初始化数据
|
||||
func Init(ctx context.Context) {
|
||||
mwAccColl = mongos.Shop.Coll(TN.MwAcc)
|
||||
mwRoleColl = mongos.Shop.Coll(TN.MwRole)
|
||||
mwAccTokenColl = mongos.Shop.Coll(TN.MwAccToken)
|
||||
initIndex(ctx)
|
||||
return
|
||||
}
|
||||
|
||||
// initIndex 初始化索引
|
||||
func initIndex(ctx context.Context) {
|
||||
initAccIndex(ctx)
|
||||
initRoleIndex(ctx)
|
||||
initAccTokenIndex(ctx)
|
||||
}
|
||||
|
||||
func initAccIndex(ctx context.Context) {
|
||||
indexes := []mongo.IndexModel{
|
||||
{
|
||||
Keys: bson.D{
|
||||
{FN.MwAcc.Id, 1},
|
||||
},
|
||||
},
|
||||
}
|
||||
if _, err := mwAccColl.CreateIndex(ctx, indexes); err != nil {
|
||||
panic(fmt.Sprintf("(mwacc:initAccIndex) Create mwacc Index failed! err:%+v:", err))
|
||||
}
|
||||
}
|
||||
|
||||
func initRoleIndex(ctx context.Context) {
|
||||
indexes := []mongo.IndexModel{
|
||||
{
|
||||
Keys: bson.D{
|
||||
{FN.MwRole.Id, 1},
|
||||
},
|
||||
// Options: options.Index().SetUnique(true),
|
||||
},
|
||||
}
|
||||
if _, err := mwRoleColl.CreateIndex(ctx, indexes); err != nil {
|
||||
panic(fmt.Sprintf("(mwacc:initRoleIndex) Create mwacc Index failed! err:%+v:", err))
|
||||
}
|
||||
}
|
||||
func initAccTokenIndex(ctx context.Context) {
|
||||
indexes := []mongo.IndexModel{
|
||||
{
|
||||
Keys: bson.D{
|
||||
{FN.MwAccToken.Id, 1},
|
||||
},
|
||||
// Options: options.Index().SetUnique(true),
|
||||
},
|
||||
}
|
||||
if _, err := mwAccTokenColl.CreateIndex(ctx, indexes); err != nil {
|
||||
panic(fmt.Sprintf("(mwacc:initAccTokenIndex) Create mwacc Index failed! err:%+v:", err))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package mwacc
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"videoweb/pub/pubdef"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
)
|
||||
|
||||
func MakeSearch(keyWords string, status int64, page pubdef.Page) (searchs bson.M) {
|
||||
var search []bson.M
|
||||
if len(keyWords) > 0 {
|
||||
userId, _ := strconv.ParseInt(keyWords, 10, 64)
|
||||
search = append(search, bson.M{FN.MwAcc.Id: userId})
|
||||
search = append(search, bson.M{FN.MwAcc.UserName: bson.M{"$regex": keyWords}})
|
||||
search = append(search, bson.M{FN.MwAcc.Acc: bson.M{"$regex": keyWords}})
|
||||
search = append(search, bson.M{FN.MwAcc.Email: bson.M{"$regex": keyWords}})
|
||||
}
|
||||
|
||||
match := bson.M{}
|
||||
if len(search) > 0 {
|
||||
match["$or"] = search
|
||||
}
|
||||
|
||||
if status > 0 {
|
||||
if status == 1 {
|
||||
match[FN.MwAcc.IsEnb] = true
|
||||
} else {
|
||||
match[FN.MwAcc.IsEnb] = false
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
searchs = bson.M{}
|
||||
searchs["$match"] = match
|
||||
return
|
||||
}
|
||||
|
||||
func MakeSort(pageNum int64, pageSize int64) (sort []bson.M) {
|
||||
sort = append(sort, bson.M{
|
||||
"$sort": bson.M{
|
||||
FN.MwAcc.CreatedAt: -1,
|
||||
},
|
||||
})
|
||||
if pageNum <= 0 {
|
||||
pageNum = 1
|
||||
}
|
||||
if pageSize <= 0 {
|
||||
pageSize = 10
|
||||
}
|
||||
skip := (pageNum - 1) * pageSize
|
||||
sort = append(sort, bson.M{
|
||||
"$skip": skip,
|
||||
})
|
||||
|
||||
sort = append(sort, bson.M{
|
||||
"$limit": pageSize,
|
||||
})
|
||||
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
// Code generated by gen_bson_tag. DO NOT EDIT.
|
||||
package mwacc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"videoweb/pub/common/log"
|
||||
"videoweb/pub/common/srvdef"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
// CreateOneMwAcc 创建一个MwAcc
|
||||
func CreateOneMwAcc(ctx context.Context, data *MwAcc) *srvdef.SrvErr {
|
||||
_, err := mwAccColl.InsertOne(ctx, data)
|
||||
if err != nil {
|
||||
log.Error("mwacc:CreateOneMwAcc db.InsertOne failed",
|
||||
log.Any("doc", data),
|
||||
log.E(err))
|
||||
return srvdef.New(srvdef.ErrDbInsertError, "", "")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// FindOneMwAcc 查找一个MwAcc
|
||||
func FindOneMwAcc(ctx context.Context, filter bson.M) (
|
||||
*MwAcc, *srvdef.SrvErr) {
|
||||
var data *MwAcc
|
||||
if err := mwAccColl.FindOneEx(ctx, &data, filter); err != nil {
|
||||
if err != mongo.ErrNoDocuments {
|
||||
log.Warn("mwacc:FindOneMwAcc mwAccColl.FindOneEx failed",
|
||||
log.E(err), log.Any("filter", filter))
|
||||
return nil, srvdef.New(srvdef.ErrDbQueryError, "", "")
|
||||
}
|
||||
return nil, srvdef.New(srvdef.ErrNoData, "", "")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
// DelOneOneMwAcc 删除一个MwAcc
|
||||
func DelOneOneMwAcc(ctx context.Context, filter bson.M) (
|
||||
int64, *srvdef.SrvErr) {
|
||||
count, err := mwAccColl.DeleteOne(ctx, filter)
|
||||
if err != nil {
|
||||
log.Warn("mwacc:DelOneOneMwAcc mwAccColl.DeleteOne failed",
|
||||
log.E(err), log.Any("filter", filter))
|
||||
return 0, srvdef.New(srvdef.ErrDbDeleteError, "", "")
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
// UpdateOneMwAcc 更新一个MwAcc
|
||||
func UpdateOneMwAcc(ctx context.Context, filter bson.M, update bson.M) *srvdef.SrvErr {
|
||||
result, err := mwAccColl.UpdateOne(ctx, filter, update)
|
||||
if err != nil {
|
||||
log.Warn("mwacc:UpdateOneMwAcc mwAccColl.UpdateOne failed",
|
||||
log.E(err), log.Any("filter", filter))
|
||||
return srvdef.New(srvdef.ErrDbUpdateError, "", "")
|
||||
}
|
||||
if result.MatchedCount != 1 {
|
||||
return srvdef.New(srvdef.ErrNoData, "", "")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// CountMwAccs 统计MwAcc数量
|
||||
func CountMwAccs(ctx context.Context, filter bson.M) (
|
||||
int64, *srvdef.SrvErr) {
|
||||
count, err := mwAccColl.Count(ctx, filter)
|
||||
if err != nil {
|
||||
log.Warn("mwacc:CountMwAccs mwAccColl.Count failed",
|
||||
log.E(err), log.Any("filter", filter))
|
||||
return 0, srvdef.New(srvdef.ErrDbQueryError, "", "")
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
// FindManyMwAccs 查找一批MwAcc
|
||||
func FindManyMwAccs(ctx context.Context, filter bson.M,
|
||||
opts ...*options.FindOptions) (MwAccList, *srvdef.SrvErr) {
|
||||
data := make(MwAccList, 0)
|
||||
if err := mwAccColl.Find(ctx, &data, filter, opts...); err != nil {
|
||||
log.Warn("mwacc:FindManyMwAccs mwAccColl.Find failed", log.E(err), log.Any("filter", filter))
|
||||
return nil, srvdef.New(srvdef.ErrDbQueryError, "", "")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
// FindManyMwAccsWithBind 用自己定义结构查找一批MwAcc数据
|
||||
func FindManyMwAccsWithBind(ctx context.Context, bind interface{}, filter bson.M,
|
||||
opts ...*options.FindOptions) *srvdef.SrvErr {
|
||||
if err := mwAccColl.Find(ctx, bind, filter, opts...); err != nil {
|
||||
log.Warn("mwacc:FindManyMwAccsWithBind mwAccColl.Find failed", log.E(err), log.Any("filter", filter))
|
||||
return srvdef.New(srvdef.ErrDbQueryError, "", "")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// AggregateMwAccs 聚合查找一批MwAcc
|
||||
func AggregateMwAccs(ctx context.Context,
|
||||
bind interface{}, pipeline []bson.M) *srvdef.SrvErr {
|
||||
if err := mwAccColl.Aggregate(ctx, bind, pipeline); err != nil {
|
||||
log.Warn("mwacc:AggregateMwAccs mwAccColl.Aggregate failed",
|
||||
log.E(err), log.Any("pipeline", pipeline))
|
||||
return srvdef.New(srvdef.ErrDbQueryError, "", "")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ObjectAggregateMwAccs 聚合查找一批MwAcc数据
|
||||
func ObjectAggregateMwAccs(ctx context.Context,
|
||||
bind interface{}, pipeline []bson.M) *srvdef.SrvErr {
|
||||
if err := mwAccColl.ObjectAggregate(ctx, bind, pipeline); err != nil {
|
||||
log.Warn("mwacc:AggregateMwAccs mwAccColl.Aggregate failed",
|
||||
log.E(err), log.Any("pipeline", pipeline))
|
||||
return srvdef.New(srvdef.ErrDbQueryError, "", "")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ObjectAggregateMwAccs 批量写入或者更新MwAcc数据
|
||||
func BulkWriteMwAccs(ctx context.Context,
|
||||
docs []mongo.WriteModel, opts ...*options.BulkWriteOptions) *srvdef.SrvErr {
|
||||
_, err := mwAccColl.BulkWrite(ctx, docs, opts...)
|
||||
if err != nil {
|
||||
return srvdef.New(srvdef.ErrDbUpdateError, "", "")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
package mwacc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
"videoweb/pub/common/errors"
|
||||
"videoweb/pub/common/log"
|
||||
"videoweb/pub/common/pageopt"
|
||||
"videoweb/pub/common/srvdef"
|
||||
"videoweb/pub/mongos"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
// 角色聚集处理
|
||||
func RoleAggregate(ctx context.Context, filters []primitive.M, opts ...*options.AggregateOptions) (roles []*MwRole, err error) {
|
||||
roles = make([]*MwRole, 0)
|
||||
err = mwRoleColl.Aggregate(ctx, &roles, filters)
|
||||
return
|
||||
}
|
||||
|
||||
// 过滤查询数量
|
||||
func RoleCountByFilter(ctx context.Context, filters primitive.M, opts ...*options.CountOptions) (c int64, err error) {
|
||||
c, err = mwRoleColl.Count(ctx, filters)
|
||||
return
|
||||
}
|
||||
|
||||
// 过滤查询角色
|
||||
func FindOneRoleByFilter(ctx context.Context, filters primitive.M, opts ...*options.FindOneOptions) (*MwRole, *srvdef.SrvErr) {
|
||||
var res MwRole
|
||||
err := mwRoleColl.FindOne(ctx, &res, filters, opts...)
|
||||
if err != nil {
|
||||
log.Error("mwacc FindOneRoleByFilter err", log.Any("filters", filters), log.E(err))
|
||||
return &res, srvdef.New(srvdef.ErrDbQueryError, "", "")
|
||||
}
|
||||
return &res, nil
|
||||
}
|
||||
|
||||
// 过滤更新
|
||||
func UpOneRoleByFilter(ctx context.Context, query primitive.M, update primitive.M) *srvdef.SrvErr {
|
||||
_, err := mwRoleColl.UpdateOne(ctx, query, update)
|
||||
if err != nil {
|
||||
log.Error("mwacc UpOneRoleByFilter: db.UpdateOne err", log.Any("update", update), log.E(err))
|
||||
return srvdef.New(srvdef.ErrDbUpdateError, "", "")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 过滤删除角色
|
||||
func DelRoleByFilter(ctx context.Context, filters primitive.M) *srvdef.SrvErr {
|
||||
_, err := mwRoleColl.DeleteOne(ctx, filters)
|
||||
if err != nil {
|
||||
log.Error("mwacc DelRoleByFilter err", log.Any("filters", filters), log.E(err))
|
||||
return srvdef.New(srvdef.ErrDbDeleteError, "", "")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 更新角色权限
|
||||
func UpRoleAuth(ctx context.Context, id int64, keys []string, dataRouter []*Router) (ok bool, err error) {
|
||||
|
||||
_, err = mwRoleColl.UpdateOne(ctx, primitive.M{
|
||||
FN.MwRole.Id: id,
|
||||
}, primitive.M{
|
||||
"$set": primitive.M{
|
||||
FN.MwRole.ApiMenus: keys,
|
||||
FN.MwRole.Router: dataRouter,
|
||||
},
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.Error("mvacc UpRoleAuth err", log.Any(FN.MwRole.Id, id), log.E(err))
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// 获取角色列表
|
||||
func GetRoleList(ctx context.Context, skip, limit int64, matchs ...pageopt.Matcher) (data []*RoleGetListRec, err error) {
|
||||
data = make([]*RoleGetListRec, 0)
|
||||
|
||||
err = mwRoleColl.Aggregate(ctx, &data,
|
||||
[]primitive.M{
|
||||
{"$match": pageopt.MergeM(matchs)},
|
||||
{"$sort": primitive.M{FN.MwRole.Id: -1}},
|
||||
{"$skip": skip},
|
||||
{"$limit": limit},
|
||||
{"$lookup": primitive.M{
|
||||
"localField": FN.MwRole.Id,
|
||||
"from": TN.MwAcc,
|
||||
"foreignField": FN.MwAcc.RoleId,
|
||||
"as": "onlyRole",
|
||||
}},
|
||||
{"$project": primitive.M{
|
||||
FN.MwRole.Id: 1,
|
||||
FN.MwRole.Name: 1,
|
||||
FN.MwRole.Desc: 1,
|
||||
FN.MwRole.IsEnb: 1,
|
||||
FN.MwRole.ApiMenus: 1,
|
||||
FN.MwRole.CreatedAt: 1,
|
||||
FN.MwRole.UpdatedAt: 1,
|
||||
"account": primitive.M{
|
||||
"$size": "$onlyRole",
|
||||
},
|
||||
}},
|
||||
})
|
||||
if err != nil && err.Error() != errors.NotFind {
|
||||
log.ZapLog.Error(fmt.Sprintf("mwacc GetRoleList error %v", err))
|
||||
err = errors.MakeWithErr(errors.DBQuery, err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 下拉列表
|
||||
func RoleDrop(ctx context.Context) (data []*RoleDropDoc, err error) {
|
||||
|
||||
query := primitive.M{FN.MwRole.IsEnb: true}
|
||||
|
||||
opt := options.Find().SetProjection(primitive.M{
|
||||
FN.MwRole.Id: 1,
|
||||
FN.MwRole.Name: 1,
|
||||
})
|
||||
|
||||
err = mwRoleColl.Find(ctx, &data, query, opt)
|
||||
if err != nil {
|
||||
err = errors.MakeWithErr(errors.DBQuery, err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 插入角色
|
||||
func RoleAdd(ctx context.Context, name string, desc string, isEnb bool) (ok bool, err error) {
|
||||
c, err := mwRoleColl.Count(ctx, primitive.M{FN.MwRole.Name: name})
|
||||
if c > 0 {
|
||||
err = errors.MakeWithMsg(errors.DBInsert, "角色名称")
|
||||
return false, err
|
||||
}
|
||||
|
||||
_, err = mwRoleColl.InsertOne(ctx, primitive.M{
|
||||
FN.MwRole.Id: mongos.Lid.MwRole.Get(),
|
||||
FN.MwRole.Name: name,
|
||||
FN.MwRole.Desc: desc,
|
||||
FN.MwRole.IsEnb: isEnb,
|
||||
FN.MwRole.CreatedAt: time.Now(),
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.ZapLog.Error(fmt.Sprintf("InsertRole mongo error %v", err))
|
||||
err = errors.MakeWithErr(errors.DBInsert, err)
|
||||
return false, err
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
Executable
+88
@@ -0,0 +1,88 @@
|
||||
package mwacc
|
||||
|
||||
type TagMwRole struct {
|
||||
ApiMenus string
|
||||
CreatedAt string
|
||||
Desc string
|
||||
Id string
|
||||
IsEnb string
|
||||
Name string
|
||||
Router string
|
||||
UpdatedAt string
|
||||
}
|
||||
type TagMwAcc struct {
|
||||
Acc string
|
||||
Base32 string
|
||||
Code string
|
||||
CreatedAt string
|
||||
Email string
|
||||
Feedback string
|
||||
Id string
|
||||
IsBase32 string
|
||||
IsEnb string
|
||||
LastTime string
|
||||
LimitIP string
|
||||
Pwd string
|
||||
Qurl string
|
||||
RoleId string
|
||||
RoleName string
|
||||
Token string
|
||||
UpdatedAt string
|
||||
UserName string
|
||||
}
|
||||
type TagMwAccToken struct {
|
||||
AccId string
|
||||
CreatedAt string
|
||||
Id string
|
||||
Token string
|
||||
UpdatedAt string
|
||||
}
|
||||
|
||||
var FN struct {
|
||||
MwRole TagMwRole
|
||||
MwAcc TagMwAcc
|
||||
MwAccToken TagMwAccToken
|
||||
}
|
||||
|
||||
var TN struct {
|
||||
MwRole string
|
||||
MwAcc string
|
||||
MwAccToken string
|
||||
}
|
||||
|
||||
func init() {
|
||||
FN.MwRole.ApiMenus = "apiMenus"
|
||||
FN.MwRole.CreatedAt = "createdAt"
|
||||
FN.MwRole.Desc = "desc"
|
||||
FN.MwRole.Id = "_id"
|
||||
FN.MwRole.IsEnb = "isEnb"
|
||||
FN.MwRole.Name = "name"
|
||||
FN.MwRole.Router = "router"
|
||||
FN.MwRole.UpdatedAt = "updatedAt"
|
||||
FN.MwAcc.Acc = "acc"
|
||||
FN.MwAcc.Base32 = "base32"
|
||||
FN.MwAcc.Code = "code"
|
||||
FN.MwAcc.CreatedAt = "createdAt"
|
||||
FN.MwAcc.Email = "email"
|
||||
FN.MwAcc.Feedback = "feedback"
|
||||
FN.MwAcc.Id = "_id"
|
||||
FN.MwAcc.IsBase32 = "isBase32"
|
||||
FN.MwAcc.IsEnb = "isEnb"
|
||||
FN.MwAcc.LastTime = "lastTime"
|
||||
FN.MwAcc.LimitIP = "limitIP"
|
||||
FN.MwAcc.Pwd = "pwd"
|
||||
FN.MwAcc.Qurl = "qurl"
|
||||
FN.MwAcc.RoleId = "roleId"
|
||||
FN.MwAcc.RoleName = "roleName"
|
||||
FN.MwAcc.Token = "token"
|
||||
FN.MwAcc.UpdatedAt = "updatedAt"
|
||||
FN.MwAcc.UserName = "userName"
|
||||
FN.MwAccToken.AccId = "accId"
|
||||
FN.MwAccToken.CreatedAt = "createdAt"
|
||||
FN.MwAccToken.Id = "_id"
|
||||
FN.MwAccToken.Token = "token"
|
||||
FN.MwAccToken.UpdatedAt = "updatedAt"
|
||||
TN.MwRole = "mw_role"
|
||||
TN.MwAcc = "mw_acc"
|
||||
TN.MwAccToken = "mw_acc_token"
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package mwacc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
"videoweb/pub/common/errors"
|
||||
"videoweb/pub/common/log"
|
||||
"videoweb/pub/common/srvdef"
|
||||
"videoweb/pub/mongos"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
// 过滤更新
|
||||
func UpOneTokenByFilter(ctx context.Context, query primitive.M, update primitive.M) (err error) {
|
||||
_, err = mwAccTokenColl.UpdateOne(ctx, query, primitive.M{"$set": update})
|
||||
return
|
||||
}
|
||||
|
||||
func SaveToken(ctx context.Context, accId int64, token string) (ok bool, err error) {
|
||||
var booToken MwAccToken
|
||||
|
||||
// 查找
|
||||
err = mwAccTokenColl.FindOne(ctx, &booToken, primitive.M{FN.MwAccToken.AccId: accId})
|
||||
|
||||
if booToken.AccId > 0 {
|
||||
// 更新
|
||||
err = UpOneTokenByFilter(ctx, primitive.M{
|
||||
FN.MwAccToken.AccId: accId,
|
||||
}, primitive.M{
|
||||
FN.MwAccToken.Token: token,
|
||||
FN.MwAccToken.UpdatedAt: time.Now(),
|
||||
})
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
if err != nil || booToken.AccId == 0 {
|
||||
if _, err := mwAccTokenColl.InsertOne(ctx,
|
||||
primitive.M{
|
||||
FN.MwAccToken.Id: mongos.Lid.MwAccToken.Get(),
|
||||
FN.MwAccToken.AccId: accId,
|
||||
FN.MwAccToken.Token: token,
|
||||
FN.MwAccToken.CreatedAt: time.Now(),
|
||||
}); err != nil {
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func CheckToken(ctx context.Context, token string) (ok bool, err error) {
|
||||
var booToken MwAccToken
|
||||
Terr := mwAccTokenColl.FindOne(ctx, &booToken, primitive.M{FN.MwAccToken.Token: token})
|
||||
if Terr != nil || booToken.AccId == 0 {
|
||||
err = errors.MakeWithMsg(errors.NoToken, "token 不存在或已过期")
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// // 检测Token
|
||||
// func CheckToken(ctx context.Context, token string) (ok bool, err error) {
|
||||
// var booToken WebToken
|
||||
// Terr := tokenColl.FindOne(ctx, &booToken, primitive.M{"token": token})
|
||||
// if Terr != nil || booToken.Id == 0 {
|
||||
// err = errors.MakeWithMsg(errors.NoToken, "token 不存在或已过期")
|
||||
// return
|
||||
// }
|
||||
// return true, nil
|
||||
// }
|
||||
|
||||
// 删除token
|
||||
func DeleteOneToken(ctx context.Context, filter bson.M) *srvdef.SrvErr {
|
||||
if _, err := mwAccTokenColl.DeleteOne(ctx, filter); err != nil {
|
||||
log.Warn("mwacc:DeleteOneToken db.DeleteOne failed", log.E(err), log.Any("filter", filter))
|
||||
return srvdef.New(srvdef.ErrDbDeleteError, "", "")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package mwacc
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type Meta struct {
|
||||
Title string `bson:"title"`
|
||||
Icon string `bson:"icon"`
|
||||
NoCache bool `bson:"noCache"`
|
||||
}
|
||||
|
||||
type Apiurl struct {
|
||||
Url []string `bson:"url"`
|
||||
Desc string `bson:"desc"`
|
||||
Status bool `bson:"status"`
|
||||
Method []string `bson:"method"`
|
||||
}
|
||||
|
||||
// 编辑返回去的数据
|
||||
type Router struct {
|
||||
Path string `bson:"path"`
|
||||
Component string `bson:"component"`
|
||||
Redirect string `bson:"redirect"`
|
||||
Name string `bson:"name"`
|
||||
IsShow bool `bson:"isShow"`
|
||||
Hidden bool `bson:"hidden"`
|
||||
Meta Meta `bson:"meta"`
|
||||
Children []Router `bson:"children"`
|
||||
ApiUrl []Apiurl `bson:"apiUrl"`
|
||||
}
|
||||
|
||||
// 角色
|
||||
// @table:mw_role
|
||||
type MwRole struct {
|
||||
Id int64 `bson:"_id"`
|
||||
Name string `bson:"name"` // 角色名称
|
||||
Desc string `bson:"desc"` // 描述
|
||||
IsEnb bool `bson:"isEnb"` // 是否启用 false:禁用 true:启用
|
||||
ApiMenus []string `bson:"apiMenus"` // 已有权限的api
|
||||
Router []Router `bson:"router"`
|
||||
CreatedAt time.Time `bson:"createdAt"` // 创建时间
|
||||
UpdatedAt time.Time `bson:"updatedAt"` // 更新时间
|
||||
}
|
||||
|
||||
// 账号
|
||||
// @table:mw_acc
|
||||
type MwAcc struct {
|
||||
Id int64 `bson:"_id"` // id
|
||||
UserName string `bson:"userName"` // 用户名
|
||||
Acc string `bson:"acc"` // 账号
|
||||
Pwd string `bson:"pwd"` // 密码
|
||||
Email string `bson:"email"` // 邮箱
|
||||
RoleId int64 `bson:"roleId"` // 角色Id
|
||||
RoleName string `bson:"roleName"` // 角色名
|
||||
Base32 string `bson:"base32"` // 二步签名
|
||||
IsBase32 bool `bson:"isBase32"` // 是否已签名
|
||||
Code string `bson:"code"` // 验证码
|
||||
Qurl []byte `bson:"qurl"` // 二维码链接
|
||||
Token string `bson:"token"` // token
|
||||
LastTime time.Time `bson:"lastTime"` // 登录时间
|
||||
IsEnb bool `bson:"isEnb"` // 使能
|
||||
Feedback string `bson:"feedback"` // 禁用原因
|
||||
CreatedAt time.Time `bson:"createdAt"` // 创建时间
|
||||
UpdatedAt time.Time `bson:"updatedAt"` // 更新时间
|
||||
LimitIP []string `bson:"limitIP"` // 限制IP
|
||||
}
|
||||
type MwAccList []*MwAcc
|
||||
|
||||
// 账号Token
|
||||
// @table:mw_acc_token
|
||||
type MwAccToken struct {
|
||||
Id int64 `bson:"_id"` // id
|
||||
AccId int64 `bson:"accId"` // 账号id
|
||||
Token string `bson:"token"` // token
|
||||
CreatedAt time.Time `bson:"createdAt"` // 创建时间
|
||||
UpdatedAt time.Time `bson:"updatedAt"` // 更新时间
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package mwacc
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type AccGetListRec struct {
|
||||
Id int64 `bson:"_id"` // id
|
||||
Username string `bson:"username"` // 用户名
|
||||
Acc string `bson:"acc"` // 用户名
|
||||
Pwd string `bson:"pwd"` // 密码
|
||||
Email string `bson:"email"` // 邮箱
|
||||
RoleId int64 `bson:"roleId"` // 角色Id
|
||||
RoleName string `bson:"roleName"` // 角色名
|
||||
// Base32 string `bson:"base32"` // 二步签名
|
||||
IsBase32 bool `bson:"isBase32"` // 是否已签名
|
||||
IsEnb bool `bson:"isEnb"` // 使能
|
||||
Feedback string `bson:"feedback"` // 禁用原因
|
||||
CreatedAt time.Time `bson:"createdAt"` // 创建时间
|
||||
UpdatedAt time.Time `bson:"updatedAt"` // 更新时间
|
||||
LimitIP []string `bson:"limitIP"` // 允许访问的IP
|
||||
}
|
||||
|
||||
type RoleGetListRec struct {
|
||||
Id int64 `bson:"_id"` // 角色Id
|
||||
Name string `bson:"name"` // 角色名称
|
||||
Desc string `bson:"desc"` // 描述
|
||||
IsEnb bool `bson:"isEnb"` // 是否启用 false:禁用 true:启用
|
||||
ApiMenus []string `bson:"apiMenus"` // 已有权限的api
|
||||
CreatedAt time.Time `bson:"createdAt"` // 创建时间
|
||||
UpdatedAt time.Time `bson:"updatedAt"` // 更新时间
|
||||
AccCount int64 `bson:"accCount"` // 账户数量
|
||||
}
|
||||
|
||||
type AccInsertDoc struct {
|
||||
Id int64 `bson:"_id"` // id
|
||||
UserName string `bson:"userName"` // 用户名
|
||||
Pwd string `bson:"pwd"` // 密码
|
||||
Acc string `bson:"acc"` // 用户名
|
||||
Email string `bson:"email"` // 邮箱
|
||||
RoleId int64 `bson:"roleId"` // 角色Id
|
||||
Base32 string `bson:"base32"` // 二步签名
|
||||
IsBase32 bool `bson:"isBase32"` // 是否已签名
|
||||
IsEnb bool `bson:"isEnb"` // 使能
|
||||
LastTime time.Time `bson:"lastTime"` // 登录时间
|
||||
CreatedAt time.Time `bson:"createdAt"` // 创建时间
|
||||
LimitIP []string `bson:"limitIP"` // 允许访问的IP
|
||||
}
|
||||
|
||||
type RoleDropDoc struct {
|
||||
Id int64 `bson:"_id"` // 角色Id
|
||||
Name string `bson:"name"` // 角色名称
|
||||
}
|
||||
Reference in New Issue
Block a user