chore(deps): upgrade Angular 19 → 20
- ng update @angular/core@20 @angular/cli@20 @angular/material@20 @angular-eslint@20 @angular/google-maps@20 - Remove ng-chartist (abandoned, incompatible with Angular 20): replace <x-chartist> with <app-bars-chart> in dropzones-bar and jumps-by-month - Migrate all constructor injection to inject() function (ng generate @angular/core:inject, 67 files) - TypeScript 5.5 → 5.9.3 - DOCUMENT import moved from @angular/common to @angular/core (automatic migration) - tsconfig moduleResolution updated to "bundler"
This commit is contained in:
@@ -1,26 +1,41 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Injectable, inject } from '@angular/core';
|
||||
import { HttpParams } from '@angular/common/http';
|
||||
import { Observable } from 'rxjs';
|
||||
import { map } from 'rxjs/operators';
|
||||
|
||||
import { ApiService } from '../api.service';
|
||||
import {
|
||||
HWActivityStat, HWClan, HWClanList, HWClanListConfig,
|
||||
HWClanListFilters, HWClanPageData, HWGuildClan,
|
||||
HWMember
|
||||
HWActivityStat,
|
||||
HWClan,
|
||||
HWClanList,
|
||||
HWClanListConfig,
|
||||
HWClanListFilters,
|
||||
HWClanPageData,
|
||||
HWGuildClan,
|
||||
HWMember,
|
||||
} from '@models';
|
||||
|
||||
import guildData from 'src/files-data/hw-guild-data.json'; // page Membres
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class HWClanService {
|
||||
private apiService = inject(ApiService);
|
||||
|
||||
private _apiDomain = '/herowars';
|
||||
constructor(
|
||||
private apiService: ApiService
|
||||
) { }
|
||||
|
||||
private _resetActivity(): HWActivityStat {
|
||||
const activity: HWActivityStat = { activity: 0, prestige: 0, titanite: 0, war: 0, adventure: 0, gifts: 0, score: 0, scoreGifts: 0, warGifts: 0, rewards: 0 };
|
||||
const activity: HWActivityStat = {
|
||||
activity: 0,
|
||||
prestige: 0,
|
||||
titanite: 0,
|
||||
war: 0,
|
||||
adventure: 0,
|
||||
gifts: 0,
|
||||
score: 0,
|
||||
scoreGifts: 0,
|
||||
warGifts: 0,
|
||||
rewards: 0,
|
||||
};
|
||||
return activity;
|
||||
}
|
||||
|
||||
@@ -28,13 +43,14 @@ export class HWClanService {
|
||||
// Convert any filters over to Angular's URLSearchParams
|
||||
const params: HWClanListFilters = {} as HWClanListFilters;
|
||||
Object.assign(params, config.filters);
|
||||
return this.apiService
|
||||
.get(
|
||||
`${this._apiDomain}/clans`,
|
||||
new HttpParams({ fromObject: <{
|
||||
[param: string]: string | number | boolean | readonly (string | number | boolean)[];
|
||||
}>params })
|
||||
);
|
||||
return this.apiService.get(
|
||||
`${this._apiDomain}/clans`,
|
||||
new HttpParams({ fromObject: <
|
||||
{
|
||||
[param: string]: string | number | boolean | readonly (string | number | boolean)[];
|
||||
}
|
||||
>params }),
|
||||
);
|
||||
}
|
||||
|
||||
get(id: string): Observable<HWClanPageData> {
|
||||
@@ -42,31 +58,35 @@ export class HWClanService {
|
||||
}
|
||||
|
||||
getAll(): Observable<Array<HWClan>> {
|
||||
return this.apiService.get(`${this._apiDomain}/clans`).pipe(map(data => data.clans));
|
||||
return this.apiService.get(`${this._apiDomain}/clans`).pipe(map((data) => data.clans));
|
||||
}
|
||||
|
||||
create(clan: HWClan): Observable<HWClan> {
|
||||
return this.apiService.post(`${this._apiDomain}/clans/`, { clan: clan }).pipe(map(data => data.clan));
|
||||
return this.apiService.post(`${this._apiDomain}/clans/`, { clan: clan }).pipe(map((data) => data.clan));
|
||||
}
|
||||
|
||||
update(clan: HWClan): Observable<HWClan> {
|
||||
return this.apiService.put(`${this._apiDomain}/clans/${clan.id}`, { clan: clan }).pipe(map(data => data.clan));
|
||||
return this.apiService
|
||||
.put(`${this._apiDomain}/clans/${clan.id}`, { clan: clan })
|
||||
.pipe(map((data) => data.clan));
|
||||
}
|
||||
|
||||
destroy(id: string): Observable<boolean> {
|
||||
return this.apiService.delete(`${this._apiDomain}/clans/${id}`).pipe(map(data => data.deleted));
|
||||
return this.apiService.delete(`${this._apiDomain}/clans/${id}`).pipe(map((data) => data.deleted));
|
||||
}
|
||||
|
||||
save(clan: HWClan): Observable<HWClan> {
|
||||
// If we're updating an existing clan
|
||||
if (clan.id) {
|
||||
return this.apiService.put(`${this._apiDomain}/clans/${clan.id}`, { clan: clan }).pipe(map(data => data.clan));
|
||||
return this.apiService
|
||||
.put(`${this._apiDomain}/clans/${clan.id}`, { clan: clan })
|
||||
.pipe(map((data) => data.clan));
|
||||
// Otherwise, create a new clan
|
||||
} else {
|
||||
return this.apiService.post(`${this._apiDomain}/clans/`, { clan: clan }).pipe(map(data => data.clan));
|
||||
return this.apiService.post(`${this._apiDomain}/clans/`, { clan: clan }).pipe(map((data) => data.clan));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
loadClan(): HWGuildClan {
|
||||
const guildClan: HWGuildClan = {} as HWGuildClan;
|
||||
Object.assign(guildClan, guildData.clan);
|
||||
@@ -77,7 +97,7 @@ export class HWClanService {
|
||||
|
||||
return guildClan;
|
||||
}
|
||||
|
||||
|
||||
loadClanStats(clan: HWGuildClan, members: HWMember[]): HWGuildClan {
|
||||
members.map((member: HWMember) => {
|
||||
clan.sumTotal.adventure += member.adventureSum;
|
||||
@@ -86,42 +106,42 @@ export class HWClanService {
|
||||
clan.todayTotal.activity += member.stat.todayActivity;
|
||||
clan.todayTotal.prestige += member.stat.todayPrestige;
|
||||
clan.todayTotal.titanite += member.stat.todayDungeonActivity;
|
||||
clan.todayTotal.score += (member.stat.todayDungeonActivity + member.stat.todayActivity + member.stat.todayPrestige);
|
||||
clan.todayTotal.score +=
|
||||
member.stat.todayDungeonActivity + member.stat.todayActivity + member.stat.todayPrestige;
|
||||
clan.sumTotal.activity += member.stat.activitySum;
|
||||
clan.sumTotal.prestige += member.stat.prestigeSum;
|
||||
clan.sumTotal.titanite += member.stat.dungeonActivitySum;
|
||||
clan.sumTotal.score += member.score;
|
||||
clan.sumTotal.warGifts += member.warGifts;
|
||||
});
|
||||
clan.sumTotal.scoreGifts = (clan.giftsCount - Math.floor(clan.sumTotal.warGifts));
|
||||
clan.todayAverages.activity = (clan.todayTotal.activity / members.length);
|
||||
clan.todayAverages.prestige = (clan.todayTotal.prestige / members.length);
|
||||
clan.todayAverages.titanite = (clan.todayTotal.titanite / members.length);
|
||||
clan.todayAverages.score = (clan.todayTotal.score / members.length);
|
||||
clan.sumAverages.activity = (clan.sumTotal.activity / members.length);
|
||||
clan.sumAverages.prestige = (clan.sumTotal.prestige / members.length);
|
||||
clan.sumAverages.titanite = (clan.sumTotal.titanite / members.length);
|
||||
clan.sumTotal.scoreGifts = clan.giftsCount - Math.floor(clan.sumTotal.warGifts);
|
||||
clan.todayAverages.activity = clan.todayTotal.activity / members.length;
|
||||
clan.todayAverages.prestige = clan.todayTotal.prestige / members.length;
|
||||
clan.todayAverages.titanite = clan.todayTotal.titanite / members.length;
|
||||
clan.todayAverages.score = clan.todayTotal.score / members.length;
|
||||
clan.sumAverages.activity = clan.sumTotal.activity / members.length;
|
||||
clan.sumAverages.prestige = clan.sumTotal.prestige / members.length;
|
||||
clan.sumAverages.titanite = clan.sumTotal.titanite / members.length;
|
||||
if (clan.league === '3') {
|
||||
clan.sumAverages.war = (clan.sumTotal.war / 10);
|
||||
clan.sumAverages.war = clan.sumTotal.war / 10;
|
||||
} else if (clan.league === '2') {
|
||||
clan.sumAverages.war = (clan.sumTotal.war / 15);
|
||||
clan.sumAverages.war = clan.sumTotal.war / 15;
|
||||
} else if (clan.league === '1') {
|
||||
clan.sumAverages.war = (clan.sumTotal.war / 20);
|
||||
clan.sumAverages.war = clan.sumTotal.war / 20;
|
||||
}
|
||||
clan.sumAverages.adventure = (clan.sumTotal.adventure / members.length);
|
||||
clan.sumAverages.gifts = (clan.sumTotal.gifts / members.length);
|
||||
clan.sumAverages.score = (clan.sumTotal.score / members.length);
|
||||
clan.sumAverages.scoreGifts = (clan.sumTotal.scoreGifts / members.length);
|
||||
clan.sumAverages.warGifts = (clan.sumTotal.warGifts / members.length);
|
||||
clan.sumAverages.adventure = clan.sumTotal.adventure / members.length;
|
||||
clan.sumAverages.gifts = clan.sumTotal.gifts / members.length;
|
||||
clan.sumAverages.score = clan.sumTotal.score / members.length;
|
||||
clan.sumAverages.scoreGifts = clan.sumTotal.scoreGifts / members.length;
|
||||
clan.sumAverages.warGifts = clan.sumTotal.warGifts / members.length;
|
||||
members.map((data) => {
|
||||
data.scoreGifts = ((data.score / clan.sumTotal.score) * clan.sumTotal.scoreGifts);
|
||||
data.rewards = Math.floor((data.scoreGifts + data.warGifts));
|
||||
data.scoreGifts = (data.score / clan.sumTotal.score) * clan.sumTotal.scoreGifts;
|
||||
data.rewards = Math.floor(data.scoreGifts + data.warGifts);
|
||||
clan.sumTotal.rewards += data.rewards;
|
||||
return data;
|
||||
});
|
||||
clan.sumAverages.rewards = (clan.sumTotal.rewards / members.length);
|
||||
clan.sumAverages.rewards = clan.sumTotal.rewards / members.length;
|
||||
|
||||
return clan;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,36 +1,41 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Injectable, inject } from '@angular/core';
|
||||
import { HttpParams } from '@angular/common/http';
|
||||
import { Observable } from 'rxjs';
|
||||
import { map } from 'rxjs/operators';
|
||||
|
||||
import { ApiService, UtilitiesService } from '@services';
|
||||
import {
|
||||
HWGuildClan, HWWeekStat,
|
||||
HWMember, HWMemberList, HWMemberListConfig,
|
||||
HWMemberListFilters, HWMemberPageData, HWMemberStat
|
||||
HWGuildClan,
|
||||
HWWeekStat,
|
||||
HWMember,
|
||||
HWMemberList,
|
||||
HWMemberListConfig,
|
||||
HWMemberListFilters,
|
||||
HWMemberPageData,
|
||||
HWMemberStat,
|
||||
} from '@models';
|
||||
|
||||
import guildData from 'src/files-data/hw-guild-data.json'; // page Membres
|
||||
import guildStatistics from 'src/files-data/hw-guild-statistics.json'; // page Overview -> Statistics
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class HWMemberService {
|
||||
private _apiService = inject(ApiService);
|
||||
private _utilitiesService = inject(UtilitiesService);
|
||||
|
||||
private _apiDomain = '/herowars';
|
||||
constructor(
|
||||
private _apiService: ApiService,
|
||||
private _utilitiesService: UtilitiesService
|
||||
) { }
|
||||
|
||||
query(config: HWMemberListConfig): Observable<HWMemberList> {
|
||||
// Convert any filters over to Angular's URLSearchParams
|
||||
const params: HWMemberListFilters = {} as HWMemberListFilters;
|
||||
Object.assign(params, config.filters);
|
||||
return this._apiService
|
||||
.get(
|
||||
`${this._apiDomain}/members`,
|
||||
new HttpParams({ fromObject: <{
|
||||
[param: string]: string | number | boolean | readonly (string | number | boolean)[];
|
||||
}>params })
|
||||
);
|
||||
return this._apiService.get(
|
||||
`${this._apiDomain}/members`,
|
||||
new HttpParams({ fromObject: <
|
||||
{
|
||||
[param: string]: string | number | boolean | readonly (string | number | boolean)[];
|
||||
}
|
||||
>params }),
|
||||
);
|
||||
}
|
||||
|
||||
get(id: string): Observable<HWMemberPageData> {
|
||||
@@ -38,35 +43,43 @@ export class HWMemberService {
|
||||
}
|
||||
|
||||
getAll(): Observable<Array<HWMember>> {
|
||||
return this._apiService.get(`${this._apiDomain}/members`).pipe(map(data => data.members));
|
||||
return this._apiService.get(`${this._apiDomain}/members`).pipe(map((data) => data.members));
|
||||
}
|
||||
|
||||
create(member: HWMember): Observable<HWMember> {
|
||||
return this._apiService.post(`${this._apiDomain}/members/`, { member: member }).pipe(map(data => data.member));
|
||||
return this._apiService
|
||||
.post(`${this._apiDomain}/members/`, { member: member })
|
||||
.pipe(map((data) => data.member));
|
||||
}
|
||||
|
||||
update(member: HWMember): Observable<HWMember> {
|
||||
return this._apiService.put(`${this._apiDomain}/members/${member.id}`, { member: member }).pipe(map(data => data.member));
|
||||
return this._apiService
|
||||
.put(`${this._apiDomain}/members/${member.id}`, { member: member })
|
||||
.pipe(map((data) => data.member));
|
||||
}
|
||||
|
||||
destroy(id: string): Observable<boolean> {
|
||||
return this._apiService.delete(`${this._apiDomain}/members/${id}`).pipe(map(data => data.deleted));
|
||||
return this._apiService.delete(`${this._apiDomain}/members/${id}`).pipe(map((data) => data.deleted));
|
||||
}
|
||||
|
||||
save(member: HWMember): Observable<HWMember> {
|
||||
// If we're updating an existing member
|
||||
if (member.id) {
|
||||
return this._apiService.put(`${this._apiDomain}/members/${member.id}`, { member: member }).pipe(map(data => data.member));
|
||||
return this._apiService
|
||||
.put(`${this._apiDomain}/members/${member.id}`, { member: member })
|
||||
.pipe(map((data) => data.member));
|
||||
// Otherwise, create a new member
|
||||
} else {
|
||||
return this._apiService.post(`${this._apiDomain}/members/`, { member: member }).pipe(map(data => data.member));
|
||||
return this._apiService
|
||||
.post(`${this._apiDomain}/members/`, { member: member })
|
||||
.pipe(map((data) => data.member));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
loadMembers(clan: HWGuildClan): HWMember[] {
|
||||
const guildMembers: HWMember[] = [];
|
||||
const now = new Date();
|
||||
const oneDayInSec = (24 * 60 * 60);
|
||||
const oneDayInSec = 24 * 60 * 60;
|
||||
const daysToKick = parseInt(guildData.clan.daysToKick);
|
||||
for (const data of Object.entries(guildData.clan.members)) {
|
||||
const member: HWMember = {} as HWMember;
|
||||
@@ -76,47 +89,56 @@ export class HWMemberService {
|
||||
} else {
|
||||
member.champion = false;
|
||||
}
|
||||
member.heroes = { power: 0, teams: []};
|
||||
member.titans = { power: 0, teams: []};
|
||||
member.heroes = { power: 0, teams: [] };
|
||||
member.titans = { power: 0, teams: [] };
|
||||
guildMembers.push(member);
|
||||
}
|
||||
guildMembers.map((data: HWMember) => {
|
||||
const last = new Date((parseInt(data.lastLoginTime) * 1000));
|
||||
const exp = new Date(last.getTime() + ((daysToKick * oneDayInSec) * 1000));
|
||||
const diff = Math.floor(((exp.getTime() - now.getTime()) / 1000));
|
||||
const daysLeft = Math.floor((diff / oneDayInSec));
|
||||
const last = new Date(parseInt(data.lastLoginTime) * 1000);
|
||||
const exp = new Date(last.getTime() + daysToKick * oneDayInSec * 1000);
|
||||
const diff = Math.floor((exp.getTime() - now.getTime()) / 1000);
|
||||
const daysLeft = Math.floor(diff / oneDayInSec);
|
||||
let timeLeft = diff;
|
||||
if (daysLeft >= 1) {
|
||||
timeLeft = (diff - (daysLeft * oneDayInSec));
|
||||
timeLeft = diff - daysLeft * oneDayInSec;
|
||||
}
|
||||
data.inactivity = {
|
||||
daysLeft: daysLeft,
|
||||
timeLeft: timeLeft,
|
||||
dropDelay: `${daysLeft}d, ${this._utilitiesService.secondsToDuration(timeLeft)}`,
|
||||
dropDate: Math.floor((exp.getTime() / 1000))
|
||||
dropDate: Math.floor(exp.getTime() / 1000),
|
||||
};
|
||||
data.raids = [];
|
||||
data.raidsInfo = {
|
||||
variationAvg: 0,
|
||||
variationSum: 0
|
||||
variationSum: 0,
|
||||
};
|
||||
data.stat = {} as HWMemberStat;
|
||||
let index = guildData.membersStat.findIndex(stat => stat.userId === data.id);
|
||||
let index = guildData.membersStat.findIndex((stat) => stat.userId === data.id);
|
||||
if (index !== -1) {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
|
||||
const { userId, ...memberStatWithoutUserId } = guildData.membersStat[index] as any;
|
||||
Object.assign(data.stat, memberStatWithoutUserId);
|
||||
}
|
||||
index = guildStatistics.stat.findIndex(stat => stat.id === data.id);
|
||||
index = guildStatistics.stat.findIndex((stat) => stat.id === data.id);
|
||||
if (index !== -1) {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
|
||||
const { id, ...weekStatSource } = guildStatistics.stat[index] as any;
|
||||
const stat: HWWeekStat = {} as HWWeekStat;
|
||||
Object.assign(stat, weekStatSource);
|
||||
data.weekStat = stat;
|
||||
data.adventureSum = guildStatistics.stat[index].adventureStat.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
|
||||
data.clanGiftsSum = guildStatistics.stat[index].clanGifts.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
|
||||
data.clanWarSum = guildStatistics.stat[index].clanWarStat.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
|
||||
data.adventureSum = guildStatistics.stat[index].adventureStat.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue,
|
||||
0,
|
||||
);
|
||||
data.clanGiftsSum = guildStatistics.stat[index].clanGifts.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue,
|
||||
0,
|
||||
);
|
||||
data.clanWarSum = guildStatistics.stat[index].clanWarStat.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue,
|
||||
0,
|
||||
);
|
||||
} else {
|
||||
data.weekStat = {} as HWWeekStat;
|
||||
data.adventureSum = 0;
|
||||
@@ -124,8 +146,8 @@ export class HWMemberService {
|
||||
data.clanWarSum = 0;
|
||||
}
|
||||
|
||||
data.score = (data.stat.dungeonActivitySum + data.stat.activitySum + data.stat.prestigeSum);
|
||||
data.warGifts = (((clan.giftsCount / 2) * ((data.clanWarSum * 10) / 100)) / 20);
|
||||
data.score = data.stat.dungeonActivitySum + data.stat.activitySum + data.stat.prestigeSum;
|
||||
data.warGifts = ((clan.giftsCount / 2) * ((data.clanWarSum * 10) / 100)) / 20;
|
||||
data.scoreGifts = 0;
|
||||
data.rewards = 0;
|
||||
return data;
|
||||
@@ -133,5 +155,4 @@ export class HWMemberService {
|
||||
|
||||
return guildMembers;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user