diff options
| author | Fuwn <[email protected]> | 2024-07-25 00:13:29 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-07-25 00:13:29 -0700 |
| commit | 3375311c1b92f615940412bb89ce81f644753996 (patch) | |
| tree | 7c8143bc368f64481246d91a329606bb876f7682 /src | |
| parent | fix(Settings): hint wording (diff) | |
| download | due.moe-3375311c1b92f615940412bb89ce81f644753996.tar.xz due.moe-3375311c1b92f615940412bb89ce81f644753996.zip | |
feat(notifications): allow unsubscribe
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/Database/userNotifications.ts | 3 | ||||
| -rw-r--r-- | src/lib/Settings/Categories/Display.svelte | 9 | ||||
| -rw-r--r-- | src/routes/api/notifications/unsubscribe/+server.ts | 26 |
3 files changed, 38 insertions, 0 deletions
diff --git a/src/lib/Database/userNotifications.ts b/src/lib/Database/userNotifications.ts index c61c2aa7..6516b813 100644 --- a/src/lib/Database/userNotifications.ts +++ b/src/lib/Database/userNotifications.ts @@ -18,6 +18,9 @@ export const getUserSubscriptions = async () => { return data as UserNotifications[]; }; +export const deleteUserSubscription = async (userId: number) => + await supabase.from('user_notifications').delete().eq('user_id', userId); + export const setUserSubscription = async (userId: number, subscription: JSON) => await supabase.from('user_notifications').upsert( { diff --git a/src/lib/Settings/Categories/Display.svelte b/src/lib/Settings/Categories/Display.svelte index dbec2c04..45f9a585 100644 --- a/src/lib/Settings/Categories/Display.svelte +++ b/src/lib/Settings/Categories/Display.svelte @@ -5,6 +5,7 @@ import root from '$lib/Utility/root'; import locale from '$stores/locale'; import { browser } from '$app/environment'; + import { requestNotifications } from '$lib/Utility/notifications'; const onHelperChange = () => { const mai = document.getElementById('mai') as HTMLImageElement; @@ -190,6 +191,14 @@ setting="displayAniListNotifications" text={$locale().settings.display.categories.motionAndAccessibility.fields .enableAniListNotifications} + onChange={() => { + console.log($settings.displayAniListNotifications); + if ($settings.displayAniListNotifications) requestNotifications().then(); + else + fetch('/api/notifications/unsubscribe', { + method: 'POST' + }).then(); + }} > <SettingHint lineBreak> Periodically check for and send recent AniList notifications as native platform notifications diff --git a/src/routes/api/notifications/unsubscribe/+server.ts b/src/routes/api/notifications/unsubscribe/+server.ts new file mode 100644 index 00000000..f122625d --- /dev/null +++ b/src/routes/api/notifications/unsubscribe/+server.ts @@ -0,0 +1,26 @@ +import { userIdentity } from '$lib/Data/AniList/identity'; +import { deleteUserSubscription } from '$lib/Database/userNotifications'; + +const unauthorised = new Response('Unauthorised', { status: 401 }); + +export const POST = async ({ cookies }) => { + const userCookie = cookies.get('user'); + + if (!userCookie) return unauthorised; + + const user = JSON.parse(userCookie); + const userId = ( + await userIdentity({ + tokenType: user['token_type'], + expiresIn: user['expires_in'], + accessToken: user['access_token'], + refreshToken: user['refresh_token'] + }) + ).id; + + if (!userId) return unauthorised; + + await deleteUserSubscription(userId); + + return new Response(null, { status: 200 }); +}; |