setting up dashboard :)

This commit is contained in:
Riley Davis
2017-02-10 15:32:30 -07:00
parent 5c4daa72cb
commit d4e68de349
9 changed files with 112 additions and 14 deletions
+10
View File
@@ -46,6 +46,15 @@ const findOrCreateAssetByURL = (context, asset_url) => {
});
};
const getAssetsForMetrics = ({loaders: {Actions, Comments}}) => {
return Actions.getByTypes({action_type: 'FLAG', item_type: 'COMMENT'})
.then((actions) => { // ALL ACTIONS :O
const ids = actions.map(({item_id}) => item_id);
return Comments.getByQuery({ids});
});
};
/**
* Creates a set of loaders based on a GraphQL context.
* @param {Object} context the context of the GraphQL request
@@ -59,6 +68,7 @@ module.exports = (context) => ({
getByURL: (url) => findOrCreateAssetByURL(context, url),
getByID: new DataLoader((ids) => genAssetsByID(context, ids)),
getForMetrics: () => getAssetsForMetrics(context),
getAll: new util.SingletonResolver(() => AssetModel.find({}))
}
});
+9 -1
View File
@@ -34,7 +34,7 @@ const RootQuery = {
// Map the actions from the items referenced byt this query. The actions
// returned by this query are explicitly going to be distinct by their
// `item_id`'s.
let ids = actions.map((action) => action.item_id);
let ids = actions.map(({item_id}) => item_id);
// Perform the query using the available resolver.
return Comments.getByQuery({ids, statuses, asset_id, parent_id, limit, cursor, sort});
@@ -44,6 +44,14 @@ const RootQuery = {
return Comments.getByQuery(query);
},
metric(_, args, {user, loaders: {Assets}}) {
if (user == null || !user.hasRoles('ADMIN')) {
return null;
}
return Assets.getForMetrics();
},
// This returns the current user, ensure that if we aren't logged in, we
// return null.
me(_, args, {user}) {
+40
View File
@@ -167,6 +167,36 @@ interface ActionSummary {
current_user: Action
}
# A summary of actions for a specific action type on an Asset.
interface AssetActionSummary {
# Number of actions associated with actionable types on this this Asset.
actionCount: Int
# Number of unique actionable types that are referenced by the actions.
actionableItemCount: Int
}
# A summary of counts related to all the Likes on an Asset.
type LikeAssetActionSummary implements AssetActionSummary {
# Number of actions associated with actionable types on this this Asset.
actionCount: Int
# Number of unique actionable types that are referenced by the actions.
actionableItemCount: Int
}
# A summary of counts related to all the Flags on an Asset.
type FlagAssetActionSummary implements AssetActionSummary {
# Number of actions associated with actionable types on this this Asset.
actionCount: Int
# Number of unique actionable types that are referenced by the actions.
actionableItemCount: Int
}
# LikeAction is used by users who "like" a specific entity.
type LikeAction implements Action {
@@ -294,6 +324,13 @@ type Asset {
# The date that the asset was created.
created_at: Date
# Summary of all Actions against all entities associated with the Asset.
# (likes, flags, etc.)
action_summaries: [AssetActionSummary]
# Unique users that have commented on this Asset.
authorCount: Int
}
################################################################################
@@ -358,6 +395,9 @@ type RootQuery {
# The currently logged in user based on the request.
me: User
# metrics
metric: [Asset]
}
################################################################################