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 identifierUserId: Criteria ownerName: Criteria name (e.g., "Largest Chinook by weight")SpeciesId: Optional species filterMeasurementType: Weight, Length, Girth, ForkLength, etc.ComparisonType: Largest, Longest, HeaviestIncludeVariants: Include subspecies/variantsIncludeHybrids: Include hybridsIncludeLifeStages: Include life stagesIncludeRelatedSpecies: Include related speciesRequiresVerification: Whether catch verification requiredAutoPost: Automatically create post when PB achievedIsActive: 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 identifierPersonalBestCriteriaId: Associated criteriaFishingLogEntryId: Catch log entryCatchDetailId: Catch detailWeightKg,LengthCm,GirthCm: PB measurementsPreviousPbId: Previous PB recordImprovementAmount: Improvement over previous PBImprovementPercent: Improvement percentageIsUltimatePb: Ultimate PB flag (featured on profile)IsStateRecord: State record flagIsWorldRecord: World record flagVerifiedAt: Verification timestampAchievedAt: 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();
Related Documentation
- Personal Best System - Complete PB system documentation
- Fishing Logs - Catch logging
- Catch Verification - See
FishingLog.Infrastructure/Entities/FishingLog/CatchVerification.csfor catch verification system