From 9cc4817a89c646e1a94eef7769c5af4e0ca9956f Mon Sep 17 00:00:00 2001 From: beckpaul Date: Thu, 14 Dec 2023 18:17:09 -0500 Subject: [PATCH 01/11] refactor transfer backend to match others --- .../routes/views/clans/post/transfer.js | 225 ++++-------------- 1 file changed, 49 insertions(+), 176 deletions(-) diff --git a/src/backend/routes/views/clans/post/transfer.js b/src/backend/routes/views/clans/post/transfer.js index 59ff29cb..cd545d09 100755 --- a/src/backend/routes/views/clans/post/transfer.js +++ b/src/backend/routes/views/clans/post/transfer.js @@ -1,187 +1,60 @@ -const flash = {} -const request = require('request') -const { check, validationResult } = require('express-validator') - -function promiseRequest(url) { - return new Promise(function (resolve, reject) { - request(url, function (error, res, body) { - if (!error && res.statusCode < 300) { - resolve(body) - } else { - reject(error || `Unexpected status code ${res.statusCode}`) - } - }) - }) -} - -exports = module.exports = async function (req, res) { - const locals = res.locals - - locals.formData = req.body || {} - - const overallRes = res +const { body, validationResult, matchedData } = require('express-validator') +const { JavaApiError } = require('../../../../services/ApiErrors') +exports = module.exports = [ // validate the input - check('transfer_to', 'Please indicate the recipient name').notEmpty() - check( + body('transfer_to', 'Please indicate the recipient name').notEmpty(), + body( 'clan_id', 'Internal error while processing your query: invalid clan ID' - ).notEmpty() - - // check the validation object for errors - const errors = validationResult(req) - - // Must have client side errors to fix - if (!errors.isEmpty()) { - flash.class = 'alert-danger' - flash.messages = errors - flash.type = 'Error!' - - const buff = Buffer.from(JSON.stringify(flash)) - const data = buff.toString('base64') - - return overallRes.redirect('manage?flash=' + data) - } else { - const clanId = req.body.clan_id - const userName = req.body.transfer_to - - // Let's check first that the player exists AND is part of this clan - const fetchRoute = - process.env.API_URL + - '/data/clan/' + - clanId + - '?include=memberships.player&fields[player]=login' + ).notEmpty(), + + async (req, res) => { + const errors = validationResult(req) + + // Handle client-side errors + if (!errors.isEmpty()) { + return res.render('clans/manage', { + errors: { + class: 'alert-danger', + messages: errors, + type: 'Error!', + }, + clan_tag: req.body.clan_tag, + clan_name: req.body.clan_name, + clan_description: req.body.clan_description, + }) + } - let playerId = null + // Sanitize req + const data = matchedData(req) + const clanId = data.body.clan_id + const owner = data.user.data.attributes.userName + const newOwner = data.body.transfer_to try { - if (userName === req.user.data.attributes.userName) - throw new Error('You cannot transfer your own clan to yourself') - - const httpData = await promiseRequest(fetchRoute) - const clanData = JSON.parse(httpData) - - const members = {} - - for (const k in clanData.included) { - const record = clanData.included[k] - if (record.type !== 'player') continue - members[record.attributes.login] = record.id - } - - if (!members[userName]) - throw new Error( - 'User does not exist or is not part of the clan' - ) - playerId = members[userName] + await req.requestContainer + .get('ClanManagementService') + .transferOwnership(owner, newOwner, clanId) + await req.asyncFlash('info', 'Clan ownership transferred') + + return res.redirect( + '/clans/view/' + + req.requestContainer.get('UserService').getUser().clan.id + ) } catch (e) { - flash.class = 'alert-danger' - flash.messages = [ - { - msg: - 'There was an error during the transfer to ' + - userName + - ': ' + - e, - }, - ] - flash.type = 'Error!' - - const buff = Buffer.from(JSON.stringify(flash)) - const data = buff.toString('base64') - - return overallRes.redirect('manage?flash=' + data) - } + let message = e.toString() + if (e instanceof JavaApiError && e.error?.errors) { + message = e.error.errors[0].detail + } - // Building update query - const queryUrl = process.env.API_URL + '/data/clan/' + clanId + await req.asyncFlash('error', message) - const newClanObject = { - data: { - type: 'clan', - id: clanId, - relationships: { - leader: { - data: { - id: playerId, - type: 'player', - }, - }, - }, - }, + return res.render('clans/manage', { + clan_tag: req.body.clan_tag, + clan_name: req.body.clan_name, + clan_description: req.body.clan_description, + }) } - - // Run post to endpoint - request.patch( - { - url: queryUrl, - body: JSON.stringify(newClanObject), - headers: { - Authorization: 'Bearer ' + req.user.data.attributes.token, - 'Content-Type': 'application/vnd.api+json', - }, - }, - function (err, res, body) { - if (err || res.statusCode !== 204) { - const errorMessages = [] - let msg = 'Error during the ownership transfer' - try { - msg += - ': ' + - JSON.stringify( - JSON.parse(res.body).errors[0].detail - ) - } catch {} - - errorMessages.push({ msg }) - flash.class = 'alert-danger' - flash.messages = errorMessages - flash.type = 'Error!' - - const buff = Buffer.from(JSON.stringify(flash)) - const data = buff.toString('base64') - - return overallRes.redirect('manage?flash=' + data) - } else { - // Refreshing user - request.get( - { - url: process.env.API_URL + '/me', - headers: { - Authorization: - 'Bearer ' + req.user.data.attributes.token, - }, - }, - - function (err, res, body) { - if (err) { - console.error( - 'There was an error updating a session after a clan transfer:', - err - ) - - return - } - try { - const user = JSON.parse(body) - user.data.id = user.data.attributes.userId - user.data.attributes.token = - req.user.data.attributes.token - req.logIn(user, function (err) { - if (err) console.error(err) - return overallRes.redirect( - 'see?id=' + clanId - ) - }) - } catch { - console.error( - 'There was an error updating a session after a clan transfer' - ) - } - } - ) - } - } - ) - } -} + }, +] From c67a1c097b0e4312df5f5dae137b60874907a2ad Mon Sep 17 00:00:00 2001 From: beckpaul Date: Thu, 14 Dec 2023 19:09:50 -0500 Subject: [PATCH 02/11] wip commit - backend should be done at this point regarding the actual action of transfering ownership --- .../routes/views/clans/post/transfer.js | 19 ++++---- src/backend/routes/views/clans/post/update.js | 1 + .../services/ClanManagementRepository.js | 44 +++++++++++++++++++ src/backend/services/ClanManagementService.js | 18 ++++++++ 4 files changed, 71 insertions(+), 11 deletions(-) diff --git a/src/backend/routes/views/clans/post/transfer.js b/src/backend/routes/views/clans/post/transfer.js index cd545d09..aeaef552 100755 --- a/src/backend/routes/views/clans/post/transfer.js +++ b/src/backend/routes/views/clans/post/transfer.js @@ -2,7 +2,7 @@ const { body, validationResult, matchedData } = require('express-validator') const { JavaApiError } = require('../../../../services/ApiErrors') exports = module.exports = [ - // validate the input + // Validations will need to change body('transfer_to', 'Please indicate the recipient name').notEmpty(), body( 'clan_id', @@ -11,8 +11,6 @@ exports = module.exports = [ async (req, res) => { const errors = validationResult(req) - - // Handle client-side errors if (!errors.isEmpty()) { return res.render('clans/manage', { errors: { @@ -26,17 +24,16 @@ exports = module.exports = [ }) } - // Sanitize req - const data = matchedData(req) - const clanId = data.body.clan_id - const owner = data.user.data.attributes.userName - const newOwner = data.body.transfer_to - + // This will also need changed + const newOwner = matchedData(req).body.transfer_to try { await req.requestContainer .get('ClanManagementService') - .transferOwnership(owner, newOwner, clanId) - await req.asyncFlash('info', 'Clan ownership transferred') + .transferOwnership(newOwner) + await req.asyncFlash( + 'info', + `Clan ownership transferred to ${newOwner}` + ) return res.redirect( '/clans/view/' + diff --git a/src/backend/routes/views/clans/post/update.js b/src/backend/routes/views/clans/post/update.js index f7f6f032..eb246f87 100644 --- a/src/backend/routes/views/clans/post/update.js +++ b/src/backend/routes/views/clans/post/update.js @@ -53,6 +53,7 @@ exports = module.exports = [ return res.render('clans/manage', { clan_tag: req.body.clan_tag, + clan_id: req.body.clan_id, clan_name: req.body.clan_name, clan_description: req.body.clan_description, }) diff --git a/src/backend/services/ClanManagementRepository.js b/src/backend/services/ClanManagementRepository.js index b581bad0..659551c1 100644 --- a/src/backend/services/ClanManagementRepository.js +++ b/src/backend/services/ClanManagementRepository.js @@ -86,6 +86,50 @@ class ClanManagementRepository { } } + async transferOwnership(newOwnerId, clanId) { + try { + const transferRequestBody = { + data: { + type: 'clan', + id: clanId, + relationships: { + leader: { + data: { + id: newOwnerId, + type: 'player', + }, + }, + }, + }, + } + + const response = await this.javaApiClient.patch( + '/data/clan/' + clanId, + JSON.stringify(transferRequestBody), + { + headers: { + 'Content-Type': 'application/vnd.api+json', + Accept: 'application/vnd.api+json', + }, + } + ) + + if (response.status !== 204) { + throw new JavaApiError( + response.status, + response.config.url, + JSON.parse(response.data) || [] + ) + } + } catch (e) { + if (e instanceof JavaApiError) { + throw e + } + + throw new GenericJavaApiError(e.toString()) + } + } + async createInvite(clanId, playerId) { try { const response = await this.javaApiClient.get( diff --git a/src/backend/services/ClanManagementService.js b/src/backend/services/ClanManagementService.js index ffcc1f55..9518c530 100644 --- a/src/backend/services/ClanManagementService.js +++ b/src/backend/services/ClanManagementService.js @@ -36,6 +36,24 @@ class ClanManagementService { } } + async transferOwnership(newOwnerId) { + const clanId = this.userService.getUser().clan.id + + await this.clanManagementRepository.transferOwnership( + newOwnerId, + clanId + ) + try { + this.clanService + .getAll(true) + .then(() => {}) + .catch((e) => console.error(e.stack)) + await this.userService.refreshUser() + } catch (e) { + console.error(e.stack) + } + } + async deleteClan() { const clanId = parseInt(this.userService.getUser()?.clan.id) if (!clanId) { From 0b1d1bf549a0289bcffcc0518dbae45c3513a958 Mon Sep 17 00:00:00 2001 From: beckpaul Date: Thu, 14 Dec 2023 20:59:49 -0500 Subject: [PATCH 03/11] add padding to allow more links on line --- public/styles/site/clans.sass | 1 + 1 file changed, 1 insertion(+) diff --git a/public/styles/site/clans.sass b/public/styles/site/clans.sass index 864455c2..03fcbb74 100644 --- a/public/styles/site/clans.sass +++ b/public/styles/site/clans.sass @@ -69,6 +69,7 @@ .action-link color: #ec9d36 + margin-right: 2em &:link color: #ec9d36 &:visited From 3db02bdba88984e027380962a46722976016c381 Mon Sep 17 00:00:00 2001 From: beckpaul Date: Thu, 14 Dec 2023 21:00:36 -0500 Subject: [PATCH 04/11] add transfer btn to view --- src/backend/templates/views/clans/clan.pug | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/backend/templates/views/clans/clan.pug b/src/backend/templates/views/clans/clan.pug index eadd3448..c5ac774d 100644 --- a/src/backend/templates/views/clans/clan.pug +++ b/src/backend/templates/views/clans/clan.pug @@ -54,8 +54,14 @@ block content td if isLeader && member.membershipId !== userMembershipId a.action-link( - href='/clans/kick/' + member.membershipId, + href=`/clans/kick/${member.membershipId}` onclick='return confirm(\'Kick?\')' ) Kick + a.action-link( + id='transfer-clan-ownership' + href=`/clans/transfer/${member.membershipId}` + onclick='return confirm(\'Transfer Clan Ownership?\')' + ) Make Leader + block js script(src=webpackAssetJS('clan')) From 0494b6e2b4be7be2286ca879e33433d8347483f5 Mon Sep 17 00:00:00 2001 From: beckpaul Date: Thu, 14 Dec 2023 21:01:07 -0500 Subject: [PATCH 05/11] Add route --- src/backend/routes/views/clanRouter.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/backend/routes/views/clanRouter.js b/src/backend/routes/views/clanRouter.js index 18aeac1e..64e2c46f 100644 --- a/src/backend/routes/views/clanRouter.js +++ b/src/backend/routes/views/clanRouter.js @@ -33,6 +33,11 @@ router.get( middlewares.isAuthenticated(), require('./clans/kick') ) +router.get( + '/transfer/:memberId', + middlewares.isAuthenticated(), + require('./clans/transfer') +) router.get('/leave', middlewares.isAuthenticated(), leave) router.post('/leave', middlewares.isAuthenticated(), leave) router.get('/join', middlewares.isAuthenticated(), require('./clans/join')) From d129b31732490737d8338dfc50e64ac6c05b4228 Mon Sep 17 00:00:00 2001 From: beckpaul Date: Thu, 14 Dec 2023 21:02:29 -0500 Subject: [PATCH 06/11] make a post a get - simplicity --- .../routes/views/clans/post/transfer.js | 57 ------------------- src/backend/routes/views/clans/transfer.js | 32 +++++++++++ 2 files changed, 32 insertions(+), 57 deletions(-) delete mode 100755 src/backend/routes/views/clans/post/transfer.js create mode 100755 src/backend/routes/views/clans/transfer.js diff --git a/src/backend/routes/views/clans/post/transfer.js b/src/backend/routes/views/clans/post/transfer.js deleted file mode 100755 index aeaef552..00000000 --- a/src/backend/routes/views/clans/post/transfer.js +++ /dev/null @@ -1,57 +0,0 @@ -const { body, validationResult, matchedData } = require('express-validator') -const { JavaApiError } = require('../../../../services/ApiErrors') - -exports = module.exports = [ - // Validations will need to change - body('transfer_to', 'Please indicate the recipient name').notEmpty(), - body( - 'clan_id', - 'Internal error while processing your query: invalid clan ID' - ).notEmpty(), - - async (req, res) => { - const errors = validationResult(req) - if (!errors.isEmpty()) { - return res.render('clans/manage', { - errors: { - class: 'alert-danger', - messages: errors, - type: 'Error!', - }, - clan_tag: req.body.clan_tag, - clan_name: req.body.clan_name, - clan_description: req.body.clan_description, - }) - } - - // This will also need changed - const newOwner = matchedData(req).body.transfer_to - try { - await req.requestContainer - .get('ClanManagementService') - .transferOwnership(newOwner) - await req.asyncFlash( - 'info', - `Clan ownership transferred to ${newOwner}` - ) - - return res.redirect( - '/clans/view/' + - req.requestContainer.get('UserService').getUser().clan.id - ) - } catch (e) { - let message = e.toString() - if (e instanceof JavaApiError && e.error?.errors) { - message = e.error.errors[0].detail - } - - await req.asyncFlash('error', message) - - return res.render('clans/manage', { - clan_tag: req.body.clan_tag, - clan_name: req.body.clan_name, - clan_description: req.body.clan_description, - }) - } - }, -] diff --git a/src/backend/routes/views/clans/transfer.js b/src/backend/routes/views/clans/transfer.js new file mode 100755 index 00000000..b43a4afa --- /dev/null +++ b/src/backend/routes/views/clans/transfer.js @@ -0,0 +1,32 @@ +const { JavaApiError } = require('../../../services/ApiErrors') + +exports = module.exports = [ + async (req, res) => { + const newOwnerMemberId = req.params.memberId + const clanId = req.requestContainer.get('UserService').getUser().clan.id + try { + await req.requestContainer + .get('ClanManagementService') + .transferOwnership(newOwnerMemberId, clanId) + await req.asyncFlash('info', 'Clan ownership transferred') + + return res.redirect(`/clans/view/${clanId}`, { + clan_tag: req.body.clan_tag, + clan_name: req.body.clan_name, + clan_description: req.body.clan_description, + }) + } catch (e) { + let message = e.toString() + if (e instanceof JavaApiError && e.error?.errors) { + message = e.error.errors[0].detail + } + + await req.asyncFlash('error', message) + return res.redirect(`/clans/view/${clanId}`, { + clan_tag: req.body.clan_tag, + clan_name: req.body.clan_name, + clan_description: req.body.clan_description, + }) + } + }, +] From 3de8b58271a60c4bcc0bdb84ac6adaeb06d55b9c Mon Sep 17 00:00:00 2001 From: beckpaul Date: Thu, 14 Dec 2023 21:03:07 -0500 Subject: [PATCH 07/11] get the user id by querying the membership id - im assuming this returns the user --- src/backend/services/ClanManagementService.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/backend/services/ClanManagementService.js b/src/backend/services/ClanManagementService.js index 9518c530..2c552711 100644 --- a/src/backend/services/ClanManagementService.js +++ b/src/backend/services/ClanManagementService.js @@ -36,11 +36,11 @@ class ClanManagementService { } } - async transferOwnership(newOwnerId) { - const clanId = this.userService.getUser().clan.id - + async transferOwnership(newOwnerMemberId, clanId) { + const newOwnerUser = + await this.clanService.getClanMembership(newOwnerMemberId) await this.clanManagementRepository.transferOwnership( - newOwnerId, + newOwnerUser.id, clanId ) try { From d8fdecf564aa1982e8fd0c43e93c48ce44fd6b17 Mon Sep 17 00:00:00 2001 From: beckpaul Date: Thu, 14 Dec 2023 21:04:05 -0500 Subject: [PATCH 08/11] remove relic from manage page --- src/backend/routes/views/clans/post/update.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/backend/routes/views/clans/post/update.js b/src/backend/routes/views/clans/post/update.js index eb246f87..f7f6f032 100644 --- a/src/backend/routes/views/clans/post/update.js +++ b/src/backend/routes/views/clans/post/update.js @@ -53,7 +53,6 @@ exports = module.exports = [ return res.render('clans/manage', { clan_tag: req.body.clan_tag, - clan_id: req.body.clan_id, clan_name: req.body.clan_name, clan_description: req.body.clan_description, }) From 466e1d02dfcd2d5c1eaf3d240ebd2bf3d1da4d10 Mon Sep 17 00:00:00 2001 From: beckpaul Date: Thu, 14 Dec 2023 21:06:16 -0500 Subject: [PATCH 09/11] lint --- src/backend/templates/views/clans/clan.pug | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/backend/templates/views/clans/clan.pug b/src/backend/templates/views/clans/clan.pug index c5ac774d..6792b384 100644 --- a/src/backend/templates/views/clans/clan.pug +++ b/src/backend/templates/views/clans/clan.pug @@ -54,12 +54,11 @@ block content td if isLeader && member.membershipId !== userMembershipId a.action-link( - href=`/clans/kick/${member.membershipId}` + href=`/clans/kick/${member.membershipId}`, onclick='return confirm(\'Kick?\')' ) Kick - a.action-link( - id='transfer-clan-ownership' - href=`/clans/transfer/${member.membershipId}` + a#transfer-clan-ownership.action-link( + href=`/clans/transfer/${member.membershipId}`, onclick='return confirm(\'Transfer Clan Ownership?\')' ) Make Leader From ab7242b52c00d3b9b5909d298927725af5f89838 Mon Sep 17 00:00:00 2001 From: beckpaul Date: Sat, 30 Dec 2023 14:00:24 -0500 Subject: [PATCH 10/11] finalize this feature --- src/backend/routes/views/clans/transfer.js | 15 ++++----------- src/backend/services/ClanManagementService.js | 13 +++++++++---- src/backend/templates/views/clans/clan.pug | 2 +- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/backend/routes/views/clans/transfer.js b/src/backend/routes/views/clans/transfer.js index b43a4afa..01b08acc 100755 --- a/src/backend/routes/views/clans/transfer.js +++ b/src/backend/routes/views/clans/transfer.js @@ -7,26 +7,19 @@ exports = module.exports = [ try { await req.requestContainer .get('ClanManagementService') - .transferOwnership(newOwnerMemberId, clanId) + .transferOwnership(newOwnerMemberId) await req.asyncFlash('info', 'Clan ownership transferred') - return res.redirect(`/clans/view/${clanId}`, { - clan_tag: req.body.clan_tag, - clan_name: req.body.clan_name, - clan_description: req.body.clan_description, - }) + return res.redirect(`/clans/view/${clanId}`) } catch (e) { + console.log('<==============HIT ERROR ==============>') let message = e.toString() if (e instanceof JavaApiError && e.error?.errors) { message = e.error.errors[0].detail } await req.asyncFlash('error', message) - return res.redirect(`/clans/view/${clanId}`, { - clan_tag: req.body.clan_tag, - clan_name: req.body.clan_name, - clan_description: req.body.clan_description, - }) + return res.redirect(`/clans/view/${clanId}`) } }, ] diff --git a/src/backend/services/ClanManagementService.js b/src/backend/services/ClanManagementService.js index 2c552711..87a01640 100644 --- a/src/backend/services/ClanManagementService.js +++ b/src/backend/services/ClanManagementService.js @@ -36,12 +36,17 @@ class ClanManagementService { } } - async transferOwnership(newOwnerMemberId, clanId) { - const newOwnerUser = + async transferOwnership(newOwnerMemberId) { + const clanMembership = await this.clanService.getClanMembership(newOwnerMemberId) + + const newOwnerMember = Object.values(clanMembership.members).find( + (member) => member.membershipId === newOwnerMemberId + ) + await this.clanManagementRepository.transferOwnership( - newOwnerUser.id, - clanId + newOwnerMember.id, + clanMembership.clan_id ) try { this.clanService diff --git a/src/backend/templates/views/clans/clan.pug b/src/backend/templates/views/clans/clan.pug index 6792b384..dfd95bc1 100644 --- a/src/backend/templates/views/clans/clan.pug +++ b/src/backend/templates/views/clans/clan.pug @@ -57,7 +57,7 @@ block content href=`/clans/kick/${member.membershipId}`, onclick='return confirm(\'Kick?\')' ) Kick - a#transfer-clan-ownership.action-link( + a.action-link( href=`/clans/transfer/${member.membershipId}`, onclick='return confirm(\'Transfer Clan Ownership?\')' ) Make Leader From 5849323e910a2676f8cf0cc82a5e627bb2256ec0 Mon Sep 17 00:00:00 2001 From: beckpaul Date: Sat, 30 Dec 2023 14:41:29 -0500 Subject: [PATCH 11/11] add fcaps suggested changes --- src/backend/routes/views/clanRouter.js | 2 +- src/backend/routes/views/clans/transfer.js | 22 ++++++++++++++----- src/backend/services/ClanManagementService.js | 13 +++-------- src/backend/templates/views/clans/clan.pug | 2 +- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/backend/routes/views/clanRouter.js b/src/backend/routes/views/clanRouter.js index 64e2c46f..306b67ba 100644 --- a/src/backend/routes/views/clanRouter.js +++ b/src/backend/routes/views/clanRouter.js @@ -34,7 +34,7 @@ router.get( require('./clans/kick') ) router.get( - '/transfer/:memberId', + '/transfer/:userId', middlewares.isAuthenticated(), require('./clans/transfer') ) diff --git a/src/backend/routes/views/clans/transfer.js b/src/backend/routes/views/clans/transfer.js index 01b08acc..c66ed43c 100755 --- a/src/backend/routes/views/clans/transfer.js +++ b/src/backend/routes/views/clans/transfer.js @@ -2,24 +2,34 @@ const { JavaApiError } = require('../../../services/ApiErrors') exports = module.exports = [ async (req, res) => { - const newOwnerMemberId = req.params.memberId - const clanId = req.requestContainer.get('UserService').getUser().clan.id + if (!req.requestContainer.get('UserService').getUser()?.clan?.id) { + await req.asyncFlash('error', "You don't own a clan") + + return res.redirect('/clans') + } + + const newOwnerId = parseInt(req.params.userId) try { await req.requestContainer .get('ClanManagementService') - .transferOwnership(newOwnerMemberId) + .transferOwnership(newOwnerId) await req.asyncFlash('info', 'Clan ownership transferred') - return res.redirect(`/clans/view/${clanId}`) + return res.redirect( + '/clans/view/' + + req.requestContainer.get('UserService').getUser().clan.id + ) } catch (e) { - console.log('<==============HIT ERROR ==============>') let message = e.toString() if (e instanceof JavaApiError && e.error?.errors) { message = e.error.errors[0].detail } await req.asyncFlash('error', message) - return res.redirect(`/clans/view/${clanId}`) + return res.redirect( + '/clans/view/' + + req.requestContainer.get('UserService').getUser().clan.id + ) } }, ] diff --git a/src/backend/services/ClanManagementService.js b/src/backend/services/ClanManagementService.js index 87a01640..862260ce 100644 --- a/src/backend/services/ClanManagementService.js +++ b/src/backend/services/ClanManagementService.js @@ -36,17 +36,10 @@ class ClanManagementService { } } - async transferOwnership(newOwnerMemberId) { - const clanMembership = - await this.clanService.getClanMembership(newOwnerMemberId) - - const newOwnerMember = Object.values(clanMembership.members).find( - (member) => member.membershipId === newOwnerMemberId - ) - + async transferOwnership(newOwnerId) { await this.clanManagementRepository.transferOwnership( - newOwnerMember.id, - clanMembership.clan_id + newOwnerId, + this.userService.getUser().clan.id ) try { this.clanService diff --git a/src/backend/templates/views/clans/clan.pug b/src/backend/templates/views/clans/clan.pug index dfd95bc1..23c7da88 100644 --- a/src/backend/templates/views/clans/clan.pug +++ b/src/backend/templates/views/clans/clan.pug @@ -58,7 +58,7 @@ block content onclick='return confirm(\'Kick?\')' ) Kick a.action-link( - href=`/clans/transfer/${member.membershipId}`, + href=`/clans/transfer/${member.id}`, onclick='return confirm(\'Transfer Clan Ownership?\')' ) Make Leader