Facility Resources
Facility resources represent physical assets at a golf club that can be booked, maintained, and tracked.
Resource Types
| Type | Description |
|---|---|
GOLF_COURSE | Main golf course (9 or 18 holes) |
DRIVING_RANGE | Practice driving range |
SIMULATOR | Indoor golf simulator bay |
GOLF_CART | Golf cart from the fleet |
TENNIS_COURT | Tennis court |
PADEL_COURT | Padel court |
SWIMMING_POOL | Swimming pool with lanes |
GYM | Fitness center or gym |
FUNCTION_ROOM | Conference room, ballroom, or event space |
SQUASH_COURT | Squash court (singles or doubles) |
OTHER | Custom facility type |
Extended Resource Details
For certain resource types, additional metadata is stored in detail tables:
Swimming Pool Details
| Field | Type | Description |
|---|---|---|
laneCount | number | Number of lanes |
lengthMeters | number | Pool length in meters |
depthMinMeters | number | Minimum depth |
depthMaxMeters | number | Maximum depth |
temperatureCelsius | number | Water temperature |
lifeguardRequired | boolean | Whether lifeguard is required |
maxCapacity | number | Maximum swimmers |
heated | boolean | Whether pool is heated |
features | string[] | Features (timing_system, starting_blocks, etc.) |
Gym Details
| Field | Type | Description |
|---|---|---|
squareMeters | number | Floor area |
maxCapacity | number | Maximum occupancy |
zones | string[] | Zones (cardio, weights, stretching, etc.) |
equipment | string[] | Available equipment |
hasLockers | boolean | Whether lockers are available |
hasShowers | boolean | Whether showers are available |
Function Room Details
| Field | Type | Description |
|---|---|---|
maxCapacity | number | Maximum guest capacity |
minCapacity | number | Minimum recommended capacity |
squareMeters | number | Floor area |
layoutOptions | string[] | Available layouts (theater, classroom, banquet, etc.) |
hasAV | boolean | Whether AV equipment is available |
hasCatering | boolean | Whether catering is available |
floorLevel | number | Floor level |
Squash Court Details
| Field | Type | Description |
|---|---|---|
courtNumber | number | Court number |
courtType | CourtType | SINGLES or DOUBLES |
hasGlassWall | boolean | Whether court has a glass wall |
hasAirCon | boolean | Whether court has air conditioning |
Resource Properties
| Field | Type | Description |
|---|---|---|
id | number | Unique identifier |
tenantId | number | Owning tenant |
clubId | number | Owning club |
name | string | Display name |
type | ResourceType | Category |
description | string? | Optional description |
capacity | number? | Optional capacity |
active | boolean | Active status (soft delete) |
maintenanceRequired | boolean | Maintenance flag |
createdAt | DateTime | Creation timestamp |
updatedAt | DateTime | Last update timestamp |
REST API
List Resources
GET /facility-resources?tenantId=1&clubId=10&type=SIMULATOR&take=25
Query Parameters:
tenantId(required) - Tenant scopeclubId(optional) - Club scopetype(optional) - Filter by resource typesearch(optional) - Case-insensitive name searchskip(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.