How to search a student ID by LINE ID and get grade from collection grade in firestore
firestore path user/{studentID}/Grade/{SubjectAutoKeyGen}
studentID doc use to where UserID = Line ID
SubjectAutoKeyGen doc use to where SubjectCode
'use strict';
const functions = require('firebase-functions');
const {WebhookClient, Card, Suggestion, Payload} = require('dialogflow-fulfillment');
const admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.applicationDefault(),
databaseURL: 'https://<YOUR-PROJECT-ID>.firebaseio.com'
});
const db = admin.firestore();
process.env.DEBUG = 'dialogflow:debug';
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
console.log('Dialogflow Request body: ' + JSON.stringify(request.body))
function Gradesubject(agent) {
let subject = request.body.queryResult.parameters.SubjectCode;
let ID = getUser(request.body.originalDetectIntentRequest.payload.data.source.userId).SID;
return db.collection('users').doc(ID).collection('Grade').where('SubjectCode', '==', subject).get()
.then(snap => {
if (snapshot.empty) {
agent.add('No matching documents.');
}
snapshot.forEach(doc => {
agent.add('Subject Code '+ doc.data().SubjectCode +"\nSubject Name "+ doc.data().SubjectName +"\nCredit "+ doc.data().Credit +" Semester "+ doc.data().Semester +" Year "+ doc.data().Year +"\nGrade "+ doc.data().Grade);
});
});
}
function getUser(LineID){
return db.collection('user').where('UserID', '==', LineID).get()
.then(snapshot => {
snapshot.forEach(doc => {
var SID = doc.data().StudentID.toString();
});
});
}
let intentMap = new Map();
intentMap.set('ask.grade - subject - custom',Gradesubject);
agent.handleRequest(intentMap);
});
Firestore Data Photo