當前位置: 首頁>>代碼示例>>TypeScript>>正文


TypeScript ModelManager.getModelMeta方法代碼示例

本文整理匯總了TypeScript中rev-models.ModelManager.getModelMeta方法的典型用法代碼示例。如果您正苦於以下問題:TypeScript ModelManager.getModelMeta方法的具體用法?TypeScript ModelManager.getModelMeta怎麽用?TypeScript ModelManager.getModelMeta使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在rev-models.ModelManager的用法示例。


在下文中一共展示了ModelManager.getModelMeta方法的8個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。

示例1: if

    /**
     * @private
     */
    async create<T extends IModel>(manager: ModelManager, model: T, params: ICreateParams, result: ModelOperationResult<T, ICreateMeta>): Promise<ModelOperationResult<T, ICreateMeta>> {
        const meta = manager.getModelMeta(model);

        const document: IKeyMap<number> = {};
        let fieldList = Object.keys(meta.fieldsByName);
        for (let fieldName of fieldList) {
            let field = meta.fieldsByName[fieldName];
            if (field.options.stored) {
                if (field instanceof fields.AutoNumberField
                        && typeof model[fieldName] == 'undefined') {
                    document[fieldName] = await this._getNextAutoNumberValue(meta.name, fieldName);
                }
                else if (typeof model[fieldName] != 'undefined') {
                    let value = field.toBackendValue(manager, model[fieldName]);
                    if (typeof value != 'undefined') {
                        document[fieldName] = value;
                    }
                }
            }
        }

        const colName = this._getCollectionName(meta);
        const createResult = await this.db.collection(colName).insertOne(document);
        if (createResult.insertedCount != 1) {
            throw new Error('mongodb insert failed'); // TODO: Something nicer
        }

        result.result = manager.hydrate(meta.ctor, document);
        return result;
    }
開發者ID:RevFramework,項目名稱:rev-framework,代碼行數:33,代碼來源:backend.ts

示例2: Error

    /**
     * @private
     */
    async update<T extends IModel>(manager: ModelManager, model: T, params: IUpdateParams, result: ModelOperationResult<T, IUpdateMeta>): Promise<ModelOperationResult<T, IUpdateMeta>> {
        if (!params.where) {
            throw new Error(`update() requires the 'where' option to be set.`);
        }

        let meta = manager.getModelMeta(model);
        const mongoQuery = convertQuery(manager, meta.ctor, params.where);

        const fieldUpdates: IKeyMap<any> = {};
        params.fields!.forEach((fieldName) => {
            const field = meta.fieldsByName[fieldName];
            if (field.options.stored && typeof model[fieldName] != 'undefined') {
                let value = field.toBackendValue(manager, model[fieldName]);
                if (typeof value != 'undefined') {
                    fieldUpdates[fieldName] = value;
                }
            }
        });

        const colName = this._getCollectionName(meta);
        const updateResult = await this.db.collection(colName).updateMany(mongoQuery, { $set: fieldUpdates });

        result.setMeta({ totalCount: updateResult.matchedCount });
        return result;
    }
開發者ID:RevFramework,項目名稱:rev-framework,代碼行數:28,代碼來源:backend.ts

示例3:

 /**
  * @private
  */
 async create<T extends IModel>(manager: ModelManager, model: T, options: ICreateOptions, result: ModelOperationResult<T, ICreateMeta>): Promise<ModelOperationResult<T, ICreateMeta>> {
     const meta = manager.getModelMeta(model);
     const data = this._buildGraphQLModelData(manager, meta, model);
     const mutationName = meta.name + '_create';
     const query = {
         mutation: {
             [mutationName]: {
                 __args: {
                     model: data
                 }
             }
         }
     };
     const httpResult = await this._getGraphQLQueryResult(query);
     if (!httpResult.data.data
         || !httpResult.data.data[mutationName]) {
         throw this._createHttpError('GraphQL response did not contain the expected operation results', httpResult);
     }
     const createResult: ModelOperationResult<any, ICreateMeta> = httpResult.data.data[mutationName];
     result.success = createResult.success;
     result.validation = createResult.validation;
     if (createResult.result) {
         result.result = manager.hydrate(meta.ctor, createResult.result);
     }
     return result;
 }
