Skip to main content

Personal Best Entities

Entities for tracking personal best catches with custom criteria and automatic detection.

PersonalBestCriteria

Purpose: Defines what counts as a Personal Best for a user.

Key Fields:

  • Id (int): Unique identifier
  • UserId: Criteria owner
  • Name: Criteria name (e.g., "Largest Chinook by weight")
  • SpeciesId: Optional species filter
  • MeasurementType: Weight, Length, Girth, ForkLength, etc.
  • ComparisonType: Largest, Longest, Heaviest
  • IncludeVariants: Include subspecies/variants
  • IncludeHybrids: Include hybrids
  • IncludeLifeStages: Include life stages
  • IncludeRelatedSpecies: Include related species
  • RequiresVerification: Whether catch verification required
  • AutoPost: Automatically create post when PB achieved
  • IsActive: Whether criteria is active

Relationships:

  • Many-to-one: User, FishSpecies (optional)
  • One-to-many: PersonalBest

Usage Patterns:

// Create PB criteria
var criteria = new PersonalBestCriteria
{{
UserId = userId,
Name = "Largest Chinook by Weight",
SpeciesId = chinookSpeciesId,
MeasurementType = PersonalBestMeasurementType.Weight,
ComparisonType = PersonalBestComparisonType.Largest,
RequiresVerification = true,
AutoPost = true
}};

// Get user's PB criteria
var criteria = context.PersonalBestCriterias
.Where(pbc => pbc.UserId == userId && pbc.IsActive)
.Include(pbc => pbc.Species)
.ToList();

PersonalBest

Purpose: Represents an actual PB catch record.

Key Fields:

  • Id (int): Unique identifier
  • PersonalBestCriteriaId: Associated criteria
  • FishingLogEntryId: Catch log entry
  • CatchDetailId: Catch detail
  • WeightKg, LengthCm, GirthCm: PB measurements
  • PreviousPbId: Previous PB record
  • ImprovementAmount: Improvement over previous PB
  • ImprovementPercent: Improvement percentage
  • IsUltimatePb: Ultimate PB flag (featured on profile)
  • IsStateRecord: State record flag
  • IsWorldRecord: World record flag
  • VerifiedAt: Verification timestamp
  • AchievedAt: Achievement date

Relationships:

  • Many-to-one: PersonalBestCriteria, FishingLogEntry, CatchDetail, PersonalBest (previous)

Usage Patterns:

// Get user's PBs
var pbs = context.PersonalBests
.Where(pb => pb.PersonalBestCriteria.UserId == userId)
.Include(pb => pb.FishingLogEntry)
.Include(pb => pb.CatchDetail)
.ThenInclude(cd => cd.FishSpecies)
.OrderByDescending(pb => pb.AchievedAt)
.ToList();
  • Personal Best System - Complete PB system documentation
  • Fishing Logs - Catch logging
  • Catch Verification - See FishingLog.Infrastructure/Entities/FishingLog/CatchVerification.cs for catch verification system