Skip to main content

Location

Entities Definition

This file defines the location structure within the Roll Claw domain model.

Implementation

Location Definition

File: domain/entities/location.pseudo

// Location Entity

class Location {
// Identity
string id
string name

// Properties
FacilityArea area
FacilityFloor floor
LocationType type
string description
boolean isRestrictedAccess
boolean isWeatherProtected
boolean hasSecurityConcerns
List<Equipment> permanentEquipment
Map<TimeOfDay, List<Cat>> frequentVisitors // time of day -> cats typically seen
List<Cat> permanentResidents
Set<string> nicknames // special names for locations like "Beach Club"

// Methods
function getAssociatedEquipment()
function getFrequentCats()
function isAccessibleTo(Cat cat)
function getAdjacentLocations()
function recordCatPresence(Cat cat, Date date, Time time)
function hasEquipmentType(string equipmentType)
function getSightingFrequency(Cat cat)
function getMostCommonVisitors()
function getVisitorCountByTimeOfDay(TimeOfDay timeOfDay)
function addNickname(string nickname)
function isPopulatedAt(TimeOfDay timeOfDay)
function isOutdoors()
function isIndoors()
function getWeatherExposure()
function getSafetyAssessment()
function isTerritory(SocialGroup group)
function getGroupOccupancy(Date date)
function recordSecurityIssue(string issue, Date date)
function getLastActivity()
}

class LocationAccessRecord {
// Properties
Location location
Cat cat
Date date
Time time
boolean wasAuthorized
string reason
Person reportedBy

// Methods
function wasDuringAllowedHours()
function getDuration() // if also has exit time
}

class LocationEvent {
// Properties
Location location
Date date
Time time
string eventType // "maintenance", "security", "cat activity", etc.
string description
Person reportedBy

// Methods
function requiresFollowUp()
function getImpactSeverity()
}

enum TimeOfDay {
EARLY_MORNING, // 5am-8am
MORNING, // 8am-12pm
AFTERNOON, // 12pm-5pm
EVENING, // 5pm-9pm
NIGHT, // 9pm-12am
LATE_NIGHT // 12am-5am
}

class LocationGroup {
// Identity
string id
string name

// Properties
List<Location> locations
string purpose // "feeding area", "resting area", "entry/exit", etc.

// Methods
function addLocation(Location location)
function removeLocation(Location location)
function getFrequentVisitors()
function getOptimalPatrolRoute()
}

class TerritoryDispute {
// Properties
Location location
List<Cat> contestants
Date firstObserved
Date lastObserved
string severityLevel
string resolutionStatus

// Methods
function recordIncident(Date date, string details)
function resolveDispute(string resolution, Date date)
function getActiveDuration()
function impactsCatWelfare()
}
  • See the Domain Model Overview for more information on how this component fits into the overall domain model.