generate-daily.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. import {VercelRequest, VercelResponse} from '@vercel/node';
  2. import {initializeApp, cert} from 'firebase-admin/app';
  3. import {getFirestore} from 'firebase-admin/firestore';
  4. import {firestore} from "firebase-admin";
  5. import Timestamp = firestore.Timestamp;
  6. export default async function generateDaily(req: VercelRequest, res: VercelResponse) {
  7. const serviceAccount = require('./serviceAccountKey.json');
  8. initializeApp({
  9. credential: cert(serviceAccount)
  10. })
  11. const firestore = getFirestore();
  12. const exercisesSnapshot = await firestore.collection('Exercises').get();
  13. const exercises: FirebaseFirestore.DocumentData[] = [];
  14. exercisesSnapshot.forEach((exercise) => {
  15. exercises.push(firestore.collection('Exercises').doc(exercise.id));
  16. });
  17. const shuffled = exercises.sort(() => 0.5 - Math.random());
  18. const selected = shuffled.slice(0, 3);
  19. const bonus = exercises[Math.floor(Math.random() * exercises.length)];
  20. const dailyChallengesRef = firestore.collection('DailyChallenges');
  21. const firestoreRes = await dailyChallengesRef.add({
  22. date: Timestamp.fromDate(new Date()),
  23. list_exercises: selected,
  24. bonus_exercise: bonus,
  25. })
  26. res.json(firestoreRes);
  27. }