package repo import ( "assetcenter/db/model" "fmt" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) func UserSearchByPhoneAndPwd(ctx *RepoSession, phone string, pwdMd5 string) (*model.User, error) { users := ctx.Client.GetCollection(CollectionUser) filter := bson.M{"phone": phone, "password": pwdMd5} opt := &options.FindOneOptions{Projection: bson.M{"_id": 1, "phone": 1, "lastLogin": 1, "createTime": 1, "avatar": 1, "name": 1, "company": 1, "city": 1, "desc": 1, "email": 1}} out := &model.User{} err := users.FindOne(ctx.Ctx, filter, opt).Decode(out) if err == mongo.ErrNoDocuments { return nil, nil } if err != nil { return nil, err } return out, nil } func UserSearchByPhone(ctx *RepoSession, phone string) (*model.User, error) { users := ctx.Client.GetCollection(CollectionUser) filter := bson.M{"phone": phone} opt := &options.FindOneOptions{Projection: bson.M{"_id": 1, "phone": 1, "lastLogin": 1, "createTime": 1, "avatar": 1, "name": 1, "company": 1, "city": 1, "desc": 1, "email": 1}} out := &model.User{} err := users.FindOne(ctx.Ctx, filter, opt).Decode(out) if err == mongo.ErrNoDocuments { return nil, nil } if err != nil { return nil, err } return out, nil } func UserSearchById(ctx *RepoSession, id string) (*model.User, error) { users := ctx.Client.GetCollection(CollectionUser) objId, _ := primitive.ObjectIDFromHex(id) filter := bson.M{"_id": objId} opt := &options.FindOneOptions{Projection: bson.M{"phone": 1, "teamId": 1, "isPlatform": 1, "roles": 1, "lastLogin": 1, "canDeployDesign": 1, "createTime": 1, "avatar": 1, "name": 1, "company": 1, "city": 1, "desc": 1, "email": 1, "editorSet": 1}} out := &model.User{} err := users.FindOne(ctx.Ctx, filter, opt).Decode(out) if err == mongo.ErrNoDocuments { return nil, nil } if err != nil { return nil, err } return out, nil } func UserLoginSucc(ctx *RepoSession, uid primitive.ObjectID, phone string) error { filter := bson.M{"_id": uid} users := ctx.Client.GetCollection(CollectionUser) update := bson.M{"$set": bson.M{"lastLogin": time.Now()}} result := users.FindOneAndUpdate(ctx.Ctx, filter, update) fmt.Println(result) update2 := bson.M{"$set": bson.M{"children.$.lastLogin": time.Now(), "children.$.uid": uid}} filter2 := bson.M{"children.phone": phone} result2, err := users.UpdateMany(ctx.Ctx, filter2, update2) if err != nil { return err } fmt.Println(result2) return nil } func GetUserParents(ctx *RepoSession, phone string) []map[string]interface{} { _, list := RepoSeachDocsMap(ctx, &DocsSearchOptions{ CollectName: CollectionUser, Query: map[string]interface{}{"children.phone": phone}, Project: []string{"_id", "name", "phone", "children.phone", "children.password"}, }) return list } func AddUser(ctx *RepoSession, u *model.User) string { users := ctx.Client.GetCollection(CollectionUser) result, err := users.InsertOne(ctx.Ctx, u) if err != nil { return "" } return result.InsertedID.(primitive.ObjectID).Hex() }