Files
node_learning_module_1/day11/resolvers/all/allLinks.js
T
ryanwong a07577bffa day 11
2022-02-06 22:15:10 -05:00

57 lines
1.3 KiB
JavaScript
Executable File

"use strict";
/*Powered By: Manaknightdigital Inc. https://manaknightdigital.com/ Year: 2021*/
/**
* links Resolve All
* @copyright 2021 Manaknightdigital Inc.
* @link https://manaknightdigital.com
* @license Proprietary Software licensing
* @author Ryan Wong
*
*/
const { ApolloError } = require('apollo-server-express');
const Sequelize = require('sequelize');
const { last } = require('lodash');
const graphqlFields = require('graphql-fields');
module.exports = async (_, { first, after }, { db, credential }, info) => {
//Check Auth if user allowed
try {
const attributes = db.links.intersection(graphqlFields(info).edges.node);
const options = {
where: {},
limit: first,
attributes,
};
if (after) {
options.where = {
id: {
[Sequelize.Op.gt]: after,
},
};
}
const { count, rows } = await db.links.findAndCountAll(options);
const edges = rows.map((links) => ({
cursor: links.id,
node: links,
}));
const pageInfo = {
endCursor: last(edges).cursor,
hasNextPage: 0 < count - first,
};
return {
edges,
pageInfo,
};
} catch (error) {
console.log('links -> error', error);
return new ApolloError('InternalServerError');
}
}