開發者ID:RevFramework,項目名稱:rev-framework,代碼行數:29,代碼來源:backend.ts

示例4: Error

    /**
     * @private
     */
    async update<T extends IModel>(manager: ModelManager, model: T, options: IUpdateOptions, result: ModelOperationResult<T, IUpdateMeta>): Promise<ModelOperationResult<T, IUpdateMeta>> {

        if (!options.where) {
            throw new Error(`update() requires the 'where' option to be set.`);
        }

        const meta = manager.getModelMeta(model);
        const data = this._buildGraphQLModelData(manager, meta, model, options.fields);
        const mutationName = meta.name + '_update';
        let args: any = {
            model: data
        };
        if (options.where) {
            args.where = options.where;
        }
        const query = {
            mutation: {
                [mutationName]: {
                    __args: args
                }
            }
        };
        const httpResult = await this._getGraphQLQueryResult(query);
        if (!httpResult.data.data
            || !httpResult.data.data[mutationName]) {
            throw this._createHttpError('GraphQL response did not contain the expected operation results', httpResult);
        }
        const updateResult: ModelOperationResult<any, IUpdateMeta> = httpResult.data.data[mutationName];
        result.success = updateResult.success;
        result.validation = updateResult.validation;
        result.meta = updateResult.meta;
        return result;
    }
開發者ID:RevFramework,項目名稱:rev-framework,代碼行數:36,代碼來源:backend.ts

示例5: new

 /**
  * @private
  */
 async read<T extends IModel>(manager: ModelManager, model: new() => T, options: IReadOptions, result: ModelOperationResult<T, IReadMeta>): Promise<ModelOperationResult<T, IReadMeta>> {
     const meta = manager.getModelMeta(model);
     const query = this._buildGraphQLQuery(manager, meta, options);
     const httpResult = await this._getGraphQLQueryResult(query);
     if (!httpResult.data.data
         || !httpResult.data.data[meta.name]
         || !(httpResult.data.data[meta.name].results instanceof Array)) {
         throw this._createHttpError('GraphQL response did not contain the expected model results', httpResult);
     }
     const returnedData = httpResult.data.data[meta.name].results;
     result.results = [];
     returnedData.forEach((record: any) => {
         result.results!.push(this._hydrateRecordWithRelated(manager, meta, record, options.related));
     });
     const returnedMeta = httpResult.data.data[meta.name].meta;
     result.setMeta(returnedMeta);
     return result;
 }
開發者ID:RevFramework,項目名稱:rev-framework,代碼行數:21,代碼來源:backend.ts

示例6: _buildGraphQLSelectFields

 /**
  * Builds an object representing all the graphql nodes to select for the specified query
  */
 private _buildGraphQLSelectFields(manager: ModelManager, meta: IModelMeta<any>, fieldObj: any, related?: string[]) {
     for (const field of meta.fields) {
         if (field instanceof fields.RelatedModelFieldBase) {
             if (related) {
                 // If this field is a RelatedModel field and it is in the list of "related" fields to select, then
                 // select the field and all of its child scalar fields
                 const relFieldNames = getOwnRelatedFieldNames(related);
                 if (field instanceof fields.RelatedModelFieldBase && relFieldNames.indexOf(field.name) > -1) {
                     const relMeta = manager.getModelMeta(field.options.model);
                     fieldObj[field.name] = {};
                     const childRelFieldNames = getChildRelatedFieldNames(field.name, related);
                     this._buildGraphQLSelectFields(manager, relMeta, fieldObj[field.name], childRelFieldNames);
                 }
             }
         }
         else {
             fieldObj[field.name] = true;
         }
     }
     return fieldObj;
 }
開發者ID:RevFramework,項目名稱:rev-framework,代碼行數:24,代碼來源:backend.ts

示例7: if

            meta.fields.forEach((field) => {
                if (relFieldNames.indexOf(field.name) > -1 && typeof recordData[field.name] != 'undefined') {

                    const relMeta = manager.getModelMeta(field.options.model);
                    const childRelFieldNames = getChildRelatedFieldNames(field.name, related);

                    if (field instanceof fields.RelatedModelField) {
                        if (recordData[field.name] == null) {
                            model[field.name] = null;
                        }
                        else {
                            model[field.name] = this._hydrateRecordWithRelated(manager, relMeta, recordData[field.name], childRelFieldNames);
                        }
                    }
                    else if (field instanceof fields.RelatedModelListField && recordData[field.name] instanceof Array) {
                        model[field.name] = [];
                        recordData[field.name].forEach((record: any) => {
                            model[field.name].push(this._hydrateRecordWithRelated(manager, relMeta, record, childRelFieldNames));
                        });
                    }
                }
            });
