resource-watch/dataset

View on GitHub
src/serializers/dataset.serializer.js

Summary

Maintainability
B
5 hrs
Test Coverage
class DatasetSerializer {

    static serializeElement(el) {
        return {
            id: el._id,
            type: 'dataset',
            attributes: {
                name: el.name,
                slug: el.slug,
                type: el.type,
                subtitle: el.subtitle,
                application: el.application,
                dataPath: el.dataPath,
                attributesPath: el.attributesPath,
                connectorType: el.connectorType,
                provider: el.provider,
                userId: el.userId,
                connectorUrl: el.connectorUrl,
                sources: el.sources,
                tableName: el.tableName,
                status: el.status,
                published: el.published,
                overwrite: el.overwrite,
                subscribable: el.subscribable,
                mainDateField: el.mainDateField,
                env: el.env,
                applicationConfig: el.applicationConfig,
                geoInfo: el.geoInfo,
                protected: el.protected,
                legend: el.legend,
                clonedHost: el.clonedHost,
                errorMessage: el.errorMessage,
                taskId: el.taskId,
                createdAt: el.createdAt,
                updatedAt: el.updatedAt,
                dataLastUpdated: el.dataLastUpdated ? el.dataLastUpdated.toISOString() : null,
                metadata: el.metadata,
                widget: el.widget,
                layer: el.layer,
                vocabulary: el.vocabulary,
                graph: el.graph,
                user: el.user,
                widgetRelevantProps: el.widgetRelevantProps,
                layerRelevantProps: el.layerRelevantProps
            }
        };
    }

    static serialize(data, link = null) {
        const result = {};
        if (data && Array.isArray(data) && data.length === 0) {
            result.data = [];
            return result;
        }
        if (data) {
            if (data.docs) {
                while (data.docs.indexOf(undefined) >= 0) {
                    data.docs.splice(data.docs.indexOf(undefined), 1);
                }
                result.data = data.docs.map((el) => DatasetSerializer.serializeElement(el));
            } else if (Array.isArray(data) && data.length === 1) {
                result.data = DatasetSerializer.serializeElement(data[0]);
            } else if (Array.isArray(data)) {
                result.data = data.map(DatasetSerializer.serializeElement)
            } else {
                result.data = DatasetSerializer.serializeElement(data);
            }
        }
        if (link) {
            result.links = {
                self: `${link}page[number]=${data.page}&page[size]=${data.limit}`,
                first: `${link}page[number]=1&page[size]=${data.limit}`,
                last: `${link}page[number]=${data.pages}&page[size]=${data.limit}`,
                prev: `${link}page[number]=${data.page - 1 > 0 ? data.page - 1 : data.page}&page[size]=${data.limit}`,
                next: `${link}page[number]=${data.page + 1 < data.pages ? data.page + 1 : data.pages}&page[size]=${data.limit}`,
            };
            result.meta = {
                'total-pages': data.pages,
                'total-items': data.total,
                size: data.limit
            };
        }
        return result;
    }

}

module.exports = DatasetSerializer;