From bbe080ab7f370d67073cf822ee6e1cc887bc7317 Mon Sep 17 00:00:00 2001 From: peter Date: Sun, 14 Mar 2021 18:49:13 +0100 Subject: [PATCH] update character screen --- .../Components/Character/CharacterManager.ts | 24 ++++++++++- src/backend/Components/Character/Interface.ts | 2 + .../Components/Character/RPCInterface.ts | 4 +- src/backend/Components/User/UserManager.ts | 2 + .../auth/register/register.component.ts | 4 +- .../pages/character/character.component.html | 37 ++++++++++++---- .../pages/character/character.component.ts | 42 +++++++++++++++++-- 7 files changed, 99 insertions(+), 16 deletions(-) diff --git a/src/backend/Components/Character/CharacterManager.ts b/src/backend/Components/Character/CharacterManager.ts index 3f35bf0..da17662 100644 --- a/src/backend/Components/Character/CharacterManager.ts +++ b/src/backend/Components/Character/CharacterManager.ts @@ -30,7 +30,13 @@ implements FrontworkComponent, ICharacterMana this.getHeadCount ] - RPCFeatures = () => [] + RPCFeatures = () => [{ + name: 'manageCharacter' as 'manageCharacter', + RPCs: [ + this.updateCharacter + ] + }] + getTableDefinitions = (): TableDefiniton[] => [ { @@ -66,6 +72,22 @@ implements FrontworkComponent, ICharacterMana }) } + updateCharacter = async (character: Character) : Promise => { + await this.admin + .knex('characters') + .update({ + race: character.race, + specid: character.specid, + charactername: character.charactername.toLowerCase(), + userid: character.userid + }) + .where({ + id: character.id + }) + + return await this.getCharacterByName(character.charactername) as Character + } + createCharacter = async (userToken: string, character : Character) : Promise => { try{ character.charactername = character.charactername.toLowerCase() diff --git a/src/backend/Components/Character/Interface.ts b/src/backend/Components/Character/Interface.ts index bb7c8c9..c817044 100644 --- a/src/backend/Components/Character/Interface.ts +++ b/src/backend/Components/Character/Interface.ts @@ -10,4 +10,6 @@ export class ICharacterManager{ getCharactersOfUser: (username: string) => Promise<(Character & Spec)[]> getUserOfCharacter: (character:Character) => Promise getHeadCount: (clazz: Class) => Promise + updateCharacter: (character: Character) => Promise + } \ No newline at end of file diff --git a/src/backend/Components/Character/RPCInterface.ts b/src/backend/Components/Character/RPCInterface.ts index 2ce318a..b14bd59 100644 --- a/src/backend/Components/Character/RPCInterface.ts +++ b/src/backend/Components/Character/RPCInterface.ts @@ -14,5 +14,7 @@ export type CharacterManagerIfc = { } export type CharacterManagerFeatureIfc = { - + manageCharacter: { + updateCharacter: ICharacterManager['updateCharacter'] + } } \ No newline at end of file diff --git a/src/backend/Components/User/UserManager.ts b/src/backend/Components/User/UserManager.ts index 25479b6..bdff2da 100644 --- a/src/backend/Components/User/UserManager.ts +++ b/src/backend/Components/User/UserManager.ts @@ -136,6 +136,8 @@ export class UserManager //set up permissions getLogger('UserManager#initialize').debug('setting up permissions') + console.log(this.character.RPCFeatures()) + await Promise.all( [this, ...this.exporters].flatMap(exp => exp.RPCFeatures().map(async (feature) => { try { diff --git a/src/frontend/src/app/frontcraft/auth/register/register.component.ts b/src/frontend/src/app/frontcraft/auth/register/register.component.ts index 24de763..b031e5e 100644 --- a/src/frontend/src/app/frontcraft/auth/register/register.component.ts +++ b/src/frontend/src/app/frontcraft/auth/register/register.component.ts @@ -21,12 +21,12 @@ export class RegisterComponent implements OnInit{ race: "Night Elf" } - ranks = _Rank.splice(5) //remove admin, gm, officer + ranks = ["Trial"] //remove admin, gm, officer classes = _Class races = _Race selectedClass : Class = "Warrior" - selectedSpec = specs[this.selectedClass][0] specs = specs[this.selectedClass] + selectedSpec = specs[this.selectedClass][0] showApplication = false submitted = false diff --git a/src/frontend/src/app/frontcraft/pages/character/character.component.html b/src/frontend/src/app/frontcraft/pages/character/character.component.html index 493de56..b6d8361 100644 --- a/src/frontend/src/app/frontcraft/pages/character/character.component.html +++ b/src/frontend/src/app/frontcraft/pages/character/character.component.html @@ -1,8 +1,8 @@ - +

- + {{char.charactername}}

@@ -14,12 +14,33 @@ class = "col-12 col-xl-9">
- - {{char.race}}
- - {{char.specname}} {{char.class}}
+ + + {{char.race}}
+ + + {{char.specname}} {{char.class}}
+
+ +
+ + {{race}} + + + {{spec}} + + + {{class}} + + +
Owned by {{char.username}} ({{char.rank}})
-
+
\ No newline at end of file diff --git a/src/frontend/src/app/frontcraft/pages/character/character.component.ts b/src/frontend/src/app/frontcraft/pages/character/character.component.ts index 0e1b423..04c67b4 100644 --- a/src/frontend/src/app/frontcraft/pages/character/character.component.ts +++ b/src/frontend/src/app/frontcraft/pages/character/character.component.ts @@ -1,9 +1,10 @@ import { Component, OnInit, Input } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { Spec, User, Character, Item } from '../../../../../../backend/Types/Types'; -import { getClassColor } from '../../../../../../backend/Types/PlayerSpecs'; +import { Spec, User, Character, Item, _Class, _Race, Class } from '../../../../../../backend/Types/Types'; +import { getClassColor, specs } from '../../../../../../backend/Types/PlayerSpecs'; import { _Tiers } from '../../../../../../backend/Types/Items'; import { IApiService } from '../../services/ApiService/ApiService'; +import { NbToastrService } from '@nebular/theme'; @Component({ selector: 'character', @@ -13,11 +14,17 @@ export class FrontcraftCharacterComponent implements OnInit { @Input() name?: string @Input() link?: "owner" | "character" = 'owner' - char: (Character & User & Spec) = { + charactername: "Loading", race: 'Human', - class: 'Warrior' + class: 'Warrior', + spec: 'Arms' } as any + + classes = _Class + races = _Race + specs = specs[this.char.class] + color: string tokens dataLink = "" @@ -27,23 +34,32 @@ export class FrontcraftCharacterComponent implements OnInit { boss2 = { name: undefined, date: undefined } gear2: Item[] = [] + canManage: boolean = false + constructor( private api: IApiService, private route: ActivatedRoute, + private toast: NbToastrService, ) { } async ngOnInit() { const param = this.name || this.route.snapshot.paramMap.get('name'); if (!param) return + const manageChar = this.api.get('manageCharacter') + + if (manageChar) this.canManage = true + const char = await this.api.get('CharacterManager').getCharacterByName(param) if (char) { this.color = getClassColor(char.class) this.char = char + this.specs = specs[this.char.class] this.api.get('ItemManager').getTokens(this.char, _Tiers, true).then(tokens => { this.tokens = tokens }) + /* this.dataLink = "https://classic.warcraftlogs.com:443/v1/parses/character/" + this.char.charactername.replace(/^\w/, c => c.toUpperCase()) + "/Gandling/EU?api_key=c698515ab4f592cdb848d80b3abe616c&metric=dps" const json: any[] = await fetch(this.dataLink).then(raw => raw.json()) @@ -68,6 +84,24 @@ export class FrontcraftCharacterComponent implements OnInit { const maybeItems: (Item | undefined)[] = await Promise.all(data.gear.filter(item => item.name != "Unknown Item").map(async item => await this.api.get('ItemManager').getItem(item.name))) const geardata = maybeItems.filter(maybeItem => maybeItem != null) this.gear2 = geardata + */ } } + + updateCharacter = async () => { + const manager = this.api.get('manageCharacter') + if (manager) { + const specid = await this.api.get('CharacterManager').getSpecId(this.char['class'], this.char['specname'] as any) + this.char.specid = specid + manager.updateCharacter(this.char).then(() => { + this.toast.show('Update', 'Success', { status: 'success' }) + }) + } + } + onSelectClass() { + this.specs = specs[this.char.class] + setTimeout(() => { + this.char.specname = this.specs[0] + }, 25) + } } \ No newline at end of file