{"id":23159061,"url":"https://github.com/classfunc/firestore-querier","last_synced_at":"2025-04-04T18:41:55.793Z","repository":{"id":210092475,"uuid":"725714295","full_name":"ClassFunc/firestore-querier","owner":"ClassFunc","description":null,"archived":false,"fork":false,"pushed_at":"2023-11-30T18:17:51.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-10T19:55:13.429Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ClassFunc.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-30T18:09:53.000Z","updated_at":"2023-11-30T18:13:19.000Z","dependencies_parsed_at":null,"dependency_job_id":"f548e940-47f3-412d-b899-cfc1b0d5d9a4","html_url":"https://github.com/ClassFunc/firestore-querier","commit_stats":null,"previous_names":["classfunc/firestore-querier"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClassFunc%2Ffirestore-querier","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClassFunc%2Ffirestore-querier/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClassFunc%2Ffirestore-querier/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClassFunc%2Ffirestore-querier/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ClassFunc","download_url":"https://codeload.github.com/ClassFunc/firestore-querier/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247234844,"owners_count":20905852,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-17T22:28:52.350Z","updated_at":"2025-04-04T18:41:55.774Z","avatar_url":"https://github.com/ClassFunc.png","language":"JavaScript","readme":"## firestore-querier\n\nA simple tool to query firestore database.\n\n## Install:\n\n```bash\nnpm i -S firestore-querier\n```\n\n## Usage:\n\n```javascript\n\nconst {\nonSnapshotQueryWheres,\nonProcessExit,\n} = require('firestore-querier');\nconst firebase = require('firebase-admin');\nconst moment = require('moment');\n\nconst fromTime = moment().subtract(3, 'day').startOf('day').toDate();\nconst toTime = moment().endOf('day').toDate();\nconst state = 'SUCCESS'\n\nasync function checkMails() {\n\n    const unsub = onSnapshotQueryWheres(\n        firebase.firestore(), // firestore instance\n        \"mails\", // collection\n        [ // wheres\n            ['delivery.state', '==', state],\n            ['delivery.endTime', '\u003e=', fromTime],\n            ['delivery.endTime', '\u003c=', toTime],\n            { // query functions\n                orderBy: ['delivery.endTime', 'desc'],\n                limit: 10\n            },\n        ],\n        [ // filters returned docs \n            doc =\u003e !get(doc, 'template.name')?.includes('-stg'),\n        ],\n        [ // transforms\n            doc =\u003e {\n                const {delivery} = doc;\n                return {\n                    ...doc,\n                    delivery: {\n                        ...delivery,\n                        endTime: moment(delivery.endTime).format('YYYY-MM-DD_HH:mm:ss'),\n                        startTime: moment(delivery.startTime).format('YYYY-MM-DD_HH:mm:ss'),\n                    }\n                }\n            },\n            {\n                'delivery.endTime': val =\u003e val.toString(),\n                'delivery.startTime': val =\u003e val.toString(),\n            },\n        ],\n        [ // appendRootFields\n            'delivery.state',\n            'delivery.endTime',\n        ],\n        \n        // callback\n        (docs, changes) =\u003e {\n            console.table(docs);\n            // console.table(changes);\n        }\n    )\n\n    onProcessExit(() =\u003e {\n        unsub()\n    })\n}\n\nfunction main(){\n    checkMails()\n}\n\nmain()\n```\n\nRESULT:\n\n```bash\n┌─────────┬───────────────────────────────────────┬──────────────────────────────────────┬─────────────────────────────────────────────────────────┬──────────┬────────────────┬───────────────────────┐\n│ (index) │                  id                   │                  to                  │                        template                         │ delivery │ delivery.state │   delivery.endTime    │\n├─────────┼───────────────────────────────────────┼──────────────────────────────────────┼─────────────────────────────────────────────────────────┼──────────┼────────────────┼───────────────────────┤\n│    0    │ 'inviteCreateUserAnswerForm_FHIpH5rY' │ 'thanhnguyen123+owner@classfunc.com' │ { name: 'inviteUserAnswerFormEnglish', data: [Object] } │ [Object] │   'SUCCESS'    │ '2023-11-30_13:52:22' │\n│    1    │ 'inviteCreateUserAnswerForm_Cv6PysGF' │ 'thanhnguyen123+owner@classfunc.com' │ { data: [Object], name: 'inviteUserAnswerFormEnglish' } │ [Object] │   'SUCCESS'    │ '2023-11-30_13:49:43' │\n│    2    │ 'inviteCreateUserAnswerForm_dFLQjH1B' │ 'thanhnguyen123+owner@classfunc.com' │ { name: 'inviteUserAnswerFormEnglish', data: [Object] } │ [Object] │   'SUCCESS'    │ '2023-11-30_13:14:25' │\n│    3    │      'notificationsAnswer_SMNM3'      │  'hieunt+owner.prod@classfunc.com'   │     { data: [Object], name: 'notificationsAnswer' }     │ [Object] │   'SUCCESS'    │ '2023-11-30_11:24:30' │\n└─────────┴───────────────────────────────────────┴──────────────────────────────────────┴─────────────────────────────────────────────────────────┴──────────┴────────────────┴───────────────────────┘\n```\n\n## API:\n\n```javascript\n// returns unsubscribe function\nfunction onSnapshotQueryWheres(\nfirestoreInstance, // firestore instance, required\ncoll, // collection path, required\nwheres, // [[field, operator, value] || Record\u003cstring,any\u003e] || null \nfilters, // [doc =\u003e boolean] || null\ntransforms, // [doc =\u003e doc || Record\u003cstring,fn\u003e] || Record\u003cstring,fn\u003e || null\nappendRootFields, // [string] || null\ncallback, // (docs, changes) =\u003e {} || null\nonError // (error) =\u003e {} || null\n){\n    // ...\n}\n\n```\n```js\nonSnapshotQueryColl = onSnapshotQueryWheres\n```\n\n```javascript\n// returns list of docs\nasync function queryWheres(\n    firestoreInstance, \n    coll,\n    wheres, \n    filters, \n    transforms, \n    appendRootFields\n) {\n    // ...\n}\n\n```\n```js\nqueryColl = queryWheres\n```\n\n```javascript\n// returns doc data\nasync function queryDoc(\n    firestoreInstance, \n    docPath, \n    transforms, \n    appendRootFields\n) {\n    // ...\n}\n```\n```javascript\n// returns unsubscribe function\nfunction onSnapshotQueryDoc(\n    firestoreInstance, \n    docPath, \n    transforms,\n    appendRootFields, \n    callback, // (snapshot.data()) =\u003e {}\n    onError\n) {\n    // ...\n}\n```\n\n```javascript\nfunction onProcessExit(exitFn) {\n    // call unsubscribe functions\n}\n```\n\n\n## License\nMIT\n\n## Author\nClassFunc Softwares JSC.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclassfunc%2Ffirestore-querier","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclassfunc%2Ffirestore-querier","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclassfunc%2Ffirestore-querier/lists"}