aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-10-18 04:09:54 -0700
committerFuwn <[email protected]>2024-10-18 04:09:54 -0700
commite40211e7c1831357bc448d575d47e619cbe04587 (patch)
treeaead83f2618fcb99e612698789f90e3167900a0e
parentfeat(tools): add simple tracker (diff)
downloaddue.moe-e40211e7c1831357bc448d575d47e619cbe04587.tar.xz
due.moe-e40211e7c1831357bc448d575d47e619cbe04587.zip
feat(graphql): paged badges query
-rw-r--r--src/graphql/user/resolvers.ts7
-rw-r--r--src/graphql/user/schema.graphql1
-rw-r--r--src/lib/Database/IDB/tracker.ts2
-rw-r--r--src/lib/Database/SB/User/badges.ts15
-rw-r--r--src/lib/Tools/tools.ts3
-rw-r--r--src/stores/settings.ts20
6 files changed, 34 insertions, 14 deletions
diff --git a/src/graphql/user/resolvers.ts b/src/graphql/user/resolvers.ts
index 4609108a..731b5f94 100644
--- a/src/graphql/user/resolvers.ts
+++ b/src/graphql/user/resolvers.ts
@@ -94,6 +94,13 @@ export const resolvers: WithIndex<Resolvers> = {
preferences: await getUserPreferences(args.id),
badgesCount: badges.length
};
+ },
+ badges: async (_, args) => {
+ if (!args.id) return null;
+
+ const badges = await getUserBadges(args.id, args.page || 0, args.size || 0);
+
+ return badges;
}
},
Mutation: {
diff --git a/src/graphql/user/schema.graphql b/src/graphql/user/schema.graphql
index 193b5daf..70ea066a 100644
--- a/src/graphql/user/schema.graphql
+++ b/src/graphql/user/schema.graphql
@@ -1,5 +1,6 @@
type Query {
User(id: Int): User
+ badges(id: Int!, page: Int, size: Int): [Badge!]!
}
type Mutation {
diff --git a/src/lib/Database/IDB/tracker.ts b/src/lib/Database/IDB/tracker.ts
index dc25c8fd..4c3b116a 100644
--- a/src/lib/Database/IDB/tracker.ts
+++ b/src/lib/Database/IDB/tracker.ts
@@ -13,7 +13,7 @@ export class TrackerDatabase extends Dexie {
constructor() {
super('tracker');
this.version(1).stores({
- entries: 'id, url, title, progress',
+ entries: 'id, url, title, progress'
});
this.entries = this.table('entries');
diff --git a/src/lib/Database/SB/User/badges.ts b/src/lib/Database/SB/User/badges.ts
index be866acc..97f30e64 100644
--- a/src/lib/Database/SB/User/badges.ts
+++ b/src/lib/Database/SB/User/badges.ts
@@ -15,8 +15,19 @@ export interface Badge {
click_count?: number;
}
-export const getUserBadges = async (userId: number): Promise<Badge[]> => {
- const { data, error } = await sb.from('user_badges').select('*').eq('user_id', userId);
+const getPagination = (page: number, size: number) => {
+ const from = page ? page * (size ? +size : 3) : 0;
+
+ return { from, to: page ? from + size - 1 : size - 1 };
+};
+
+export const getUserBadges = async (userId: number, page = 0, size = -1): Promise<Badge[]> => {
+ const { from, to } = getPagination(page, size);
+ let query = sb.from('user_badges').select('*').eq('user_id', userId);
+
+ if (size !== -1) query = query.range(from, to);
+
+ const { data, error } = await query;
if (error) return [];
diff --git a/src/lib/Tools/tools.ts b/src/lib/Tools/tools.ts
index 06249ab3..988d7826 100644
--- a/src/lib/Tools/tools.ts
+++ b/src/lib/Tools/tools.ts
@@ -38,7 +38,8 @@ export const tools: {
},
tracker: {
name: () => 'Tracker',
- description: () => 'Track your anime and manga progress with ease, intended for media that doesn\'t qualify for an AniList entry',
+ description: () =>
+ "Track your anime and manga progress with ease, intended for media that doesn't qualify for an AniList entry",
id: 'tracker',
hidden: true
},
diff --git a/src/stores/settings.ts b/src/stores/settings.ts
index e55eeb0d..9d6b0e3e 100644
--- a/src/stores/settings.ts
+++ b/src/stores/settings.ts
@@ -30,16 +30,16 @@ export interface Settings {
displayPlannedAnime: boolean;
displayFurigana: boolean;
displayAoButa:
- | 'kaede'
- | 'mai'
- | 'mai_2'
- | 'nodoka'
- | 'rio'
- | 'sakuta'
- | 'shouko'
- | 'tomoe'
- | 'random'
- | 'none';
+ | 'kaede'
+ | 'mai'
+ | 'mai_2'
+ | 'nodoka'
+ | 'rio'
+ | 'sakuta'
+ | 'shouko'
+ | 'tomoe'
+ | 'random'
+ | 'none';
disableManga: boolean;
disableAnime: boolean;
disableUpcomingAnime: boolean;