diff --git a/api/src/graphql/fragments/FBTeamFragment.js b/api/src/graphql/fragments/FBTeamFragment.js new file mode 100644 index 000000000..c97669032 --- /dev/null +++ b/api/src/graphql/fragments/FBTeamFragment.js @@ -0,0 +1,33 @@ +import gql from 'graphql-tag' + +const FB_TEAM_FRAGMENT = gql`{ + edges{ + node{ + id + name + slug + avatar + kind + status { + status + reason + createdAt + } + team { + id + name + slug + owner + profile { + avatar + banner + description + motto + updatedAt + } + } + } + } +}` + +module.exports = FB_TEAM_FRAGMENT diff --git a/api/src/graphql/resolvers/Query/FinancialBeing.js b/api/src/graphql/resolvers/Query/FinancialBeing.js index 7a9e66bb8..cca862c97 100644 --- a/api/src/graphql/resolvers/Query/FinancialBeing.js +++ b/api/src/graphql/resolvers/Query/FinancialBeing.js @@ -1,6 +1,7 @@ import { logger } from '../../../logger' import FB_FRAGMENT from '../../fragments/FBFragment' +import FB_TEAM_FRAGMENT from '../../fragments/FBTeamFragment' export const fbByFbId = async (parent, { fbId }, ctx, info) => { logger.info(`fbByFbId: ${fbId}`) @@ -15,3 +16,13 @@ export const fbByFbSlug = async (parent, { fbSlug }, ctx, info) => { logger.info(`fbByFbSlug response: ${JSON.stringify(await FB)}`) return FB[0] } + +export const fbByOwner = async (parent, { fbId, fbSlug }, ctx, info) => { + logger.info('teamsByOwner') + const authId = ctx.request.headers.userid + if (!authId) { + throw new AuthenticationError() + return + } + return ctx.db.query.financialBeingsesConnection({where: {AND:[{team:{members_some:{member:{authId: authId}}}},{OR:[{slug:fbSlug},{id:fbId}]}]}}, FB_TEAM_FRAGMENT) +} diff --git a/api/src/graphql/resolvers/Query/index.js b/api/src/graphql/resolvers/Query/index.js index ae71f3ec9..22e9a08cc 100644 --- a/api/src/graphql/resolvers/Query/index.js +++ b/api/src/graphql/resolvers/Query/index.js @@ -3,7 +3,7 @@ import { logger } from '../../../logger' import { member, owner } from './Member' import { teams, teamById, teamsByIds, teamByName, teamBySlug, teamWithRole, teamAuthorization, teamsByOwner, teamsByRole } from './Team' import{ fbByTeamMember } from './TeamMember' -import{ fbByFbId, fbByFbSlug } from './FinancialBeing' +import{ fbByFbId, fbByFbSlug, fbByOwner } from './FinancialBeing' export const resolvers = { Query: { @@ -19,6 +19,7 @@ export const resolvers = { teamsByRole: (parent, arg, ctx, info) => teamsByRole(parent, arg, ctx, info), owner: (parent, arg, ctx, info) => owner(parent, arg, ctx, info), fbByTeamMember: (parent, arg, ctx, info) => fbByTeamMember(parent, arg, ctx, info), + fbByOwner: (parent, arg, ctx, info) => fbByOwner(parent, arg, ctx, info), fbByFbId: (parent, arg, ctx, info) => fbByFbId(parent, arg, ctx, info), fbByFbSlug: (parent, arg, ctx, info) => fbByFbSlug(parent, arg, ctx, info) } diff --git a/api/src/graphql/schema.graphql b/api/src/graphql/schema.graphql index bb6a92cf0..e4bf0b0f7 100644 --- a/api/src/graphql/schema.graphql +++ b/api/src/graphql/schema.graphql @@ -1,4 +1,4 @@ -# import Query.TeamConnection, Team, FinancialBeings from "../generated/prisma.graphql" +# import Query.TeamConnection, Query.FinancialBeingsConnection, Team, FinancialBeings from "../generated/prisma.graphql" directive @isAuthenticated on QUERY | FIELD | MUTATION | FIELD_DEFINITION directive @hasRole(roles: [String]) on QUERY | FIELD | MUTATION | FIELD_DEFINITION @@ -17,6 +17,7 @@ type Query { teamsByOwner: [Team!]! @isAuthenticated teamsByRole: [Team!]! @isAuthenticated fbByTeamMember: Team @isAuthenticated + fbByOwner(fbId: String, fbSlug: String): FinancialBeingsConnection @isAuthenticated fbByFbId(fbId: String!): FinancialBeings fbByFbSlug(fbSlug: String!): FinancialBeings owner: Member @isAuthenticated