Skip to content

Commit

Permalink
moved user schemas to user.schemas.ts
Browse files Browse the repository at this point in the history
  • Loading branch information
shema-surge committed Nov 11, 2024
1 parent 297a560 commit 0864e35
Show file tree
Hide file tree
Showing 5 changed files with 248 additions and 236 deletions.
4 changes: 2 additions & 2 deletions src/helpers/user.helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export const emailExpression =
export async function checkUserLoggedIn(
org: InstanceType<typeof Organization>,
context: Context
): Promise<(a?: Array<string>) => UserInterface> {
): Promise<(a?: Array<string>) => { user: UserInterface, orgUserData: OrgUserDataInterface }> {
const { userId, role } = context

if (!userId) {
Expand Down Expand Up @@ -76,6 +76,6 @@ export async function checkUserLoggedIn(
)
}

return user
return { user, orgUserData }
}
}
2 changes: 2 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ import invitationSchema from './schema/invitation.schema'
// import TableViewInvitationResolver from './resolvers/TableViewInvitationResolver'
import eventSchema from './schema/event.schema'
import './utils/cron-jobs/team-jobs'
import userSchema from './schema/user.schema'

const PORT: number = parseInt(process.env.PORT!) || 4000

Expand All @@ -66,6 +67,7 @@ export const typeDefs = mergeTypeDefs([
notificationSchema,
statisticsSchema,
eventSchema,
userSchema
])

