Skip to main content

Facility Resources

Facility resources represent physical assets at a golf club that can be booked, maintained, and tracked.

Resource Types

TypeDescription
GOLF_COURSEMain golf course (9 or 18 holes)
DRIVING_RANGEPractice driving range
SIMULATORIndoor golf simulator bay
GOLF_CARTGolf cart from the fleet
TENNIS_COURTTennis court
PADEL_COURTPadel court
SWIMMING_POOLSwimming pool with lanes
GYMFitness center or gym
FUNCTION_ROOMConference room, ballroom, or event space
SQUASH_COURTSquash court (singles or doubles)
OTHERCustom facility type

Extended Resource Details

For certain resource types, additional metadata is stored in detail tables:

Swimming Pool Details

FieldTypeDescription
laneCountnumberNumber of lanes
lengthMetersnumberPool length in meters
depthMinMetersnumberMinimum depth
depthMaxMetersnumberMaximum depth
temperatureCelsiusnumberWater temperature
lifeguardRequiredbooleanWhether lifeguard is required
maxCapacitynumberMaximum swimmers
heatedbooleanWhether pool is heated
featuresstring[]Features (timing_system, starting_blocks, etc.)

Gym Details

FieldTypeDescription
squareMetersnumberFloor area
maxCapacitynumberMaximum occupancy
zonesstring[]Zones (cardio, weights, stretching, etc.)
equipmentstring[]Available equipment
hasLockersbooleanWhether lockers are available
hasShowersbooleanWhether showers are available

Function Room Details

FieldTypeDescription
maxCapacitynumberMaximum guest capacity
minCapacitynumberMinimum recommended capacity
squareMetersnumberFloor area
layoutOptionsstring[]Available layouts (theater, classroom, banquet, etc.)
hasAVbooleanWhether AV equipment is available
hasCateringbooleanWhether catering is available
floorLevelnumberFloor level

Squash Court Details

FieldTypeDescription
courtNumbernumberCourt number
courtTypeCourtTypeSINGLES or DOUBLES
hasGlassWallbooleanWhether court has a glass wall
hasAirConbooleanWhether court has air conditioning

Resource Properties

FieldTypeDescription
idnumberUnique identifier
tenantIdnumberOwning tenant
clubIdnumberOwning club
namestringDisplay name
typeResourceTypeCategory
descriptionstring?Optional description
capacitynumber?Optional capacity
activebooleanActive status (soft delete)
maintenanceRequiredbooleanMaintenance flag
createdAtDateTimeCreation timestamp
updatedAtDateTimeLast update timestamp

REST API

List Resources

GET /facility-resources?tenantId=1&clubId=10&type=SIMULATOR&take=25

Query Parameters:

  • tenantId (required) - Tenant scope
  • clubId (optional) - Club scope
  • type (optional) - Filter by resource type
  • search (optional) - Case-insensitive name search
  • skip (optional) - Pagination offset (default: 0)
  • take (optional) - Pagination limit (default: 25, max: 100)
  • includeInactive (optional) - Include soft-deleted resources

Get Single Resource

GET /facility-resources/42?tenantId=1&clubId=10

Create Resource

POST /facility-resources
Content-Type: application/json

{
"tenantId": 1,
"clubId": 10,
"name": "Simulator Bay 3",
"type": "SIMULATOR",
"description": "TrackMan simulator",
"capacity": 4
}

Update Resource

PUT /facility-resources/42?tenantId=1&clubId=10
Content-Type: application/json

{
"name": "Simulator Bay 3 - Premium",
"maintenanceRequired": true
}

Soft Delete Resource

DELETE /facility-resources/42?tenantId=1&clubId=10

Sets active=false. The resource can still be retrieved with includeInactive=true.

GraphQL API

Query Resources

query FacilityResources {
facilityResources(filters: {
tenantId: 1
clubId: 10
type: SIMULATOR
skip: 0
take: 25
}) {
id
name
type
active
maintenanceRequired
capacity
}
}

Get Single Resource

query FacilityResource {
facilityResource(id: 42, tenantId: 1, clubId: 10) {
id
name
type
description
active
}
}

Create Resource

mutation CreateFacilityResource {
createFacilityResource(data: {
tenantId: 1
clubId: 10
name: "Simulator Bay 3"
type: SIMULATOR
capacity: 4
}) {
id
name
}
}

Update Resource

mutation UpdateFacilityResource {
updateFacilityResource(
id: 42
tenantId: 1
clubId: 10
data: { maintenanceRequired: true }
) {
id
maintenanceRequired
}
}

Delete Resource

mutation DeleteFacilityResource {
deleteFacilityResource(id: 42, tenantId: 1, clubId: 10) {
id
active
}
}

Maintenance Flag

Resources can be flagged for maintenance:

PUT /facility-resources/42?tenantId=1
{ "maintenanceRequired": true }

This flag is informational and does not affect availability queries. Use Maintenance Logs to track actual maintenance windows.