Skip to content

Instantly share code, notes, and snippets.

String fetchScores = """
subscription fetchScores {
users(order_by: {score: desc}) {
name
score
}
}
""";
Subscription(
addAnswer(
String questionID,
String answerID,
) async {
String addAnswer = """
mutation addAnswer(\$questionID: uuid!, \$answerID: uuid!, \$userID: String!) {
insert_user_answers(objects: {question_id: \$questionID, answer_id: \$answerID}) {
affected_rows
}
}
String getQuestion = """
query GetQuestion(\$userID: String!) {
unanswered_questions(args: {userid: \$userID}, limit: 1) {
id
question
question_answers {
id
answer
is_correct
}
class MainApp extends StatelessWidget {
final FirebaseUser user;
final token;
const MainApp({Key key, this.token, this.user}) : super(key: key);
@override
Widget build(BuildContext context) {
final HttpLink httpLink = HttpLink(
uri: '<your-graphql-endpoint>',
final HttpsCallable callable =
CloudFunctions.instance.getHttpsCallable(
functionName: 'registerUser',
);
try {
await callable.call(<String, dynamic>{
'email': email.text,
'displayName': name.text,
'password': password.text
void main() => runApp(AuthCheck());
class AuthCheck extends StatefulWidget {
@override
_AuthCheckState createState() => _AuthCheckState();
}
class _AuthCheckState extends State<AuthCheck> {
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
FirebaseUser user;
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const request = require("graphql-request");
const client = new request.GraphQLClient('<your-graphql-endpoint>', {
headers: {
"content-type": "application/json",
"x-hasura-admin-secret": "<your-admin-secret>"
}
})
// INCREMENT USER SCORE IF THE ANSWER IS CORRECT
exports.checkAnswer = functions.https.onRequest( async (request, response) => {
const answerID = request.body.event.data.new.answer_id;
const userID = request.body.event.data.new.user_id;
const answerQuery = `
queryAnswer($answerID: uuid!) {
question_answers(where: {id: {_eq: $answerID}}) {
is_correct
}
// SYNC WITH HASURA ON USER DELETE
exports.processDelete = functions.auth.user().onDelete(async (user) => {
const mutation = `mutation($id: String!) {
delete_users(where: {id: {_eq: $id}}) {
affected_rows
}
}`;
const id = user.uid;
try {
const data = await client.request(mutation, {
// SYNC WITH HASURA ON USER CREATE
exports.processSignUp = functions.auth.user().onCreate(async user => {
const id = user.uid;
const email = user.email;
const name = user.displayName || "No Name";
const mutation = `mutation($id: String!, $email: String, $name: String) {
insert_users(objects: [{
id: $id,