export const resolvers = mergeResolvers([
Expand Down
218 changes: 101 additions & 117 deletions src/resolvers/userResolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import bcrypt, { compareSync, hashSync } from 'bcryptjs'
import { GraphQLError } from 'graphql'
// import * as jwt from 'jsonwebtoken'
import { JwtPayload, verify } from 'jsonwebtoken'
import mongoose, { Error } from 'mongoose'
import generateRandomPassword from '../helpers/generateRandomPassword'
import isAssigned from '../helpers/isAssignedToProgramOrCohort'
import { checkloginAttepmts } from '../helpers/logintracker'
Expand Down Expand Up @@ -36,6 +35,7 @@ import registrationRequest from '../utils/templates/registrationRequestTemplate'
import { EmailPattern } from '../utils/validation.utils'
import { Context } from './../context'
import { validateEmail, validatePasswordField, validateStringField, validateURLField } from '../validations'
import { use } from 'chai'
const octokit = new Octokit({ auth: `${process.env.Org_Repo_Access}` })

const SECRET: string = process.env.SECRET as string
Expand Down Expand Up @@ -118,7 +118,7 @@ const resolvers: any = {
return organization
},

async getSignupOrganization(_: any, { orgToken }: {orgToken: string}, context: Context) {
async getCurrentOrganization(_: any, { orgToken }: {orgToken: string}, context: Context) {
const org: InstanceType<typeof Organization> =
await checkLoggedInOrganization(orgToken)
;(await checkUserLoggedIn(org, context))(Object.values(RoleOfUser))
Expand All @@ -133,104 +133,85 @@ const resolvers: any = {
// }
// },

// async gitHubActivity(
// _: any,
// { organisation, username }: any,
// context: Context
// ) {
// ;(await checkUserLoggedIn(context))([
// RoleOfUser.ADMIN,
// RoleOfUser.COORDINATOR,
// 'trainee',
// RoleOfUser.MANAGER,
// 'ttl',
// ])
async gitHubActivity(
_: any,
{ orgToken}: { orgToken: string},
context: Context
) {
const org = await checkLoggedInOrganization(orgToken)
const {user, orgUserData} = (await checkUserLoggedIn(org, context))([
RoleOfUser.ADMIN,
RoleOfUser.COORDINATOR,
RoleOfUser.MANAGER,
RoleOfUser.TTL,
RoleOfUser.TRAINEE,
])

// const organisationExists = await Organization.findOne({
// name: organisation,
// })
// if (!organisationExists)
// throw new Error("This Organization doesn't exist")

// organisation = organisationExists.gitHubOrganisation

// const { data: checkOrg } = await octokit.orgs.get({ org: organisation })
// if (!checkOrg) {
// throw new GraphQLError('Organization Not found On GitHub', {
// extensions: {
// code: 'UserInputError',
// },
// })
// }
// const { data: checkUser } = await octokit.users.getByUsername({
// username: username,
// })
// if (!checkUser) {
// throw new GraphQLError('User Not found On Github', {
// extensions: {
// code: 'UserInputError',
// },
// })
// }
await orgUserData.populate('profile')

// let allRepos: any = []

// allRepos = organisationExists.activeRepos

// let pullRequestOpen = 0
// let pullRequestClosed = 0
// let pullRequestMerged = 0
// let pullRequestTotal = 0
// let allCommits = 0

// try {
// for (const repo of allRepos) {
// try {
// const response = await octokit.pulls.list({
// owner: organisation,
// repo: repo,
// state: 'all',
// sort: 'created',
// direction: 'desc',
// per_page: 200,
// })

// const pullRequests = response.data.filter(
// (pullRequest: any) => pullRequest.user.login === username
// )
// pullRequestTotal += pullRequests.length
// pullRequestOpen += pullRequests.filter(
// (pullRequest: any) => pullRequest.state === 'open'
// ).length
// pullRequestClosed += pullRequests.filter(
// (pullRequest: any) => pullRequest.state === 'closed'
// ).length
// pullRequestMerged += pullRequests.filter(
// (pullRequest: any) => pullRequest.merged_at != null
// ).length
// } catch (error) {
// console.error(
// `Error retrieving commits for repository ${repo.name}:`,
// error
// )
// throw new GraphQLError(
// 'Error retrieving commits for repository ${repo.name}:'
// )
// }
// }
// } catch (error) {
// console.error('Error retrieving repositories:', error)
// }
// return {
// totalCommits: pullRequestMerged,
// pullRequest: {
// merged: pullRequestMerged,
// closed: pullRequestClosed,
// opened: pullRequestOpen,
// },
// }
// },
// },
const { data: checkOrg } = await octokit.orgs.get({ org: org.gitHubOrganisation || "" })
if (!checkOrg) {
throw new GraphQLError('Organization Not found On GitHub', {
extensions: {
code: 'ORG_NOT_FOUND',
},
})
}
const { data: checkUser } = await octokit.users.getByUsername({
username: (orgUserData.profile as any).githubUsername || "",
})
if (!checkUser) {
throw new GraphQLError('User Not found On Github', {
extensions: {
code: 'USER_NOT_FOUND',
},
})
}

let pullRequestOpen = 0
let pullRequestClosed = 0
let pullRequestMerged = 0
let pullRequestTotal = 0
try {
for (const repo of org.activeRepos) {
const response = await octokit.pulls.list({
owner: org.gitHubOrganisation || "",
repo: repo,
state: 'all',
sort: 'created',
direction: 'desc',
per_page: 200,
})
const pullRequests = response.data.filter(
(pullRequest: any) => pullRequest.user.login === (orgUserData.profile as any).githubUsername
)
pullRequestTotal += pullRequests.length
pullRequestOpen += pullRequests.filter(
(pullRequest: any) => pullRequest.state === 'open'
).length
pullRequestClosed += pullRequests.filter(
(pullRequest: any) => pullRequest.state === 'closed'
).length
pullRequestMerged += pullRequests.filter(
(pullRequest: any) => pullRequest.merged_at != null
).length
}
} catch (error) {
throw new GraphQLError("Error retrieving repository information", {
extensions: {
code: "SERVER_ERROR"
}
})
}
return {
totalCommits: pullRequestMerged,
pullRequest: {
merged: pullRequestMerged,
closed: pullRequestClosed,
opened: pullRequestOpen,
},
}
},
// Login: {
// user: async (parent: any) => {
// const user = await User.findById(parent.user.id)
Expand Down Expand Up @@ -359,7 +340,7 @@ const resolvers: any = {
validateStringField(githubUsername, "please enter a valid githubUsername")
validateURLField(resume, "Please enter a valid resume url")
const org = await checkLoggedInOrganization(orgToken)
const user = (await checkUserLoggedIn(org, context))(Object.values(RoleOfUser))
const {user} = (await checkUserLoggedIn(org, context))(Object.values(RoleOfUser))

const profile = await Profile.findOneAndUpdate(
{ user: user._id },
Expand Down Expand Up @@ -443,8 +424,8 @@ const resolvers: any = {

async deleteUser(_: any, { userId, reason , orgToken}: {userId: string, reason?: string, orgToken: string}, context: Context) {
const org = await checkLoggedInOrganization(orgToken)
const requester = (await checkUserLoggedIn(org,context))([RoleOfUser.ADMIN, RoleOfUser.SUPER_ADMIN])
if (!requester) {
const {user} = (await checkUserLoggedIn(org,context))([RoleOfUser.ADMIN, RoleOfUser.SUPER_ADMIN])
if (!user) {
throw new GraphQLError('Requester does not exist',{
extensions: {
code: 'USER_NOT_FOUND'
Expand Down Expand Up @@ -476,9 +457,9 @@ const resolvers: any = {
cohort.coordinator = undefined
await cohort.save()
await pushNotification(
requester._id,
user._id,
`The coordinator of ${cohort.name} has been suspended. Please assign a new coordinator.`,
requester._id,
user._id,
org._id
)
}
Expand All @@ -490,9 +471,9 @@ const resolvers: any = {
hasTeam.ttl = undefined
await hasTeam.save()
await pushNotification(
requester._id,
user._id,
`The TTL of ${hasTeam.name} has been suspended. Please assign a new TTL.`,
requester._id,
user._id,
org._id
)
}
Expand All @@ -508,23 +489,25 @@ const resolvers: any = {
await pushNotification(
userToSuspend._id,
'Your account has been suspended and will no longer be able to access the system.',
requester._id,
user._id,
org._id
)
// Send confirmation notification to the requester/admin
await pushNotification(
requester._id,
user._id,
`You have successfully suspended the user with email: ${userToSuspend.email}.`,
requester._id,
user._id,
org._id,
)

return { message: 'User suspended successfully' }
return {
message: 'User suspended successfully'
}
},

async updateUserRole(_: any, { userId, role, orgToken }: {userId: string, role: RoleOfUser, orgToken: string}, context: Context) {
const org = await checkLoggedInOrganization(orgToken)
const user = (await checkUserLoggedIn(org, context))([RoleOfUser.ADMIN, RoleOfUser.SUPER_ADMIN])
const { user }= (await checkUserLoggedIn(org, context))([RoleOfUser.ADMIN, RoleOfUser.SUPER_ADMIN])
if (!Object.values(RoleOfUser).includes(role)) {
throw new GraphQLError("This role doesn't exist", {
extensions: {
Expand Down Expand Up @@ -586,7 +569,7 @@ const resolvers: any = {
},

//This section is to make org name login to be case insensitive
async loginOrg(_: any, { orgInput: { name } }: any) {
async loginOrg(_: any, { name }: { name: String }) {
const organization: any = await Organization.findOne({
name: { $regex: new RegExp('^' + name + '$', 'i') },
})
Expand Down Expand Up @@ -885,7 +868,7 @@ const resolvers: any = {
return org
},

async addsActiveRepostoOrganization(_: any, { repoUrl, orgToken}: {repoUrl: string, orgToken: string}, context: Context) {
async addActiveRepostoOrganization(_: any, { repoUrl, orgToken}: {repoUrl: string, orgToken: string}, context: Context) {
validateURLField(repoUrl, "Please provide a valid repoUrl")
const org = await checkLoggedInOrganization(orgToken)
;(await checkUserLoggedIn(org, context))([RoleOfUser.ADMIN, RoleOfUser.SUPER_ADMIN])
Expand All @@ -906,6 +889,7 @@ const resolvers: any = {
},

async deleteActiveRepostoOrganization(_: any, { repoUrl, orgToken}: {repoUrl: string, orgToken: string}, context: Context) {
validateURLField(repoUrl, "Please provide a valid repo URL")
const org = await checkLoggedInOrganization(orgToken)
;(await checkUserLoggedIn(org,context))([RoleOfUser.ADMIN,RoleOfUser.SUPER_ADMIN]);

Expand Down Expand Up @@ -986,7 +970,7 @@ const resolvers: any = {

async updateEmailNotifications(_: any, { orgToken }: { orgToken: string}, context: Context) {
const org = await checkLoggedInOrganization(orgToken)
const user = (await checkUserLoggedIn(org, context))(Object.values(RoleOfUser))
const { user } = (await checkUserLoggedIn(org, context))(Object.values(RoleOfUser))

const orgUserData = isPartOfOrganization(user, org)
orgUserData.emailNotifications = !orgUserData.emailNotifications
Expand All @@ -999,7 +983,7 @@ const resolvers: any = {

async updatePushNotifications(_: any, { orgToken}: {orgToken: string}, context: Context) {
const org = await checkLoggedInOrganization(orgToken)
const user = (await checkUserLoggedIn(org, context))(Object.values(RoleOfUser))
const { user } = (await checkUserLoggedIn(org, context))(Object.values(RoleOfUser))

const orgUserData = isPartOfOrganization(user, org)
orgUserData.pushNotifications = !orgUserData.pushNotifications
Expand All @@ -1012,11 +996,11 @@ const resolvers: any = {

async resetUserPassword(
_: any,
{ password, confirmPassword, token }: { password: string, confirmPassword: string, token: string}
{ password, confirmPassword, resetToken }: { password: string, confirmPassword: string, resetToken: string}
) {
validatePasswordField(password, "Please enter a valid new password")
validatePasswordField(confirmPassword, "Please enter a valid confirmation password")
const { email } = verify(token, SECRET) as JwtPayload
const { email } = verify(resetToken, SECRET) as JwtPayload
if (password !== confirmPassword) {
throw new GraphQLError("Passwords do not match",{
extensions: {
Expand Down Expand Up @@ -1048,7 +1032,7 @@ const resolvers: any = {
validatePasswordField(newPassword, "Please enter a valid new password")
validatePasswordField(confirmPassword, "Please enter a valid confirmation password")
const org = await checkLoggedInOrganization(orgToken)
const user = (await checkUserLoggedIn(org, context))(Object.values(RoleOfUser))
const { user } = (await checkUserLoggedIn(org, context))(Object.values(RoleOfUser))
if (newPassword !== confirmPassword) {
throw new GraphQLError("Passwords do not match",{
extensions: {
Expand Down
Loading

0 comments on commit 0864e35

Please sign in to comment.