Add list moons command #449

Merged
Vylpes merged 15 commits from feature/195-list-moons into develop 2024-08-17 16:47:14 +01:00
3 changed files with 7 additions and 10 deletions
Showing only changes of commit 4ef8f0edd0 - Show all commits

View file

@ -1,20 +1,21 @@
import {ActionRowBuilder, ButtonBuilder, ButtonStyle, CommandInteraction, EmbedBuilder} from "discord.js"; import {ActionRowBuilder, ButtonBuilder, ButtonStyle, CommandInteraction, EmbedBuilder} from "discord.js";
import Moon from "../../../database/entities/Moon"; import Moon from "../../../database/entities/Moon";
import EmbedColours from "../../../constants/EmbedColours"; import EmbedColours from "../../../constants/EmbedColours";
import MoonConstants from "../../../constants/MoonConstants";
export default async function ListMoons(interaction: CommandInteraction) { export default async function ListMoons(interaction: CommandInteraction) {
const user = interaction.options.get("user")?.user ?? interaction.user; const user = interaction.options.get("user")?.user ?? interaction.user;
const page = interaction.options.get("page")?.value as number ?? 0; const page = interaction.options.get("page")?.value as number ?? 0;
const moons = await Moon.FetchPaginatedMoonsByUserId(user.id, page); const pageLength = 10;
const moons = await Moon.FetchPaginatedMoonsByUserId(user.id, pageLength, page);
if (!moons || moons[0].length == 0) { if (!moons || moons[0].length == 0) {
await interaction.reply(`${user.username} does not have any moons or page is invalid.`); await interaction.reply(`${user.username} does not have any moons or page is invalid.`);
return; return;
} }
const totalPages = Math.ceil(moons[1] / MoonConstants.ListPageLength); const totalPages = Math.ceil(moons[1] / pageLength);
const description = moons[0].flatMap(x => `${x.MoonNumber}. ${x.Description.slice(0, 15)}`); const description = moons[0].flatMap(x => `${x.MoonNumber}. ${x.Description.slice(0, 15)}`);

View file

@ -1,3 +0,0 @@
export default class MoonConstants {
public static readonly ListPageLength = 10;
}

View file

@ -1,7 +1,6 @@
import { Column, Entity } from "typeorm"; import { Column, Entity } from "typeorm";
import BaseEntity from "../../contracts/BaseEntity"; import BaseEntity from "../../contracts/BaseEntity";
import AppDataSource from "../dataSources/appDataSource"; import AppDataSource from "../dataSources/appDataSource";
import MoonConstants from "../../constants/MoonConstants";
@Entity() @Entity()
export default class Moon extends BaseEntity { export default class Moon extends BaseEntity {
@ -30,8 +29,8 @@ export default class Moon extends BaseEntity {
return all; return all;
} }
public static async FetchPaginatedMoonsByUserId(userId: string, page: number): Promise<[ Moon[], number ]> { public static async FetchPaginatedMoonsByUserId(userId: string, pageLength: number, page: number): Promise<[ Moon[], number ]> {
const rangeStart = page * MoonConstants.ListPageLength; const rangeStart = page * pageLength;
const repository = AppDataSource.getRepository(Moon); const repository = AppDataSource.getRepository(Moon);
@ -39,7 +38,7 @@ export default class Moon extends BaseEntity {
where: { UserId: userId }, where: { UserId: userId },
order: { MoonNumber: "ASC" }, order: { MoonNumber: "ASC" },
skip: rangeStart, skip: rangeStart,
take: MoonConstants.ListPageLength, take: pageLength,
}); });
return moons; return moons;