https://github.com/classfunc/firestore-querier
https://github.com/classfunc/firestore-querier
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/classfunc/firestore-querier
- Owner: ClassFunc
- License: mit
- Created: 2023-11-30T18:09:53.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-11-30T18:17:51.000Z (over 2 years ago)
- Last Synced: 2025-03-10T19:55:13.429Z (about 1 year ago)
- Language: JavaScript
- Size: 6.84 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.MD
- License: LICENSE.txt
Awesome Lists containing this project
README
## firestore-querier
A simple tool to query firestore database.
## Install:
```bash
npm i -S firestore-querier
```
## Usage:
```javascript
const {
onSnapshotQueryWheres,
onProcessExit,
} = require('firestore-querier');
const firebase = require('firebase-admin');
const moment = require('moment');
const fromTime = moment().subtract(3, 'day').startOf('day').toDate();
const toTime = moment().endOf('day').toDate();
const state = 'SUCCESS'
async function checkMails() {
const unsub = onSnapshotQueryWheres(
firebase.firestore(), // firestore instance
"mails", // collection
[ // wheres
['delivery.state', '==', state],
['delivery.endTime', '>=', fromTime],
['delivery.endTime', '<=', toTime],
{ // query functions
orderBy: ['delivery.endTime', 'desc'],
limit: 10
},
],
[ // filters returned docs
doc => !get(doc, 'template.name')?.includes('-stg'),
],
[ // transforms
doc => {
const {delivery} = doc;
return {
...doc,
delivery: {
...delivery,
endTime: moment(delivery.endTime).format('YYYY-MM-DD_HH:mm:ss'),
startTime: moment(delivery.startTime).format('YYYY-MM-DD_HH:mm:ss'),
}
}
},
{
'delivery.endTime': val => val.toString(),
'delivery.startTime': val => val.toString(),
},
],
[ // appendRootFields
'delivery.state',
'delivery.endTime',
],
// callback
(docs, changes) => {
console.table(docs);
// console.table(changes);
}
)
onProcessExit(() => {
unsub()
})
}
function main(){
checkMails()
}
main()
```
RESULT:
```bash
┌─────────┬───────────────────────────────────────┬──────────────────────────────────────┬─────────────────────────────────────────────────────────┬──────────┬────────────────┬───────────────────────┐
│ (index) │ id │ to │ template │ delivery │ delivery.state │ delivery.endTime │
├─────────┼───────────────────────────────────────┼──────────────────────────────────────┼─────────────────────────────────────────────────────────┼──────────┼────────────────┼───────────────────────┤
│ 0 │ 'inviteCreateUserAnswerForm_FHIpH5rY' │ 'thanhnguyen123+owner@classfunc.com' │ { name: 'inviteUserAnswerFormEnglish', data: [Object] } │ [Object] │ 'SUCCESS' │ '2023-11-30_13:52:22' │
│ 1 │ 'inviteCreateUserAnswerForm_Cv6PysGF' │ 'thanhnguyen123+owner@classfunc.com' │ { data: [Object], name: 'inviteUserAnswerFormEnglish' } │ [Object] │ 'SUCCESS' │ '2023-11-30_13:49:43' │
│ 2 │ 'inviteCreateUserAnswerForm_dFLQjH1B' │ 'thanhnguyen123+owner@classfunc.com' │ { name: 'inviteUserAnswerFormEnglish', data: [Object] } │ [Object] │ 'SUCCESS' │ '2023-11-30_13:14:25' │
│ 3 │ 'notificationsAnswer_SMNM3' │ 'hieunt+owner.prod@classfunc.com' │ { data: [Object], name: 'notificationsAnswer' } │ [Object] │ 'SUCCESS' │ '2023-11-30_11:24:30' │
└─────────┴───────────────────────────────────────┴──────────────────────────────────────┴─────────────────────────────────────────────────────────┴──────────┴────────────────┴───────────────────────┘
```
## API:
```javascript
// returns unsubscribe function
function onSnapshotQueryWheres(
firestoreInstance, // firestore instance, required
coll, // collection path, required
wheres, // [[field, operator, value] || Record] || null
filters, // [doc => boolean] || null
transforms, // [doc => doc || Record] || Record || null
appendRootFields, // [string] || null
callback, // (docs, changes) => {} || null
onError // (error) => {} || null
){
// ...
}
```
```js
onSnapshotQueryColl = onSnapshotQueryWheres
```
```javascript
// returns list of docs
async function queryWheres(
firestoreInstance,
coll,
wheres,
filters,
transforms,
appendRootFields
) {
// ...
}
```
```js
queryColl = queryWheres
```
```javascript
// returns doc data
async function queryDoc(
firestoreInstance,
docPath,
transforms,
appendRootFields
) {
// ...
}
```
```javascript
// returns unsubscribe function
function onSnapshotQueryDoc(
firestoreInstance,
docPath,
transforms,
appendRootFields,
callback, // (snapshot.data()) => {}
onError
) {
// ...
}
```
```javascript
function onProcessExit(exitFn) {
// call unsubscribe functions
}
```
## License
MIT
## Author
ClassFunc Softwares JSC.