Skip to content

Commit

Permalink
Merge services org and webhook into repo to resolve circular deps
Browse files Browse the repository at this point in the history
There was a circular dependency between repo, org and webhook
that prevented webhook calls from GitHub from being serviced.
Merging those files together resolves the circular dependency.

Resolves: #1044
  • Loading branch information
gtjoseph committed Feb 22, 2024
1 parent f895b5c commit e827e3e
Show file tree
Hide file tree
Showing 10 changed files with 320 additions and 340 deletions.
4 changes: 2 additions & 2 deletions src/server/src/api/cla.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ const Joi = require('joi')
const github = require('../services/github')
const cla = require('../services/cla')
const status = require('../services/status')
const repoService = require('../services/repo')
const orgService = require('../services/org')
const repoService = require('../services/repo').repoService
const orgService = require('../services/repo').orgService
const prService = require('../services/pullRequest')
const logger = require('../services/logger')
const utils = require('../middleware/utils')
Expand Down
19 changes: 9 additions & 10 deletions src/server/src/api/org.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@
//
// SPDX-License-Identifier: Apache-2.0

const org = require('../services/org')
const github = require('../services/github')
const log = require('../services/logger')
const Joi = require('joi')
const webhook = require('./webhook')
const logger = require('../services/logger')
const utils = require('../middleware/utils')
const orgService = require('../services/org')
const orgService = require('../services/repo').orgService
const newOrgSchema = Joi.object().keys({
orgId: Joi.number().required(),
org: Joi.string().required(),
Expand Down Expand Up @@ -40,7 +39,7 @@ class OrgAPI {
}
let dbOrg
try {
dbOrg = await org.get(query)
dbOrg = await orgService.get(query)
} catch (error) {
logger.info(new Error(error).stack)
}
Expand All @@ -57,7 +56,7 @@ class OrgAPI {
return 'GitHub App not installed or insufficient permissions'
}

dbOrg = await org.create(req.args)
dbOrg = await orgService.create(req.args)

try {
await webhook.create(req)
Expand All @@ -71,18 +70,18 @@ class OrgAPI {
req.args.token = req.args.token || req.user.token
utils.validateArgs(req.args, newOrgSchema, true)

return org.update(req.args)
return orgService.update(req.args)
}

async getForUser(req) {
try {
const res = await this.getGHOrgsForUser(req)
const argsForOrg = {
orgId: res.map((org) => org.id)
orgId: res.map((org) => orgService.id)
}
const orgs = JSON.parse(JSON.stringify(await org.getMultiple(argsForOrg)))
const orgs = JSON.parse(JSON.stringify(await orgService.getMultiple(argsForOrg)))
return orgs.map((org) => {
org.migrate = !!org.token
orgService.migrate = !!orgService.token
return org
})
} catch (error) {
Expand Down Expand Up @@ -168,11 +167,11 @@ class OrgAPI {
throw new Error('User is undefined')
}
// update(req, done){
// org.update(req.args, done)
// orgService.update(req.args, done)
// }
async remove(req) {
utils.validateArgs(req.args, removeOrgSchema)
const dbOrg = await org.remove(req.args)
const dbOrg = await orgService.remove(req.args)
if (!dbOrg) {
throw new Error('Organization is not Found')
}
Expand Down
30 changes: 15 additions & 15 deletions src/server/src/api/repo.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// SPDX-License-Identifier: Apache-2.0

// module
const repo = require('../services/repo')
const repoService = require('../services/repo').repoService
const logger = require('../services/logger')
const Joi = require('joi')
const webhook = require('./webhook')
Expand Down Expand Up @@ -32,17 +32,17 @@ const REPOREMOVESCHEMA = Joi.alternatives().try(Joi.object().keys({
}))

module.exports = {
check: (req) => repo.check(req.args),
check: (req) => repoService.check(req.args),
migrate: async (req) => {
return await repo.migrate(req.args)
return await repoService.migrate(req.args)
},
migrationPending: async (req) => {
if (!req.user || !req.user.login) {
throw 'Invalid user'
}
const pending = await repo.getMigrationPending(req.user.login)
const pending = await repoService.getMigrationPending(req.user.login)
return pending.map(repo => {
return { owner: repo.owner, repo: repo.repo, id: repo.repoId }
return { owner: repoService.owner, repo: repoService.repo, id: repoService.repoId }
})
},
create: async (req) => {
Expand All @@ -52,7 +52,7 @@ module.exports = {
repo: req.args.repo,
owner: req.args.owner,
}
const dbRepo = await repo.get(repoArgs)
const dbRepo = await repoService.get(repoArgs)

// repo not yet in database: create
if (!dbRepo) {
Expand All @@ -64,7 +64,7 @@ module.exports = {
throw 'GitHub App not installed'
}

const createdRepo = await repo.create(req.args)
const createdRepo = await repoService.create(req.args)
if (createdRepo.gist) {
try {
await webhook.create(req)
Expand All @@ -76,34 +76,34 @@ module.exports = {
}

// repo already in database: check for update
const ghRepo = await repo.getGHRepo(repoArgs)
const ghRepo = await repoService.getGHRepo(repoArgs)
if (ghRepo && ghRepo.id !== dbRepo.repoId) {
return repo.update(req.args)
return repoService.update(req.args)
}

throw 'This repository is already linked.'
},
// get: function(req, done){
// repo.get(req.args, function(err, found_repo){
// if (!found_repo || err || found_repo.owner !== req.user.login) {
// repoService.get(req.args, function(err, found_repo){
// if (!found_repo || err || found_repoService.owner !== req.user.login) {
// log.warn(err)
// done(err)
// return
// }
// done(err, found_repo)
// })
// },
getAll: (req) => repo.getAll(req.args),
getAllAppAccess: (req) => repo.getAllAccessibleByApp(req.user.token),
getAll: (req) => repoService.getAll(req.args),
getAllAppAccess: (req) => repoService.getAllAccessibleByApp(req.user.token),
update: (req) => {
req.args.token = req.args.token || req.user.token
utils.validateArgs(req.args, REPOCREATESCHEMA)
return repo.update(req.args)
return repoService.update(req.args)
},
remove: async (req) => {
utils.validateArgs(req.args, REPOREMOVESCHEMA)

const dbRepo = await repo.remove(req.args)
const dbRepo = await repoService.remove(req.args)
if (dbRepo && dbRepo.gist) {
req.args.owner = dbRepo.owner
req.args.repo = dbRepo.repo
Expand Down
2 changes: 1 addition & 1 deletion src/server/src/api/webhook.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// SPDX-License-Identifier: Apache-2.0

// module
const webhookService = require('../services/webhook')
const webhookService = require('../services/repo').webhookService
class WebhookApi {
async get(req) {
return req.args && req.args.org ? webhookService.getOrgHook(req.args.org, req.user.token) : webhookService.getRepoHook(req.args.owner, req.args.repo, req.user.token)
Expand Down
4 changes: 2 additions & 2 deletions src/server/src/services/cla.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ const Org = mongoose.model('Org')

//services
const logger = require('../services/logger')
const orgService = require('../services/org')
const repoService = require('../services/repo')
const orgService = require('../services/repo').orgService
const repoService = require('../services/repo').repoService
const github = require('./github')
const config = require('../config')
const _ = require('lodash')
Expand Down
119 changes: 0 additions & 119 deletions src/server/src/services/org.js

This file was deleted.

2 changes: 1 addition & 1 deletion src/server/src/services/pullRequest.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
const url = require('./url')
const github = require('./github')
const logger = require('../services/logger')
const repoService = require('./repo')
const repoService = require('./repo').repoService

const commentText = (signed, badgeUrl, claUrl, userMap, recheckUrl, migrationNotice) => {
if (signed) {
Expand Down

0 comments on commit e827e3e

Please sign in to comment.