開發者ID:RevFramework,項目名稱:rev-framework,代碼行數:22,代碼來源:backend.ts

示例8: new

    /**
     * @private
     */
    async read<T extends IModel>(manager: ModelManager, model: new() => T, params: IReadParams, result: ModelOperationResult<T, IReadMeta>): Promise<ModelOperationResult<T, IReadMeta>> {
        const meta = manager.getModelMeta(model);
        const colName = this._getCollectionName(meta);

        const mongoQuery = convertQuery(manager, model, params.where);

        const records = await this.db.collection(colName)
            .find(mongoQuery)
            .sort(this._convertOrderBy(params.orderBy))
            .skip(params.offset)
            .limit(params.limit)
            .toArray();

        const primaryKeyValues: any[] = [];
        const foreignKeyValues: IForeignKeyValues = {};
        const rawValues: IRawValues = [];
        const relatedFieldNames = getOwnRelatedFieldNames(params.related);

        result.results = [];
        records.forEach((record) => {

            const modelInstance = manager.hydrate(meta.ctor, record);
            result.results!.push(modelInstance);

            if (meta.primaryKey) {
                primaryKeyValues.push(modelInstance[meta.primaryKey]);
            }

            // TODO: Refactor this into a method shared with InMemoryBackend (and future backends)
            if (relatedFieldNames) {
                for (let fieldName of relatedFieldNames) {
                    let field = meta.fieldsByName[fieldName];
                    let keyValue = record[fieldName];
                    if (field instanceof fields.RelatedModelField) {
                        if (!(fieldName in foreignKeyValues)) {
                            foreignKeyValues[fieldName] = [];
                        }
                        if (typeof keyValue != 'undefined' && keyValue !== null) {
                            modelInstance[fieldName] = keyValue;
                            if (foreignKeyValues[fieldName].indexOf(keyValue) == -1) {
                                foreignKeyValues[fieldName].push(keyValue);
                            }
                        }
                        else {
                            modelInstance[fieldName] = null;
                        }
                    }
                }
            }

            if (params.rawValues) {
                let rawValueObj: IRawValueRow = {};
                for (let fieldName of params.rawValues) {
                    rawValueObj[fieldName] = record[fieldName];
                }
                rawValues.push(rawValueObj);
            }
        });

        // TODO: Refactor this into a method shared with InMemoryBackend (and future backends)
        if (relatedFieldNames) {
            // Get related record data
            const related = await Promise.all([
                getRelatedModelInstances(manager, meta, foreignKeyValues, params),
                getRelatedModelListInstances(manager, meta, primaryKeyValues, params)
            ]);
            const [relatedModelInstances, relatedModelListInstances] = related;

            for (let instance of result.results) {
                for (let fieldName of relatedFieldNames) {
                    let field = meta.fieldsByName[fieldName];
                    if (field instanceof fields.RelatedModelField) {
                        if (instance[fieldName] !== null
                            && relatedModelInstances[fieldName]
                            && relatedModelInstances[fieldName][instance[fieldName]]) {
                                instance[fieldName] = relatedModelInstances[fieldName][instance[fieldName]];
                        }
                        else {
                            instance[fieldName] = null;
                        }
                    }
                    else if (field instanceof fields.RelatedModelListField) {
                        if (relatedModelListInstances[fieldName]
                            && relatedModelListInstances[fieldName][instance[meta.primaryKey!]]) {
                                instance[fieldName] = relatedModelListInstances[fieldName][instance[meta.primaryKey!]];
                        }
                        else {
                            instance[fieldName] = [];
                        }
                    }
                }
            }
        }

        if (params.rawValues) {
            result.setMeta({ rawValues });
        }
//.........這裏部分代碼省略.........
開發者ID:RevFramework,項目名稱:rev-framework,代碼行數:101,代碼來源:backend.ts


注:本文中的rev-models.ModelManager.getModelMeta方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。