forty-ends-melt/TAYLORDB_INTEGRATION.md

5.5 KiB

TaylorDB Integration Summary

Created Files

server/taylordb/query-builder.ts

Comprehensive CRUD operations for all TaylorDB tables with 40+ functions:

Weight Tracking

  • getAllWeightRecords() - Get all weight entries
  • getWeightRecordsByDateRange() - Filter by date range
  • getWeightRecordById() - Get single record
  • createWeightRecord() - Add new weight entry
  • updateWeightRecord() - Update existing record
  • deleteWeightRecord() - Delete single record
  • deleteWeightRecords() - Batch delete
  • getWeightStats() - Get aggregated statistics

Goals Management

  • getAllGoals() - List all goals
  • createGoal() - Create new goal
  • updateGoal() - Update goal
  • deleteGoal() - Delete goal

Strength Training

  • getStrengthWorkouts() - Get workouts with optional filtering
  • createStrengthWorkout() - Log workout
  • updateStrengthWorkout() - Update workout
  • deleteStrengthWorkout() - Delete workout

Cardio Exercise

  • getCardioExercises() - Get all cardio sessions
  • createCardioExercise() - Log cardio session (auto-calculates speed)
  • updateCardioExercise() - Update session
  • deleteCardioExercise() - Delete session

Calories/Nutrition

  • getCaloriesByTimeOfDay() - Filter by meal time
  • createCalorieEntry() - Log meal/calories
  • updateCalorieEntry() - Update nutrition data
  • deleteCalorieEntry() - Delete entry
  • getTotalCaloriesForDate() - Daily nutrition aggregation

Settings

  • getSettingByName() - Get setting by name
  • createSetting() - Create/update setting
  • updateSetting() - Modify setting
  • deleteSetting() - Remove setting

server/router.ts

Updated tRPC router with 50+ type-safe procedures organized by feature:

appRouter = {
  hello: { ... },           // Test procedure

  weight: {
    getAll: query,
    getById: query,
    getByDateRange: query,
    create: mutation,
    update: mutation,
    delete: mutation,
    deleteMultiple: mutation,
    getStats: query,
  },

  goals: {
    getAll: query,
    create: mutation,
    update: mutation,
    delete: mutation,
  },

  strength: {
    getAll: query,
    create: mutation,
    update: mutation,
    delete: mutation,
  },

  cardio: {
    getAll: query,
    create: mutation,
    update: mutation,
    delete: mutation,
  },

  calories: {
    getByTimeOfDay: query,
    create: mutation,
    update: mutation,
    delete: mutation,
    getTotalForDate: query,
  },

  settings: {
    getByName: query,
    create: mutation,
    update: mutation,
    delete: mutation,
  },
}

All procedures include:

  • Zod validation
  • Type safety
  • Error handling
  • Proper TypeScript types

.env.example

Environment configuration template with all required variables.


Usage Examples

Frontend (React Component)

import { trpc } from "@/lib/trpc";

function WeightTracker() {
  // Query all weights
  const { data: weights } = trpc.weight.getAll.useQuery();

  // Create mutation
  const createWeight = trpc.weight.create.useMutation({
    onSuccess: () => {
      // Refetch or invalidate queries
    },
  });

  // Add new weight entry
  const handleSubmit = () => {
    createWeight.mutate({
      date: "2026-01-08",
      weight: 75.5,
      name: "Morning weight",
    });
  };

  return (
    <div>
      {weights?.map((w) => (
        <div key={w.id}>
          {w.date}: {w.weight}kg
        </div>
      ))}
    </div>
  );
}

Backend (Direct Query Builder Usage)

import * as db from "./taylordb/query-builder";

// Get workouts for specific exercise
const pushups = await db.getStrengthWorkouts("Push-ups");

// Create cardio session with auto-calculated speed
await db.createCardioExercise({
  exercise: "Running",
  duration: 30, // minutes
  distance: 5, // km
  date: "2026-01-08",
  // speed is automatically calculated: 5km / 0.5hr = 10km/h
});

// Get nutrition totals for today
const nutrition = await db.getTotalCaloriesForDate("2026-01-08");
console.log(nutrition.totalCalories.sum); // e.g., 2000

Key Features

Type Safety

  • Full end-to-end type inference
  • TypeScript autocomplete for all operations
  • Zod runtime validation

Query Builder Features

  • Filtering: Date ranges, text search, numeric comparisons
  • Aggregations: Sum, average, min/max, statistics
  • Batch Operations: Delete multiple records
  • Auto-calculations: Speed calculation for cardio

Organization

  • Grouped by domain (weight, goals, strength, etc.)
  • Clear naming conventions
  • Comprehensive documentation

Next Steps

  1. Copy .env.example to .env and add your TaylorDB credentials
  2. Generate types: Run pnpm generate:schema to create TaylorDB types
  3. Test endpoints: Use the tRPC demo page or create your own
  4. Add authentication: Protect procedures as needed
  5. Customize: Add more procedures for your specific use cases

TypeScript Notes

The type errors you see are expected until you:

  1. Set up TaylorDB credentials in .env
  2. Run pnpm generate:schema to generate proper types
  3. Restart the TypeScript server

The code is ready to use - the types will align once TaylorDB is properly configured!