1 Star 0 Fork 0

白开水/keyauth-zat

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
dao.go 3.67 KB
一键复制 编辑 原始数据 按行查看 历史
zat7 提交于 2023-03-01 20:30 . 修改文件夹
package impl
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/mongo"
"github.com/infraboard/mcube/exception"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo/options"
"gitee.com/zat7/keyauth-zat/apps/user"
)
// Save Object
func (i *impl) save(ctx context.Context, ins *user.User) error {
// s.col.InsertMany()
if _, err := i.col.InsertOne(ctx, ins); err != nil {
return exception.NewInternalServerError("inserted user(%s) document error, %s",
ins.Data.Name, err)
}
return nil
}
// GET, Describe
// filter 过滤器(Collection),类似于MYSQL Where条件
// 调用Decode方法来进行 反序列化 bytes ---> Object (通过BSON Tag)
func (i *impl) get(ctx context.Context, req *user.DescribeUserRequest) (*user.User, error) {
filter := bson.M{}
switch req.DescribeBy {
case user.DescribeBy_USER_ID:
filter["_id"] = req.UserId
case user.DescribeBy_USER_NAME:
filter["data.domain"] = req.Domain
filter["data.name"] = req.UserName
default:
return nil, fmt.Errorf("unknow describe_by %s", req.DescribeBy)
}
ins := user.NewDefaultUser()
if err := i.col.FindOne(ctx, filter).Decode(ins); err != nil {
if err == mongo.ErrNoDocuments {
return nil, exception.NewNotFound("user %s not found", req)
}
return nil, exception.NewInternalServerError("find user %s error, %s", req, err)
}
return ins, nil
}
func newQueryRequest(r *user.QueryUserRequest) *queryRequest {
return &queryRequest{
r,
}
}
type queryRequest struct {
*user.QueryUserRequest
}
// Find参数
func (r *queryRequest) FindOptions() *options.FindOptions {
pageSize := int64(r.Page.PageSize)
skip := int64(r.Page.PageSize) * int64(r.Page.PageNumber-1)
opt := &options.FindOptions{
// 排序: Order By create_at Desc
Sort: bson.D{
{Key: "create_at", Value: -1},
},
// 分页: limit 0,10 skip:0, limit:10
Limit: &pageSize,
Skip: &skip,
}
return opt
}
// 过滤条件
// 由于Mongodb支持嵌套, JSON, 如何过滤嵌套里面的条件, 使用.访问嵌套对象属性
func (r *queryRequest) FindFilter() bson.M {
filter := bson.M{}
// where key = value
// filter["key"] = "value"
return filter
}
// LIST, Query, 会很多条件(分页, 关键字, 条件过滤, 排序)
// 需要单独为其 做过滤参数构建
func (s *impl) query(ctx context.Context, req *queryRequest) (*user.UserSet, error) {
resp, err := s.col.Find(ctx, req.FindFilter(), req.FindOptions())
if err != nil {
return nil, exception.NewInternalServerError("find user error, error is %s", err)
}
set := user.NewUserSet()
// 循环
for resp.Next(ctx) {
ins := user.NewDefaultUser()
if err := resp.Decode(ins); err != nil {
return nil, exception.NewInternalServerError("decode user error, error is %s", err)
}
set.Add(ins)
}
// count
count, err := s.col.CountDocuments(ctx, req.FindFilter())
if err != nil {
return nil, exception.NewInternalServerError("get user count error, error is %s", err)
}
set.Total = count
return set, nil
}
// UpdateByID, 通过主键来更新对象
func (s *impl) update(ctx context.Context, ins *user.User) error {
// s.col.UpdateOne(ctx, filter(), ins)
if _, err := s.col.UpdateByID(ctx, ins.Id, ins); err != nil {
return exception.NewInternalServerError("inserted user(%s) document error, %s",
ins.Data.Name, err)
}
return nil
}
func (s *impl) deleteUser(ctx context.Context, ins *user.User) error {
if ins == nil || ins.Id == "" {
return fmt.Errorf("user is nil")
}
result, err := s.col.DeleteOne(ctx, bson.M{"_id": ins.Id})
if err != nil {
return exception.NewInternalServerError("delete user(%s) error, %s", ins.Id, err)
}
if result.DeletedCount == 0 {
return exception.NewNotFound("user %s not found", ins.Id)
}
return nil
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/zat7/keyauth-zat.git
git@gitee.com:zat7/keyauth-zat.git
zat7
keyauth-zat
keyauth-zat
v0.1.4

搜索帮助