This commit is contained in:
parent
5bfd8baa3f
commit
ca6f43d443
@ -35,12 +35,5 @@ export async function GET(request: NextRequest) {
|
|||||||
return NextResponse.json({ error: "Player not found" }, { status: 404 });
|
return NextResponse.json({ error: "Player not found" }, { status: 404 });
|
||||||
}
|
}
|
||||||
|
|
||||||
const history: Map<string, PlayerHistory> = foundPlayer.getStatisticHistory();
|
return NextResponse.json(foundPlayer.getHistoryPrevious(50));
|
||||||
let fetchedHistory = sortPlayerHistory(history);
|
|
||||||
fetchedHistory = fetchedHistory.slice(-50); // Get the last 50 entries
|
|
||||||
const resultHistory: { [key: string]: PlayerHistory } = {};
|
|
||||||
for (const [date, history] of fetchedHistory) {
|
|
||||||
resultHistory[date] = history;
|
|
||||||
}
|
|
||||||
return NextResponse.json(resultHistory);
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
import mongoose, { Document, Schema } from "mongoose";
|
import mongoose, { Document, Schema } from "mongoose";
|
||||||
import { PlayerHistory } from "@/common/player/player-history";
|
import { PlayerHistory } from "@/common/player/player-history";
|
||||||
import { formatDateMinimal, getMidnightAlignedDate } from "@/common/time-utils";
|
import {
|
||||||
|
formatDateMinimal,
|
||||||
|
getDaysAgo,
|
||||||
|
getMidnightAlignedDate,
|
||||||
|
} from "@/common/time-utils";
|
||||||
import ScoreSaberPlayer from "@/common/model/player/impl/scoresaber-player";
|
import ScoreSaberPlayer from "@/common/model/player/impl/scoresaber-player";
|
||||||
|
import { sortPlayerHistory } from "@/common/player-utils";
|
||||||
|
|
||||||
// Interface for Player Document
|
// Interface for Player Document
|
||||||
export interface IPlayer extends Document {
|
export interface IPlayer extends Document {
|
||||||
@ -32,6 +37,8 @@ export interface IPlayer extends Document {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets when this player was last tracked.
|
* Gets when this player was last tracked.
|
||||||
|
*
|
||||||
|
* @returns the date when the player was last tracked
|
||||||
*/
|
*/
|
||||||
getLastTracked(): Date;
|
getLastTracked(): Date;
|
||||||
|
|
||||||
@ -39,11 +46,22 @@ export interface IPlayer extends Document {
|
|||||||
* Gets the history for the given date
|
* Gets the history for the given date
|
||||||
*
|
*
|
||||||
* @param date
|
* @param date
|
||||||
|
* @returns the player history
|
||||||
*/
|
*/
|
||||||
getHistory(date: Date): PlayerHistory;
|
getHistoryByDate(date: Date): PlayerHistory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the history for the previous X days
|
||||||
|
*
|
||||||
|
* @param amount the amount of days
|
||||||
|
* @returns the player history
|
||||||
|
*/
|
||||||
|
getHistoryPrevious(amount: number): { [key: string]: PlayerHistory };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets all the statistic history
|
* Gets all the statistic history
|
||||||
|
*
|
||||||
|
* @returns the statistic history
|
||||||
*/
|
*/
|
||||||
getStatisticHistory(): Map<string, PlayerHistory>;
|
getStatisticHistory(): Map<string, PlayerHistory>;
|
||||||
|
|
||||||
@ -57,6 +75,8 @@ export interface IPlayer extends Document {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sorts the statistic history
|
* Sorts the statistic history
|
||||||
|
*
|
||||||
|
* @returns the sorted statistic history
|
||||||
*/
|
*/
|
||||||
sortStatisticHistory(): Map<string, PlayerHistory>;
|
sortStatisticHistory(): Map<string, PlayerHistory>;
|
||||||
}
|
}
|
||||||
@ -74,7 +94,7 @@ PlayerSchema.methods.getLastTracked = function (): Date {
|
|||||||
return this.ked || new Date();
|
return this.ked || new Date();
|
||||||
};
|
};
|
||||||
|
|
||||||
PlayerSchema.methods.getHistory = function (date: Date): PlayerHistory {
|
PlayerSchema.methods.getHistoryByDate = function (date: Date): PlayerHistory {
|
||||||
return (
|
return (
|
||||||
this.statisticHistory.get(
|
this.statisticHistory.get(
|
||||||
formatDateMinimal(getMidnightAlignedDate(date)),
|
formatDateMinimal(getMidnightAlignedDate(date)),
|
||||||
@ -82,6 +102,22 @@ PlayerSchema.methods.getHistory = function (date: Date): PlayerHistory {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
PlayerSchema.methods.getHistoryPrevious = function (amount: number): {
|
||||||
|
[key: string]: PlayerHistory;
|
||||||
|
} {
|
||||||
|
const toReturn: { [key: string]: PlayerHistory } = {};
|
||||||
|
const history = sortPlayerHistory(this.getStatisticHistory());
|
||||||
|
|
||||||
|
for (let [date, stat] of history) {
|
||||||
|
const parsedDate = new Date(date);
|
||||||
|
if (getDaysAgo(parsedDate) + 1 <= amount) {
|
||||||
|
toReturn[date] = stat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return toReturn;
|
||||||
|
};
|
||||||
|
|
||||||
PlayerSchema.methods.getStatisticHistory = function (): Map<
|
PlayerSchema.methods.getStatisticHistory = function (): Map<
|
||||||
Date,
|
Date,
|
||||||
PlayerHistory
|
PlayerHistory
|
||||||
|
Reference in New Issue
Block a user