复制项目
This commit is contained in:
103
pkg/common/db/model/admin/admin.go
Normal file
103
pkg/common/db/model/admin/admin.go
Normal file
@@ -0,0 +1,103 @@
|
||||
// Copyright © 2023 OpenIM open source community. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package admin
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
admindb "git.imall.cloud/openim/chat/pkg/common/db/table/admin"
|
||||
"github.com/openimsdk/tools/db/mongoutil"
|
||||
"github.com/openimsdk/tools/db/pagination"
|
||||
"github.com/openimsdk/tools/errs"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
func NewAdmin(db *mongo.Database) (admindb.AdminInterface, error) {
|
||||
coll := db.Collection("admin")
|
||||
_, err := coll.Indexes().CreateOne(context.Background(), mongo.IndexModel{
|
||||
Keys: bson.D{
|
||||
{Key: "account", Value: 1},
|
||||
},
|
||||
Options: options.Index().SetUnique(true),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errs.Wrap(err)
|
||||
}
|
||||
return &Admin{
|
||||
coll: coll,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type Admin struct {
|
||||
coll *mongo.Collection
|
||||
}
|
||||
|
||||
func (o *Admin) Take(ctx context.Context, account string) (*admindb.Admin, error) {
|
||||
return mongoutil.FindOne[*admindb.Admin](ctx, o.coll, bson.M{"account": account})
|
||||
}
|
||||
|
||||
func (o *Admin) TakeUserID(ctx context.Context, userID string) (*admindb.Admin, error) {
|
||||
return mongoutil.FindOne[*admindb.Admin](ctx, o.coll, bson.M{"user_id": userID})
|
||||
}
|
||||
|
||||
func (o *Admin) Update(ctx context.Context, account string, update map[string]any) error {
|
||||
if len(update) == 0 {
|
||||
return nil
|
||||
}
|
||||
return mongoutil.UpdateOne(ctx, o.coll, bson.M{"user_id": account}, bson.M{"$set": update}, false)
|
||||
}
|
||||
|
||||
func (o *Admin) Create(ctx context.Context, admins []*admindb.Admin) error {
|
||||
return mongoutil.InsertMany(ctx, o.coll, admins)
|
||||
}
|
||||
|
||||
func (o *Admin) ChangePassword(ctx context.Context, userID string, newPassword string) error {
|
||||
return mongoutil.UpdateOne(ctx, o.coll, bson.M{"user_id": userID}, bson.M{"$set": bson.M{"password": newPassword}}, false)
|
||||
}
|
||||
|
||||
func (o *Admin) ChangeOperationPassword(ctx context.Context, userID string, newPassword string) error {
|
||||
return mongoutil.UpdateOne(ctx, o.coll, bson.M{"user_id": userID}, bson.M{"$set": bson.M{"operation_password": newPassword}}, false)
|
||||
}
|
||||
|
||||
func (o *Admin) ClearGoogleAuthKey(ctx context.Context, userID string) error {
|
||||
// 使用 $unset 删除字段,确保字段被完全移除
|
||||
// 注意:$unset 操作符的值可以是任意值(通常使用空字符串或1),MongoDB 会忽略值,只删除字段
|
||||
return mongoutil.UpdateOne(ctx, o.coll, bson.M{"user_id": userID}, bson.M{"$unset": bson.M{"google_auth_key": 1}}, false)
|
||||
}
|
||||
|
||||
func (o *Admin) Delete(ctx context.Context, userIDs []string) error {
|
||||
if len(userIDs) == 0 {
|
||||
return nil
|
||||
}
|
||||
return mongoutil.DeleteMany(ctx, o.coll, bson.M{"user_id": bson.M{"$in": userIDs}})
|
||||
}
|
||||
|
||||
func (o *Admin) Search(ctx context.Context, keyword string, pagination pagination.Pagination) (int64, []*admindb.Admin, error) {
|
||||
opt := options.Find().SetSort(bson.D{{Key: "create_time", Value: -1}})
|
||||
filter := bson.M{}
|
||||
|
||||
// 如果有关键词,则进行模糊搜索(账号、昵称、用户ID)
|
||||
if keyword != "" {
|
||||
filter["$or"] = []bson.M{
|
||||
{"account": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
{"nickname": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
{"user_id": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
}
|
||||
}
|
||||
|
||||
return mongoutil.FindPage[*admindb.Admin](ctx, o.coll, filter, pagination, opt)
|
||||
}
|
||||
95
pkg/common/db/model/admin/applet.go
Normal file
95
pkg/common/db/model/admin/applet.go
Normal file
@@ -0,0 +1,95 @@
|
||||
// Copyright © 2023 OpenIM open source community. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package admin
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/openimsdk/tools/db/mongoutil"
|
||||
"github.com/openimsdk/tools/db/pagination"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
|
||||
"git.imall.cloud/openim/chat/pkg/common/constant"
|
||||
"git.imall.cloud/openim/chat/pkg/common/db/table/admin"
|
||||
"github.com/openimsdk/tools/errs"
|
||||
)
|
||||
|
||||
func NewApplet(db *mongo.Database) (admin.AppletInterface, error) {
|
||||
coll := db.Collection("applet")
|
||||
_, err := coll.Indexes().CreateOne(context.Background(), mongo.IndexModel{
|
||||
Keys: bson.D{
|
||||
{Key: "id", Value: 1},
|
||||
},
|
||||
Options: options.Index().SetUnique(true),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errs.Wrap(err)
|
||||
}
|
||||
return &Applet{
|
||||
coll: coll,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type Applet struct {
|
||||
coll *mongo.Collection
|
||||
}
|
||||
|
||||
func (o *Applet) Create(ctx context.Context, applets []*admin.Applet) error {
|
||||
return mongoutil.InsertMany(ctx, o.coll, applets)
|
||||
}
|
||||
|
||||
func (o *Applet) Del(ctx context.Context, ids []string) error {
|
||||
if len(ids) == 0 {
|
||||
return nil
|
||||
}
|
||||
return mongoutil.DeleteMany(ctx, o.coll, bson.M{"id": bson.M{"$in": ids}})
|
||||
}
|
||||
|
||||
func (o *Applet) Update(ctx context.Context, id string, data map[string]any) error {
|
||||
if len(data) == 0 {
|
||||
return nil
|
||||
}
|
||||
return mongoutil.UpdateOne(ctx, o.coll, bson.M{"id": id}, bson.M{"$set": data}, false)
|
||||
}
|
||||
|
||||
func (o *Applet) Take(ctx context.Context, id string) (*admin.Applet, error) {
|
||||
return mongoutil.FindOne[*admin.Applet](ctx, o.coll, bson.M{"id": id})
|
||||
}
|
||||
|
||||
func (o *Applet) Search(ctx context.Context, keyword string, pagination pagination.Pagination) (int64, []*admin.Applet, error) {
|
||||
filter := bson.M{}
|
||||
|
||||
if keyword != "" {
|
||||
filter = bson.M{
|
||||
"$or": []bson.M{
|
||||
{"name": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
{"id": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
{"app_id": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
{"version": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
},
|
||||
}
|
||||
}
|
||||
return mongoutil.FindPage[*admin.Applet](ctx, o.coll, filter, pagination)
|
||||
}
|
||||
|
||||
func (o *Applet) FindOnShelf(ctx context.Context) ([]*admin.Applet, error) {
|
||||
return mongoutil.Find[*admin.Applet](ctx, o.coll, bson.M{"status": constant.StatusOnShelf})
|
||||
}
|
||||
|
||||
func (o *Applet) FindID(ctx context.Context, ids []string) ([]*admin.Applet, error) {
|
||||
return mongoutil.Find[*admin.Applet](ctx, o.coll, bson.M{"id": bson.M{"$in": ids}})
|
||||
}
|
||||
84
pkg/common/db/model/admin/application.go
Normal file
84
pkg/common/db/model/admin/application.go
Normal file
@@ -0,0 +1,84 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"git.imall.cloud/openim/chat/pkg/common/db/table/admin"
|
||||
admindb "git.imall.cloud/openim/chat/pkg/common/db/table/admin"
|
||||
"github.com/openimsdk/tools/db/mongoutil"
|
||||
"github.com/openimsdk/tools/db/pagination"
|
||||
"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 NewApplication(db *mongo.Database) (admindb.ApplicationInterface, error) {
|
||||
coll := db.Collection("application")
|
||||
_, err := coll.Indexes().CreateMany(context.Background(), []mongo.IndexModel{
|
||||
{
|
||||
Keys: bson.D{
|
||||
{Key: "platform", Value: 1},
|
||||
{Key: "version", Value: 1},
|
||||
},
|
||||
Options: options.Index().SetUnique(true),
|
||||
},
|
||||
{
|
||||
Keys: bson.D{
|
||||
{Key: "latest", Value: -1},
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &ApplicationMgo{coll: coll}, nil
|
||||
}
|
||||
|
||||
type ApplicationMgo struct {
|
||||
coll *mongo.Collection
|
||||
}
|
||||
|
||||
func (a *ApplicationMgo) sort() any {
|
||||
return bson.D{{"latest", -1}, {"_id", -1}}
|
||||
}
|
||||
|
||||
func (a *ApplicationMgo) LatestVersion(ctx context.Context, platform string) (*admin.Application, error) {
|
||||
return mongoutil.FindOne[*admin.Application](ctx, a.coll, bson.M{"platform": platform}, options.FindOne().SetSort(a.sort()))
|
||||
}
|
||||
|
||||
func (a *ApplicationMgo) AddVersion(ctx context.Context, val *admin.Application) error {
|
||||
if val.ID.IsZero() {
|
||||
val.ID = primitive.NewObjectID()
|
||||
}
|
||||
return mongoutil.InsertMany(ctx, a.coll, []*admin.Application{val})
|
||||
}
|
||||
|
||||
func (a *ApplicationMgo) UpdateVersion(ctx context.Context, id primitive.ObjectID, update map[string]any) error {
|
||||
if len(update) == 0 {
|
||||
return nil
|
||||
}
|
||||
return mongoutil.UpdateOne(ctx, a.coll, bson.M{"_id": id}, bson.M{"$set": update}, true)
|
||||
}
|
||||
|
||||
func (a *ApplicationMgo) DeleteVersion(ctx context.Context, id []primitive.ObjectID) error {
|
||||
if len(id) == 0 {
|
||||
return nil
|
||||
}
|
||||
return mongoutil.DeleteMany(ctx, a.coll, bson.M{"_id": bson.M{"$in": id}})
|
||||
}
|
||||
|
||||
func (a *ApplicationMgo) PageVersion(ctx context.Context, platforms []string, page pagination.Pagination) (int64, []*admin.Application, error) {
|
||||
filter := bson.M{}
|
||||
if len(platforms) > 0 {
|
||||
filter["platform"] = bson.M{"$in": platforms}
|
||||
}
|
||||
return mongoutil.FindPage[*admin.Application](ctx, a.coll, filter, page, options.Find().SetSort(a.sort()))
|
||||
}
|
||||
|
||||
func (a *ApplicationMgo) FindPlatform(ctx context.Context, id []primitive.ObjectID) ([]string, error) {
|
||||
if len(id) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
return mongoutil.Find[string](ctx, a.coll, bson.M{"_id": bson.M{"$in": id}}, options.Find().SetProjection(bson.M{"_id": 0, "platform": 1}))
|
||||
}
|
||||
77
pkg/common/db/model/admin/client_config.go
Normal file
77
pkg/common/db/model/admin/client_config.go
Normal file
@@ -0,0 +1,77 @@
|
||||
// Copyright © 2023 OpenIM open source community. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package admin
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/openimsdk/tools/db/mongoutil"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
|
||||
"git.imall.cloud/openim/chat/pkg/common/db/table/admin"
|
||||
"github.com/openimsdk/tools/errs"
|
||||
)
|
||||
|
||||
func NewClientConfig(db *mongo.Database) (admin.ClientConfigInterface, error) {
|
||||
coll := db.Collection("client_config")
|
||||
_, err := coll.Indexes().CreateOne(context.Background(), mongo.IndexModel{
|
||||
Keys: bson.D{
|
||||
{Key: "key", Value: 1},
|
||||
},
|
||||
Options: options.Index().SetUnique(true),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errs.Wrap(err)
|
||||
}
|
||||
return &ClientConfig{
|
||||
coll: coll,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type ClientConfig struct {
|
||||
coll *mongo.Collection
|
||||
}
|
||||
|
||||
func (o *ClientConfig) Set(ctx context.Context, config map[string]string) error {
|
||||
for key, value := range config {
|
||||
filter := bson.M{"key": key}
|
||||
update := bson.M{
|
||||
"value": value,
|
||||
}
|
||||
err := mongoutil.UpdateOne(ctx, o.coll, filter, bson.M{"$set": update}, false, options.Update().SetUpsert(true))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (o *ClientConfig) Del(ctx context.Context, keys []string) error {
|
||||
return mongoutil.DeleteMany(ctx, o.coll, bson.M{"key": bson.M{"$in": keys}})
|
||||
}
|
||||
|
||||
func (o *ClientConfig) Get(ctx context.Context) (map[string]string, error) {
|
||||
cs, err := mongoutil.Find[*admin.ClientConfig](ctx, o.coll, bson.M{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
cm := make(map[string]string)
|
||||
for _, config := range cs {
|
||||
cm[config.Key] = config.Value
|
||||
}
|
||||
return cm, nil
|
||||
}
|
||||
86
pkg/common/db/model/admin/forbidden_account.go
Normal file
86
pkg/common/db/model/admin/forbidden_account.go
Normal file
@@ -0,0 +1,86 @@
|
||||
// Copyright © 2023 OpenIM open source community. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package admin
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/openimsdk/tools/db/mongoutil"
|
||||
"github.com/openimsdk/tools/db/pagination"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
|
||||
"git.imall.cloud/openim/chat/pkg/common/db/table/admin"
|
||||
"github.com/openimsdk/tools/errs"
|
||||
)
|
||||
|
||||
func NewForbiddenAccount(db *mongo.Database) (admin.ForbiddenAccountInterface, error) {
|
||||
coll := db.Collection("forbidden_account")
|
||||
_, err := coll.Indexes().CreateOne(context.Background(), mongo.IndexModel{
|
||||
Keys: bson.D{
|
||||
{Key: "user_id", Value: 1},
|
||||
},
|
||||
Options: options.Index().SetUnique(true),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errs.Wrap(err)
|
||||
}
|
||||
return &ForbiddenAccount{
|
||||
coll: coll,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type ForbiddenAccount struct {
|
||||
coll *mongo.Collection
|
||||
}
|
||||
|
||||
func (o *ForbiddenAccount) Create(ctx context.Context, ms []*admin.ForbiddenAccount) error {
|
||||
return mongoutil.InsertMany(ctx, o.coll, ms)
|
||||
}
|
||||
|
||||
func (o *ForbiddenAccount) Take(ctx context.Context, userID string) (*admin.ForbiddenAccount, error) {
|
||||
return mongoutil.FindOne[*admin.ForbiddenAccount](ctx, o.coll, bson.M{"user_id": userID})
|
||||
}
|
||||
|
||||
func (o *ForbiddenAccount) Delete(ctx context.Context, userIDs []string) error {
|
||||
if len(userIDs) == 0 {
|
||||
return nil
|
||||
}
|
||||
return mongoutil.DeleteMany(ctx, o.coll, bson.M{"user_id": bson.M{"$in": userIDs}})
|
||||
}
|
||||
|
||||
func (o *ForbiddenAccount) Find(ctx context.Context, userIDs []string) ([]*admin.ForbiddenAccount, error) {
|
||||
return mongoutil.Find[*admin.ForbiddenAccount](ctx, o.coll, bson.M{"user_id": bson.M{"$in": userIDs}})
|
||||
}
|
||||
|
||||
func (o *ForbiddenAccount) Search(ctx context.Context, keyword string, pagination pagination.Pagination) (int64, []*admin.ForbiddenAccount, error) {
|
||||
filter := bson.M{}
|
||||
|
||||
if keyword != "" {
|
||||
filter = bson.M{
|
||||
"$or": []bson.M{
|
||||
{"user_id": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
{"reason": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
{"operator_user_id": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
},
|
||||
}
|
||||
}
|
||||
return mongoutil.FindPage[*admin.ForbiddenAccount](ctx, o.coll, filter, pagination)
|
||||
}
|
||||
|
||||
func (o *ForbiddenAccount) FindAllIDs(ctx context.Context) ([]string, error) {
|
||||
return mongoutil.Find[string](ctx, o.coll, bson.M{}, options.Find().SetProjection(bson.M{"_id": 0, "user_id": 1}))
|
||||
}
|
||||
99
pkg/common/db/model/admin/invitation_register.go
Normal file
99
pkg/common/db/model/admin/invitation_register.go
Normal file
@@ -0,0 +1,99 @@
|
||||
// Copyright © 2023 OpenIM open source community. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package admin
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/openimsdk/tools/db/mongoutil"
|
||||
"github.com/openimsdk/tools/db/pagination"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
|
||||
"git.imall.cloud/openim/chat/pkg/common/constant"
|
||||
admindb "git.imall.cloud/openim/chat/pkg/common/db/table/admin"
|
||||
"github.com/openimsdk/tools/errs"
|
||||
)
|
||||
|
||||
func NewInvitationRegister(db *mongo.Database) (admindb.InvitationRegisterInterface, error) {
|
||||
coll := db.Collection("invitation_register")
|
||||
_, err := coll.Indexes().CreateOne(context.Background(), mongo.IndexModel{
|
||||
Keys: bson.D{
|
||||
{Key: "invitation_code", Value: 1},
|
||||
},
|
||||
Options: options.Index().SetUnique(true),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errs.Wrap(err)
|
||||
}
|
||||
return &InvitationRegister{
|
||||
coll: coll,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type InvitationRegister struct {
|
||||
coll *mongo.Collection
|
||||
}
|
||||
|
||||
func (o *InvitationRegister) Find(ctx context.Context, codes []string) ([]*admindb.InvitationRegister, error) {
|
||||
return mongoutil.Find[*admindb.InvitationRegister](ctx, o.coll, bson.M{"invitation_code": bson.M{"$in": codes}})
|
||||
}
|
||||
|
||||
func (o *InvitationRegister) Del(ctx context.Context, codes []string) error {
|
||||
if len(codes) == 0 {
|
||||
return nil
|
||||
}
|
||||
return mongoutil.DeleteMany(ctx, o.coll, bson.M{"invitation_code": bson.M{"$in": codes}})
|
||||
}
|
||||
|
||||
func (o *InvitationRegister) Create(ctx context.Context, v []*admindb.InvitationRegister) error {
|
||||
return mongoutil.InsertMany(ctx, o.coll, v)
|
||||
}
|
||||
|
||||
func (o *InvitationRegister) Take(ctx context.Context, code string) (*admindb.InvitationRegister, error) {
|
||||
return mongoutil.FindOne[*admindb.InvitationRegister](ctx, o.coll, bson.M{"code": code})
|
||||
}
|
||||
|
||||
func (o *InvitationRegister) Update(ctx context.Context, code string, data map[string]any) error {
|
||||
if len(data) == 0 {
|
||||
return nil
|
||||
}
|
||||
return mongoutil.UpdateOne(ctx, o.coll, bson.M{"invitation_code": code}, bson.M{"$set": data}, false)
|
||||
}
|
||||
|
||||
func (o *InvitationRegister) Search(ctx context.Context, keyword string, state int32, userIDs []string, codes []string, pagination pagination.Pagination) (int64, []*admindb.InvitationRegister, error) {
|
||||
filter := bson.M{}
|
||||
switch state {
|
||||
case constant.InvitationCodeUsed:
|
||||
filter = bson.M{"user_id": bson.M{"$ne": ""}}
|
||||
case constant.InvitationCodeUnused:
|
||||
filter = bson.M{"user_id": ""}
|
||||
}
|
||||
|
||||
if len(userIDs) > 0 {
|
||||
filter["user_id"] = bson.M{"$in": userIDs}
|
||||
}
|
||||
if len(codes) > 0 {
|
||||
filter["invitation_code"] = bson.M{"$in": codes}
|
||||
}
|
||||
if keyword != "" {
|
||||
filter["$or"] = []bson.M{
|
||||
{"invitation_code": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
{"user_id": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
}
|
||||
}
|
||||
return mongoutil.FindPage[*admindb.InvitationRegister](ctx, o.coll, filter, pagination)
|
||||
}
|
||||
95
pkg/common/db/model/admin/ip_forbidden.go
Normal file
95
pkg/common/db/model/admin/ip_forbidden.go
Normal file
@@ -0,0 +1,95 @@
|
||||
// Copyright © 2023 OpenIM open source community. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package admin
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/openimsdk/tools/db/mongoutil"
|
||||
"github.com/openimsdk/tools/db/pagination"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
|
||||
"git.imall.cloud/openim/chat/pkg/common/constant"
|
||||
admindb "git.imall.cloud/openim/chat/pkg/common/db/table/admin"
|
||||
"github.com/openimsdk/tools/errs"
|
||||
)
|
||||
|
||||
func NewIPForbidden(db *mongo.Database) (admindb.IPForbiddenInterface, error) {
|
||||
coll := db.Collection("ip_forbidden")
|
||||
_, err := coll.Indexes().CreateOne(context.Background(), mongo.IndexModel{
|
||||
Keys: bson.D{
|
||||
{Key: "ip", Value: 1},
|
||||
},
|
||||
Options: options.Index().SetUnique(true),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errs.Wrap(err)
|
||||
}
|
||||
return &IPForbidden{
|
||||
coll: coll,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type IPForbidden struct {
|
||||
coll *mongo.Collection
|
||||
}
|
||||
|
||||
func (o *IPForbidden) Take(ctx context.Context, ip string) (*admindb.IPForbidden, error) {
|
||||
return mongoutil.FindOne[*admindb.IPForbidden](ctx, o.coll, bson.M{"ip": ip})
|
||||
}
|
||||
|
||||
func (o *IPForbidden) Find(ctx context.Context, ips []string) ([]*admindb.IPForbidden, error) {
|
||||
return mongoutil.Find[*admindb.IPForbidden](ctx, o.coll, bson.M{"ip": bson.M{"$in": ips}})
|
||||
}
|
||||
|
||||
func (o *IPForbidden) Search(ctx context.Context, keyword string, state int32, pagination pagination.Pagination) (int64, []*admindb.IPForbidden, error) {
|
||||
filter := bson.M{}
|
||||
|
||||
switch state {
|
||||
case constant.LimitNil:
|
||||
case constant.LimitEmpty:
|
||||
filter = bson.M{"limit_register": 0, "limit_login": 0}
|
||||
case constant.LimitOnlyRegisterIP:
|
||||
filter = bson.M{"limit_register": 1, "limit_login": 0}
|
||||
case constant.LimitOnlyLoginIP:
|
||||
filter = bson.M{"limit_register": 0, "limit_login": 1}
|
||||
case constant.LimitRegisterIP:
|
||||
filter = bson.M{"limit_register": 1}
|
||||
case constant.LimitLoginIP:
|
||||
filter = bson.M{"limit_login": 1}
|
||||
case constant.LimitLoginRegisterIP:
|
||||
filter = bson.M{"limit_register": 1, "limit_login": 1}
|
||||
}
|
||||
|
||||
if keyword != "" {
|
||||
filter["$or"] = []bson.M{
|
||||
{"ip": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
}
|
||||
}
|
||||
return mongoutil.FindPage[*admindb.IPForbidden](ctx, o.coll, filter, pagination)
|
||||
}
|
||||
|
||||
func (o *IPForbidden) Create(ctx context.Context, ms []*admindb.IPForbidden) error {
|
||||
return mongoutil.InsertMany(ctx, o.coll, ms)
|
||||
}
|
||||
|
||||
func (o *IPForbidden) Delete(ctx context.Context, ips []string) error {
|
||||
if len(ips) == 0 {
|
||||
return nil
|
||||
}
|
||||
return mongoutil.DeleteMany(ctx, o.coll, bson.M{"ip": bson.M{"$in": ips}})
|
||||
}
|
||||
93
pkg/common/db/model/admin/limit_user_login_ip.go
Normal file
93
pkg/common/db/model/admin/limit_user_login_ip.go
Normal file
@@ -0,0 +1,93 @@
|
||||
// Copyright © 2023 OpenIM open source community. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package admin
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/openimsdk/tools/db/mongoutil"
|
||||
"github.com/openimsdk/tools/db/pagination"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
|
||||
"git.imall.cloud/openim/chat/pkg/common/db/table/admin"
|
||||
"github.com/openimsdk/tools/errs"
|
||||
)
|
||||
|
||||
func NewLimitUserLoginIP(db *mongo.Database) (admin.LimitUserLoginIPInterface, error) {
|
||||
coll := db.Collection("limit_user_login_ip")
|
||||
_, err := coll.Indexes().CreateOne(context.Background(), mongo.IndexModel{
|
||||
Keys: bson.D{
|
||||
{Key: "user_id", Value: 1},
|
||||
{Key: "ip", Value: 1},
|
||||
},
|
||||
Options: options.Index().SetUnique(true),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errs.Wrap(err)
|
||||
}
|
||||
return &LimitUserLoginIP{
|
||||
coll: coll,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type LimitUserLoginIP struct {
|
||||
coll *mongo.Collection
|
||||
}
|
||||
|
||||
func (o *LimitUserLoginIP) Create(ctx context.Context, ms []*admin.LimitUserLoginIP) error {
|
||||
return mongoutil.InsertMany(ctx, o.coll, ms)
|
||||
}
|
||||
|
||||
func (o *LimitUserLoginIP) Delete(ctx context.Context, ms []*admin.LimitUserLoginIP) error {
|
||||
return mongoutil.DeleteMany(ctx, o.coll, o.limitUserLoginIPFilter(ms))
|
||||
}
|
||||
|
||||
func (o *LimitUserLoginIP) Count(ctx context.Context, userID string) (uint32, error) {
|
||||
count, err := mongoutil.Count(ctx, o.coll, bson.M{"user_id": userID})
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return uint32(count), nil
|
||||
}
|
||||
|
||||
func (o *LimitUserLoginIP) Take(ctx context.Context, userID string, ip string) (*admin.LimitUserLoginIP, error) {
|
||||
return mongoutil.FindOne[*admin.LimitUserLoginIP](ctx, o.coll, bson.M{"user_id": userID, "ip": ip})
|
||||
}
|
||||
|
||||
func (o *LimitUserLoginIP) Search(ctx context.Context, keyword string, pagination pagination.Pagination) (int64, []*admin.LimitUserLoginIP, error) {
|
||||
filter := bson.M{
|
||||
"$or": []bson.M{
|
||||
{"user_id": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
{"ip": bson.M{"$regex": keyword, "$options": "i"}},
|
||||
},
|
||||
}
|
||||
return mongoutil.FindPage[*admin.LimitUserLoginIP](ctx, o.coll, filter, pagination)
|
||||
}
|
||||
|
||||
func (o *LimitUserLoginIP) limitUserLoginIPFilter(ips []*admin.LimitUserLoginIP) bson.M {
|
||||
if len(ips) == 0 {
|
||||
return nil
|
||||
}
|
||||
or := make(bson.A, 0, len(ips))
|
||||
for _, ip := range ips {
|
||||
or = append(or, bson.M{
|
||||
"user_id": ip.UserID,
|
||||
"ip": ip.IP,
|
||||
})
|
||||
}
|
||||
return bson.M{"$or": or}
|
||||
}
|
||||
76
pkg/common/db/model/admin/register_add_friend.go
Normal file
76
pkg/common/db/model/admin/register_add_friend.go
Normal file
@@ -0,0 +1,76 @@
|
||||
// Copyright © 2023 OpenIM open source community. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package admin
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/openimsdk/tools/db/mongoutil"
|
||||
"github.com/openimsdk/tools/db/pagination"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
|
||||
"git.imall.cloud/openim/chat/pkg/common/db/table/admin"
|
||||
"github.com/openimsdk/tools/errs"
|
||||
)
|
||||
|
||||
func NewRegisterAddFriend(db *mongo.Database) (admin.RegisterAddFriendInterface, error) {
|
||||
coll := db.Collection("register_add_friend")
|
||||
_, err := coll.Indexes().CreateOne(context.Background(), mongo.IndexModel{
|
||||
Keys: bson.D{
|
||||
{Key: "user_id", Value: 1},
|
||||
},
|
||||
Options: options.Index().SetUnique(true),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errs.Wrap(err)
|
||||
}
|
||||
return &RegisterAddFriend{
|
||||
coll: coll,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type RegisterAddFriend struct {
|
||||
coll *mongo.Collection
|
||||
}
|
||||
|
||||
func (o *RegisterAddFriend) Add(ctx context.Context, registerAddFriends []*admin.RegisterAddFriend) error {
|
||||
return mongoutil.InsertMany(ctx, o.coll, registerAddFriends)
|
||||
}
|
||||
|
||||
func (o *RegisterAddFriend) Del(ctx context.Context, userIDs []string) error {
|
||||
if len(userIDs) == 0 {
|
||||
return nil
|
||||
}
|
||||
return mongoutil.DeleteMany(ctx, o.coll, bson.M{"user_id": bson.M{"$in": userIDs}})
|
||||
}
|
||||
|
||||
func (o *RegisterAddFriend) FindUserID(ctx context.Context, userIDs []string) ([]string, error) {
|
||||
filter := bson.M{}
|
||||
if len(userIDs) > 0 {
|
||||
filter["user_id"] = bson.M{"$in": userIDs}
|
||||
}
|
||||
return mongoutil.Find[string](ctx, o.coll, filter, options.Find().SetProjection(bson.M{"_id": 0, "user_id": 1}))
|
||||
}
|
||||
|
||||
func (o *RegisterAddFriend) Search(ctx context.Context, keyword string, pagination pagination.Pagination) (int64, []*admin.RegisterAddFriend, error) {
|
||||
filter := bson.M{"user_id": bson.M{"$regex": keyword, "$options": "i"}}
|
||||
return mongoutil.FindPage[*admin.RegisterAddFriend](ctx, o.coll, filter, pagination)
|
||||
}
|
||||
|
||||
func (o *RegisterAddFriend) CountTotal(ctx context.Context) (int64, error) {
|
||||
return mongoutil.Count(ctx, o.coll, bson.M{})
|
||||
}
|
||||
90
pkg/common/db/model/admin/register_add_group.go
Normal file
90
pkg/common/db/model/admin/register_add_group.go
Normal file
@@ -0,0 +1,90 @@
|
||||
// Copyright © 2023 OpenIM open source community. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package admin
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/openimsdk/tools/db/mongoutil"
|
||||
"github.com/openimsdk/tools/db/pagination"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
|
||||
"git.imall.cloud/openim/chat/pkg/common/db/table/admin"
|
||||
"github.com/openimsdk/tools/errs"
|
||||
)
|
||||
|
||||
func NewRegisterAddGroup(db *mongo.Database) (admin.RegisterAddGroupInterface, error) {
|
||||
coll := db.Collection("register_add_group")
|
||||
_, err := coll.Indexes().CreateOne(context.Background(), mongo.IndexModel{
|
||||
Keys: bson.D{
|
||||
{Key: "group_id", Value: 1},
|
||||
},
|
||||
Options: options.Index().SetUnique(true),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errs.Wrap(err)
|
||||
}
|
||||
return &RegisterAddGroup{
|
||||
coll: coll,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type RegisterAddGroup struct {
|
||||
coll *mongo.Collection
|
||||
}
|
||||
|
||||
func (o *RegisterAddGroup) Add(ctx context.Context, registerAddGroups []*admin.RegisterAddGroup) error {
|
||||
return mongoutil.InsertMany(ctx, o.coll, registerAddGroups)
|
||||
}
|
||||
|
||||
func (o *RegisterAddGroup) Del(ctx context.Context, groupIDs []string) error {
|
||||
if len(groupIDs) == 0 {
|
||||
return nil
|
||||
}
|
||||
return mongoutil.DeleteMany(ctx, o.coll, bson.M{"group_id": bson.M{"$in": groupIDs}})
|
||||
}
|
||||
|
||||
func (o *RegisterAddGroup) FindGroupID(ctx context.Context, groupIDs []string) ([]string, error) {
|
||||
filter := bson.M{}
|
||||
if len(groupIDs) > 0 {
|
||||
filter["group_id"] = bson.M{"$in": groupIDs}
|
||||
}
|
||||
return mongoutil.Find[string](ctx, o.coll, filter, options.Find().SetProjection(bson.M{"_id": 0, "group_id": 1}))
|
||||
}
|
||||
|
||||
func (o *RegisterAddGroup) Search(ctx context.Context, keyword string, pagination pagination.Pagination) (int64, []*admin.RegisterAddGroup, error) {
|
||||
filter := bson.M{"group_id": bson.M{"$regex": keyword, "$options": "i"}}
|
||||
return mongoutil.FindPage[*admin.RegisterAddGroup](ctx, o.coll, filter, pagination)
|
||||
}
|
||||
|
||||
func (o *RegisterAddGroup) CountTotal(ctx context.Context) (int64, error) {
|
||||
return mongoutil.Count(ctx, o.coll, bson.M{})
|
||||
}
|
||||
|
||||
func (o *RegisterAddGroup) CountToday(ctx context.Context) (int64, error) {
|
||||
now := time.Now()
|
||||
todayStart := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
|
||||
todayEnd := todayStart.Add(24 * time.Hour)
|
||||
filter := bson.M{
|
||||
"create_time": bson.M{
|
||||
"$gte": todayStart,
|
||||
"$lt": todayEnd,
|
||||
},
|
||||
}
|
||||
return mongoutil.Count(ctx, o.coll, filter)
|
||||
}
|
||||
Reference in New Issue
Block a user