package dao import ( "context" "cid/model/entity" "gitee.com/red-future---jilin-g/common/mongo" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo/options" ) // applicationDao 应用DAO type applicationDao struct { } var Application = &applicationDao{} // Create 创建应用 func (d *applicationDao) Create(ctx context.Context, app *entity.Application) (string, error) { ids, err := mongo.DB().Insert(ctx, []interface{}{app}, "application") if err != nil { return "", err } if len(ids) > 0 { return ids[0].(string), nil } return "", nil } // GetByID 根据ID获取应用 func (d *applicationDao) GetByID(ctx context.Context, id string) (*entity.Application, error) { var app *entity.Application err := mongo.DB().FindOne(ctx, bson.M{"_id": id}, &app, "application") return app, err } // GetByTenantID 根据租户ID获取应用列表 func (d *applicationDao) GetByTenantID(ctx context.Context, tenantID string) ([]*entity.Application, error) { var apps []*entity.Application err := mongo.DB().Find(ctx, bson.M{"tenantId": tenantID}, &apps, "application") return apps, err } // GetByAPIKey 根据API密钥获取应用 func (d *applicationDao) GetByAPIKey(ctx context.Context, apiKey string) (*entity.Application, error) { var app *entity.Application err := mongo.DB().FindOne(ctx, bson.M{"appKey": apiKey}, &app, "application") return app, err } // Update 更新应用 func (d *applicationDao) Update(ctx context.Context, app *entity.Application) error { _, err := mongo.DB().Update(ctx, bson.M{"_id": app.Id}, bson.M{"$set": app}, "application") return err } // Delete 删除应用 func (d *applicationDao) Delete(ctx context.Context, id string) error { _, err := mongo.DB().Delete(ctx, bson.M{"_id": id}, "application") return err } // List 应用列表 func (d *applicationDao) List(ctx context.Context, tenantID string, page, pageSize int) ([]*entity.Application, int, error) { filter := bson.M{} if tenantID != "" { filter["tenantId"] = tenantID } var apps []*entity.Application total, err := mongo.DB().Count(ctx, filter, "application") if err != nil { return nil, 0, err } offset := (page - 1) * pageSize err = mongo.DB().Find(ctx, filter, &apps, "application", options.Find().SetSort(bson.M{"createdAt": -1}). SetSkip(int64(offset)). SetLimit(int64(pageSize))) if err != nil { return nil, 0, err } return apps, int(total), nil } // GetByName 根据名称获取应用 func (d *applicationDao) GetByName(ctx context.Context, name string) (*entity.Application, error) { var app *entity.Application err := mongo.DB().FindOne(ctx, bson.M{"name": name}, &app, "application") return app, err } // UpdateFields 更新应用部分字段 func (d *applicationDao) UpdateFields(ctx context.Context, id string, data *entity.Application) error { _, err := mongo.DB().Update(ctx, bson.M{"_id": id}, bson.M{"$set": data}, "application") return err }