diff options
| author | Fuwn <[email protected]> | 2024-02-17 21:04:59 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-02-17 21:04:59 -0800 |
| commit | f1a09f3348cf4dbc7a0fb6116f9f41fcde372f4c (patch) | |
| tree | be69710d2dbf59badb9be88a1e6dce3c710d6525 /src/lib/Database | |
| parent | feat(events): avatar for all events (diff) | |
| download | due.moe-f1a09f3348cf4dbc7a0fb6116f9f41fcde372f4c.tar.xz due.moe-f1a09f3348cf4dbc7a0fb6116f9f41fcde372f4c.zip | |
feat(hololive): move pinned to preferences
Diffstat (limited to 'src/lib/Database')
| -rw-r--r-- | src/lib/Database/userConfiguration.ts | 26 | ||||
| -rw-r--r-- | src/lib/Database/userPreferences.ts | 63 |
2 files changed, 64 insertions, 25 deletions
diff --git a/src/lib/Database/userConfiguration.ts b/src/lib/Database/userConfiguration.ts index de86fbe4..6a22105a 100644 --- a/src/lib/Database/userConfiguration.ts +++ b/src/lib/Database/userConfiguration.ts @@ -5,13 +5,11 @@ interface UserConfiguration { configuration: object; created_at: string; updated_at: string; - pinned_hololive_streams: string[]; } interface NewUserConfiguration { configuration: object; updated_at?: string; - pinned_hololive_streams?: string[]; } export const getUserConfiguration = async (userId: number) => { @@ -26,17 +24,13 @@ export const getUserConfiguration = async (userId: number) => { }; export const setUserConfiguration = async (userId: number, configuration: NewUserConfiguration) => { - const userConfiguration = await getUserConfiguration(userId); const { data, error } = await supabase .from('user_configuration') .upsert( { user_id: userId, configuration: configuration.configuration, - updated_at: configuration.updated_at || new Date().toISOString(), - pinned_hololive_streams: - configuration.pinned_hololive_streams || - (userConfiguration ? userConfiguration.pinned_hololive_streams : []) + updated_at: configuration.updated_at || new Date().toISOString() }, { onConflict: 'user_id' } ) @@ -47,24 +41,6 @@ export const setUserConfiguration = async (userId: number, configuration: NewUse return data[0].configuration as UserConfiguration; }; -export const toggleHololiveStreamPinning = async (userId: number, streamId: string) => { - const userConfiguration = await getUserConfiguration(userId); - - if (!userConfiguration) return null; - - const pinnedStreams = userConfiguration.pinned_hololive_streams; - const index = pinnedStreams.indexOf(streamId); - - if (index === -1) pinnedStreams.push(streamId); - else pinnedStreams.splice(index, 1); - - return setUserConfiguration(userId, { - configuration: userConfiguration.configuration, - updated_at: new Date().toISOString(), - pinned_hololive_streams: pinnedStreams - }); -}; - export const deleteUserConfiguration = async (userId: number) => { const { data, error } = await supabase.from('user_configuration').delete().eq('user_id', userId); diff --git a/src/lib/Database/userPreferences.ts b/src/lib/Database/userPreferences.ts new file mode 100644 index 00000000..f04a49e1 --- /dev/null +++ b/src/lib/Database/userPreferences.ts @@ -0,0 +1,63 @@ +import supabase from './supabase'; + +export interface UserPreferences { + created_at: string; + updated_at: string; + user_id: number; + pinned_hololive_streams: string[]; + hide_missing_badges: boolean; +} + +interface NewUserPreferences { + updated_at?: string; + pinned_hololive_streams?: string[]; + hide_missing_badges?: boolean; +} + +export const getUserPreferences = async (userId: number) => { + const { data, error } = await supabase.from('user_preferences').select('*').eq('user_id', userId); + + if (error || data.length === 0 || data[0].user_id !== userId) return null; + + return data[0] as UserPreferences; +}; + +export const setUserPreferences = async (userId: number, preferences: NewUserPreferences) => { + const userPreferences = await getUserPreferences(userId); + const { data, error } = await supabase + .from('user_preferences') + .upsert( + { + user_id: userId, + updated_at: preferences.updated_at || new Date().toISOString(), + pinned_hololive_streams: + preferences.pinned_hololive_streams || + (userPreferences ? userPreferences.pinned_hololive_streams : []), + hide_missing_badges: preferences.hide_missing_badges || false + }, + { onConflict: 'user_id' } + ) + .select(); + + if (error || !data || (data as []).length === 0) return null; + + return data[0].configuration as UserPreferences; +}; + +export const toggleHololiveStreamPinning = async (userId: number, streamId: string) => { + const userPreferences = await getUserPreferences(userId); + + if (!userPreferences) return null; + + const pinnedStreams = userPreferences.pinned_hololive_streams; + const index = pinnedStreams.indexOf(streamId); + + if (index === -1) pinnedStreams.push(streamId); + else pinnedStreams.splice(index, 1); + + return await setUserPreferences(userId, { + updated_at: new Date().toISOString(), + pinned_hololive_streams: pinnedStreams, + hide_missing_badges: userPreferences.hide_missing_badges + }); +}; |