Charter Entities
Entities for charter boat listings, bookings, and captain management.
CharterCaptain
Purpose: Charter boat captain profile and information.
Key Fields:
Id(int): Unique identifierUserId: Associated user accountBusinessName: Charter business nameLicenseNumber: Captain's license numberLicenseExpiration: License expiration dateYearsExperience: Years of experienceBoatId: Associated boatStripeConnectAccountId: Stripe Connect account for paymentsIsVerified: Whether captain is verifiedIsActive: Whether accepting bookings
Relationships:
- Many-to-one: User, Boat
- One-to-many: CharterListing, Booking
Usage Patterns:
// Get verified captains
var captains = context.CharterCaptains
.Where(cc => cc.IsVerified && cc.IsActive)
.Include(cc => cc.User)
.Include(cc => cc.Boat)
.ToList();
CharterListing
Purpose: Specific charter trip listings offered by captains.
Key Fields:
Id(int): Unique identifierCharterCaptainId: Captain offering the tripTitle: Listing titleDescription: Trip descriptionTripType: HalfDay, FullDay, MultiDay, etc.DurationHours: Trip durationMaxAnglers,MinAnglers: Angler limitsPrice: Trip pricePricingModel: PerTrip, PerAngler, PerHourDepartureLocation: Departure locationDepartureLatitude,DepartureLongitude: CoordinatesTargetSpecies: Target fish speciesStartDate,EndDate: Availability datesRecurrencePattern: Daily, Weekly, MonthlyIsActive: Whether listing is active
Relationships:
- Many-to-one: CharterCaptain
- One-to-many: CharterListingImage, CharterPricing, Booking, CharterAvailability
Usage Patterns:
// Create listing
var listing = new CharterListing
{{
CharterCaptainId = captainId,
Title = "Lake Michigan Salmon Trip",
TripType = TripType.FullDay,
DurationHours = 8,
MaxAnglers = 6,
Price = 800.00m,
PricingModel = PricingModel.PerTrip,
IsActive = true
}};
// Get available listings
var listings = context.CharterListings
.Where(cl => cl.IsActive && cl.StartDate <= DateTime.UtcNow && cl.EndDate >= DateTime.UtcNow)
.Include(cl => cl.CharterCaptain)
.Include(cl => cl.Images)
.ToList();
Booking
Purpose: User bookings for charter trips.
Key Fields:
Id(int): Unique identifierCharterListingId: Booked listingUserId: Booking userBookingDate: Trip dateNumberOfAnglers: Number of anglersTotalPrice: Total booking pricePaymentStatus: Pending, Paid, Failed, RefundedStripePaymentIntentId: Stripe payment intentStatus: Pending, Confirmed, Completed, CancelledBookedAt: Booking timestamp
Relationships:
- Many-to-one: CharterListing, User
- One-to-many: BookingParticipant
Usage Patterns:
// Create booking
var booking = new Booking
{{
CharterListingId = listingId,
UserId = userId,
BookingDate = tripDate,
NumberOfAnglers = 4,
TotalPrice = 800.00m,
PaymentStatus = PaymentStatus.Pending,
Status = BookingStatus.Pending,
BookedAt = DateTime.UtcNow
}};
// Get user's bookings
var bookings = context.Bookings
.Where(b => b.UserId == userId)
.Include(b => b.CharterListing)
.ThenInclude(cl => cl.CharterCaptain)
.ToList();
BookingParticipant
Purpose: Individual participants in a charter booking.
Key Fields:
Id(int): Unique identifierBookingId: Associated bookingUserId: Participant user (optional)Name: Participant nameEmail: Participant emailAge: Participant age
Relationships:
- Many-to-one: Booking, User (optional)
CharterAvailability
Purpose: Captain availability calendar.
Key Fields:
Id(int): Unique identifierCharterListingId: Associated listingDate: Available dateStartTime,EndTime: Available time windowIsAvailable: Whether availableNotes: Availability notes
Relationships:
- Many-to-one: CharterListing
CharterPricing
Purpose: Pricing tiers and packages for charter listings.
Key Fields:
Id(int): Unique identifierCharterListingId: Associated listingPricingTier: Standard, Premium, etc.Price: Tier priceDescription: Tier descriptionIncludes: What's included
Relationships:
- Many-to-one: CharterListing
CharterListingImage
Purpose: Images for charter listings.
Key Fields:
Id(int): Unique identifierCharterListingId: Associated listingImageUrl: Image URLIsPrimary: Primary image flagOrder: Display order
Relationships:
- Many-to-one: CharterListing
Related Documentation
- Captain License - Captain licensing system
- Boat System - Boat management
- Stripe Integration - Payment processing