Refactoring

This commit is contained in:
2026-03-29 23:23:33 +02:00
parent 43d61fcf16
commit 8a602bd2db
124 changed files with 1313 additions and 758 deletions
@@ -0,0 +1,127 @@
import { Injectable } 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
} from '@models';
import guildData from 'src/files-data/hw-guild-data.json'; // page Membres
@Injectable({ providedIn: 'root' })
export class HWClanService {
private apiVersion = '/v3';
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 };
return activity;
}
query(config: HWClanListConfig): Observable<HWClanList> {
// Convert any filters over to Angular's URLSearchParams
const params: HWClanListFilters = {} as HWClanListFilters;
Object.assign(params, config.filters);
return this.apiService
.get(
`${this.apiVersion}/clans`,
new HttpParams({ fromObject: <{
[param: string]: string | number | boolean | readonly (string | number | boolean)[];
}>params })
);
}
get(id: string): Observable<HWClanPageData> {
return this.apiService.get(`${this.apiVersion}/clans/${id}`);
}
getAll(): Observable<Array<HWClan>> {
return this.apiService.get(`${this.apiVersion}/clans`).pipe(map(data => data.clans));
}
create(clan: HWClan): Observable<HWClan> {
return this.apiService.post(`${this.apiVersion}/clans/`, { clan: clan }).pipe(map(data => data.clan));
}
update(clan: HWClan): Observable<HWClan> {
return this.apiService.put(`${this.apiVersion}/clans/${clan.id}`, { clan: clan }).pipe(map(data => data.clan));
}
destroy(id: string): Observable<boolean> {
return this.apiService.delete(`${this.apiVersion}/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.apiVersion}/clans/${clan.id}`, { clan: clan }).pipe(map(data => data.clan));
// Otherwise, create a new clan
} else {
return this.apiService.post(`${this.apiVersion}/clans/`, { clan: clan }).pipe(map(data => data.clan));
}
}
loadClan(): HWGuildClan {
const guildClan: HWGuildClan = {} as HWGuildClan;
Object.assign(guildClan, guildData.clan);
guildClan.sumAverages = this._resetActivity();
guildClan.sumTotal = this._resetActivity();
guildClan.todayAverages = this._resetActivity();
guildClan.todayTotal = this._resetActivity();
return guildClan;
}
loadClanStats(clan: HWGuildClan, members: HWMember[]): HWGuildClan {
members.map((member: HWMember) => {
clan.sumTotal.adventure += member.adventureSum;
clan.sumTotal.gifts += member.clanGiftsSum;
clan.sumTotal.war += member.clanWarSum;
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.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);
if (clan.league === '3') {
clan.sumAverages.war = (clan.sumTotal.war / 10);
} else if (clan.league === '2') {
clan.sumAverages.war = (clan.sumTotal.war / 15);
} else if (clan.league === '1') {
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);
members.map((data) => {
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);
return clan;
}
}
@@ -0,0 +1,137 @@
import { Injectable } 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
} 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 apiVersion = '/v3';
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.apiVersion}/members`,
new HttpParams({ fromObject: <{
[param: string]: string | number | boolean | readonly (string | number | boolean)[];
}>params })
);
}
get(id: string): Observable<HWMemberPageData> {
return this._apiService.get(`${this.apiVersion}/members/${id}`);
}
getAll(): Observable<Array<HWMember>> {
return this._apiService.get(`${this.apiVersion}/members`).pipe(map(data => data.members));
}
create(member: HWMember): Observable<HWMember> {
return this._apiService.post(`${this.apiVersion}/members/`, { member: member }).pipe(map(data => data.member));
}
update(member: HWMember): Observable<HWMember> {
return this._apiService.put(`${this.apiVersion}/members/${member.id}`, { member: member }).pipe(map(data => data.member));
}
destroy(id: string): Observable<boolean> {
return this._apiService.delete(`${this.apiVersion}/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.apiVersion}/members/${member.id}`, { member: member }).pipe(map(data => data.member));
// Otherwise, create a new member
} else {
return this._apiService.post(`${this.apiVersion}/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 daysToKick = parseInt(guildData.clan.daysToKick);
for (const data of Object.entries(guildData.clan.members)) {
const member: HWMember = {} as HWMember;
Object.assign(member, data[1]);
if (guildData.clan.warriors.indexOf(parseInt(member.id)) !== -1) {
member.champion = true;
} else {
member.champion = false;
}
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));
let timeLeft = diff;
if (daysLeft >= 1) {
timeLeft = (diff - (daysLeft * oneDayInSec));
}
data.inactivity = {
daysLeft: daysLeft,
timeLeft: timeLeft,
dropDelay: `${daysLeft}d, ${this._utilitiesService.secondsToDuration(timeLeft)}`,
dropDate: Math.floor((exp.getTime() / 1000))
};
data.raids = [];
data.raidsInfo = {
variationAvg: 0,
variationSum: 0
};
data.stat = {} as HWMemberStat;
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);
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);
} else {
data.weekStat = {} as HWWeekStat;
data.adventureSum = 0;
data.clanGiftsSum = 0;
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.scoreGifts = 0;
data.rewards = 0;
return data;
});
return guildMembers;
}
}
+3
View File
@@ -0,0 +1,3 @@
export * from './hwclan.service';
export * from './hwmember.service';