mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-24 15:11:12 -05:00
157 lines
5.9 KiB
TypeScript
157 lines
5.9 KiB
TypeScript
/**
|
|
* Centralized query key definitions for TanStack Query
|
|
*
|
|
* This ensures consistent query keys across the application
|
|
* and makes cache invalidation easier to manage.
|
|
*/
|
|
|
|
export const queryKeys = {
|
|
// User-related queries
|
|
userRoles: (userId?: string) => ['user-roles', userId] as const,
|
|
userPermissions: (userId?: string) => ['user-permissions', userId] as const,
|
|
|
|
// Moderation queue queries
|
|
moderationQueue: (config: Record<string, any>) => ['moderation-queue', config] as const,
|
|
moderationStats: () => ['moderation-stats'] as const,
|
|
|
|
// Homepage queries
|
|
homepage: {
|
|
trendingParks: () => ['homepage', 'trending-parks'] as const,
|
|
trendingRides: () => ['homepage', 'trending-rides'] as const,
|
|
recentParks: () => ['homepage', 'recent-parks'] as const,
|
|
recentRides: () => ['homepage', 'recent-rides'] as const,
|
|
recentChanges: () => ['homepage', 'recent-changes'] as const,
|
|
recentlyOpenedParks: () => ['homepage', 'recently-opened-parks'] as const,
|
|
recentlyOpenedRides: () => ['homepage', 'recently-opened-rides'] as const,
|
|
highestRatedParks: () => ['homepage', 'highest-rated-parks'] as const,
|
|
highestRatedRides: () => ['homepage', 'highest-rated-rides'] as const,
|
|
openingSoonParks: () => ['homepage', 'opening-soon-parks'] as const,
|
|
openingSoonRides: () => ['homepage', 'opening-soon-rides'] as const,
|
|
closingSoonParks: () => ['homepage', 'closing-soon-parks'] as const,
|
|
closingSoonRides: () => ['homepage', 'closing-soon-rides'] as const,
|
|
recentlyClosedParks: () => ['homepage', 'recently-closed-parks'] as const,
|
|
recentlyClosedRides: () => ['homepage', 'recently-closed-rides'] as const,
|
|
featuredParks: {
|
|
topRated: () => ['homepage', 'featured-parks', 'top-rated'] as const,
|
|
mostRides: () => ['homepage', 'featured-parks', 'most-rides'] as const,
|
|
},
|
|
},
|
|
|
|
// Parks queries
|
|
parks: {
|
|
all: () => ['parks', 'all'] as const,
|
|
detail: (slug: string) => ['parks', 'detail', slug] as const,
|
|
rides: (parkId: string) => ['parks', 'rides', parkId] as const,
|
|
},
|
|
|
|
// Rides queries
|
|
rides: {
|
|
all: () => ['rides', 'all'] as const,
|
|
detail: (parkSlug: string, rideSlug: string) => ['rides', 'detail', parkSlug, rideSlug] as const,
|
|
similar: (parkId: string, category: string, currentId: string) =>
|
|
['rides', 'similar', parkId, category, currentId] as const,
|
|
},
|
|
|
|
// Reviews queries
|
|
reviews: {
|
|
entity: (entityType: 'park' | 'ride', entityId: string) =>
|
|
['reviews', entityType, entityId] as const,
|
|
user: (userId: string, filter: string, sortBy: string) =>
|
|
['reviews', 'user', userId, filter, sortBy] as const,
|
|
},
|
|
|
|
// Photos queries
|
|
photos: {
|
|
entity: (entityType: string, entityId: string, sortBy?: string) =>
|
|
['photos', entityType, entityId, sortBy] as const,
|
|
count: (entityType: string, entityId: string) =>
|
|
['photos', 'count', entityType, entityId] as const,
|
|
},
|
|
|
|
// Search queries
|
|
search: {
|
|
global: (query: string) => ['search', 'global', query] as const,
|
|
},
|
|
|
|
// Lists queries
|
|
lists: {
|
|
items: (listId: string) => ['list-items', listId] as const,
|
|
user: (userId?: string) => ['lists', 'user', userId] as const,
|
|
},
|
|
|
|
// Users queries
|
|
users: {
|
|
roles: (userId?: string) => ['users', 'roles', userId] as const,
|
|
search: (searchTerm: string) => ['users', 'search', searchTerm] as const,
|
|
},
|
|
|
|
// Admin queries
|
|
admin: {
|
|
versionAudit: ['admin', 'version-audit'] as const,
|
|
settings: () => ['admin-settings'] as const,
|
|
blogPosts: () => ['admin-blog-posts'] as const,
|
|
contactSubmissions: (statusFilter?: string, categoryFilter?: string, searchQuery?: string, showArchived?: boolean) =>
|
|
['admin-contact-submissions', statusFilter, categoryFilter, searchQuery, showArchived] as const,
|
|
auditLogs: (userId?: string) => ['admin', 'audit-logs', userId] as const,
|
|
},
|
|
|
|
// Moderation queries
|
|
moderation: {
|
|
photoSubmission: (submissionId?: string) => ['moderation', 'photo-submission', submissionId] as const,
|
|
recentActivity: ['moderation', 'recent-activity'] as const,
|
|
},
|
|
|
|
// Company queries
|
|
companies: {
|
|
all: (type: string) => ['companies', 'all', type] as const,
|
|
detail: (slug: string, type: string) => ['companies', 'detail', slug, type] as const,
|
|
statistics: (id: string, type: string) => ['companies', 'statistics', id, type] as const,
|
|
parks: (id: string, type: string, limit: number) => ['companies', 'parks', id, type, limit] as const,
|
|
},
|
|
|
|
// Profile queries
|
|
profile: {
|
|
detail: (userId: string) => ['profile', userId] as const,
|
|
activity: (userId: string, isOwn: boolean, isMod: boolean) =>
|
|
['profile', 'activity', userId, isOwn, isMod] as const,
|
|
stats: (userId: string) => ['profile', 'stats', userId] as const,
|
|
},
|
|
|
|
// Ride Models queries
|
|
rideModels: {
|
|
all: (manufacturerId: string) => ['ride-models', 'all', manufacturerId] as const,
|
|
detail: (manufacturerSlug: string, modelSlug: string) =>
|
|
['ride-models', 'detail', manufacturerSlug, modelSlug] as const,
|
|
rides: (modelId: string, limit?: number) =>
|
|
['ride-models', 'rides', modelId, limit] as const,
|
|
statistics: (modelId: string) => ['ride-models', 'statistics', modelId] as const,
|
|
},
|
|
|
|
// Settings queries
|
|
settings: {
|
|
publicNovu: () => ['public-novu-settings'] as const,
|
|
},
|
|
|
|
// Stats queries
|
|
stats: {
|
|
coaster: (rideId: string) => ['coaster-stats', rideId] as const,
|
|
},
|
|
|
|
// Blog queries
|
|
blog: {
|
|
post: (slug: string) => ['blog-post', slug] as const,
|
|
viewIncrement: (slug: string) => ['blog-view-increment', slug] as const,
|
|
},
|
|
|
|
// Entity name queries (for PhotoManagementDialog)
|
|
entities: {
|
|
name: (entityType: string, entityId: string) => ['entity-name', entityType, entityId] as const,
|
|
},
|
|
|
|
// Security queries
|
|
security: {
|
|
emailChangeStatus: () => ['email-change-status'] as const,
|
|
sessions: () => ['my-sessions'] as const,
|
|
},
|
|
} as const;
|