From c67a1c097b0e4312df5f5dae137b60874907a2ad Mon Sep 17 00:00:00 2001 From: beckpaul Date: Thu, 14 Dec 2023 19:09:50 -0500 Subject: [PATCH] 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) {