Back to Documentation

Server Actions & Utilities

Utility functions for fetching opening data and generating dashboard statistics.

findOpening(id: string)

Fetches a specific opening with its related data including transitions and variations.

Parameters

id
string - Unique identifier of the opening

Returns

{
  opening: OpeningWithRelations | null,
  variations: Opening[]
}

Example Usage

const { opening, variations } = await findOpening('opening-123');
if (opening) {
  console.log(`Found: ${opening.name} with ${variations.length} variations`);
}

Database Queries

Primary Opening Fetch

  • Fetches opening by ID
  • Includes aliases and transitions
  • Filters transitions with valid toOpening relations

Variations Fetch

  • Finds openings with same ECO code
  • Excludes the current opening
  • Limited to 10 results
  • Ordered alphabetically by name

getDashboardData(userId: string)

Comprehensive data fetcher for user dashboard with multiple statistical aggregations.

Parameters

userId
string - Unique identifier of the user

Returns

Promise<DashboardData> {
  user: UserProfile,
  stats: {
    totalFavorites: number,
    totalVisits: number,
    totalPracticeSessions: number
  },
  mostVisitedOpenings: Array<Opening & { visitCount: number }>,
  favoriteOpenings: Opening[],
  recentPracticeSessions: PracticeSession[],
  mostPracticedOpenings: Array<Opening & { practiceCount: number }>
}

Database Queries Performed

User Profile

Basic user information and preferences

User Statistics

Counts of favorites, visits, and sessions

Favorite Openings

5 most recent favorite openings

Visit History

5 most visited openings

Performance Characteristics

  • 🚀
    Uses Promise.all() for parallel database queries
  • 📊
    Limits results to prevent over-fetching
  • âš¡
    Efficient aggregation queries for statistics

formatDate(dateString: string)

Formats date strings into a human-readable format.

Example

formatDate('2024-01-15T10:30:00.000Z') 
// Returns "Jan 15, 2024"