12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- const mongoose = require('mongoose');
- const helper = require('./helper');
- const WorldSchema = new mongoose.Schema({
- _id: Number,
- randomNumber: Number
- }, {
- collection: 'world'
- });
- const World = mongoose.model('world', WorldSchema);
- const FortuneSchema = new mongoose.Schema({
- _id: Number,
- message: String
- }, {
- collection: 'fortune'
- });
- const Fortune = mongoose.model('fortune', FortuneSchema);
- const toClientWorld = (world) => {
- if (world) {
- world.id = world._id;
- delete world._id;
- }
- return world;
- };
- async function getRandomWorld() {
- return toClientWorld(await World.findOne({_id: helper.randomizeNum()}).lean().exec());
- }
- // Methods
- async function arrayOfRandomWorlds(totalWorldsToReturn) {
- const totalIterations = helper.sanititizeTotal(totalWorldsToReturn);
- const promises = [];
- for (let i = 1; i <= totalIterations; i++) {
- promises.push(getRandomWorld());
- }
- return await Promise.all(promises);
- }
- async function getAndUpdateRandomWorld() {
- // it would be nice to use findOneAndUpdate here, but for some reason the test fails with it.
- const world = await World.findOne({_id: helper.randomizeNum()}).lean().exec();
- world.randomNumber = helper.randomizeNum();
- await World.updateOne({
- _id: world._id
- }, {
- $set: {
- randomNumber: world.randomNumber
- }
- }).exec();
- return toClientWorld(world);
- }
- async function updateRandomWorlds(totalToUpdate) {
- const totalIterations = helper.sanititizeTotal(totalToUpdate);
- const promises = [];
- for (let i = 1; i <= totalIterations; i++) {
- promises.push(getAndUpdateRandomWorld());
- }
- return await Promise.all(promises);
- }
- const sayHello = () => {
- return JSON.stringify({
- message: "Hello, World!"
- });
- };
- module.exports = {
- Query: {
- helloWorld: () => sayHello(),
- getAllWorlds: async () => toClientWorld(await World.find({}).lean().exec()),
- singleDatabaseQuery: async () => toClientWorld(await World.findOne({_id: helper.randomizeNum()}).lean().exec()),
- multipleDatabaseQueries: async (parent, args) => await arrayOfRandomWorlds(args.total),
- getWorldById: async (parent, args) => toClientWorld(await World.findById(args.id).lean().exec()),
- getAllFortunes: async () => toClientWorld(await Fortune.find({}).lean().exec()),
- getRandomAndUpdate: async (parent, args) => await updateRandomWorlds(args.total)
- },
- Mutation: {
- createWorld: async (parent, args) => {
- const randInt = helper.randomizeNum();
- return await World.create({_id: null, randomNumber: randInt});
- },
- updateWorld: async (parent, args) => {
- return World.updateOne({_id: args.id}, {
- randomNumber: args.randomNumber
- }).exec();
- }
- }
- }
|