# Construct OpenAPI YAML as a string for UserService and GameService
openapi_yaml = """
openapi: 3.0.0
info:
title: Match Made API
version: 1.0.0
paths:
/users:
post:
summary: Create a new user
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/User'
responses:
'201':
description: User created
get:
summary: Search for players
parameters:
- in: query
name: skillTags
schema: { type: string }
- in: query
name: radius
schema: { type: number }
- in: query
name: lat
schema: { type: number }
- in: query
name: lng
schema: { type: number }
responses:
'200':
description: List of users
/users/{id}:
get:
summary: Fetch user by ID
parameters:
- in: path
name: id
required: true
schema: { type: string }
responses:
'200':
description: User data
put:
summary: Update user
parameters:
- in: path
name: id
required: true
schema: { type: string }
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/User'
responses:
'200':
description: User updated
/games:
post:
summary: Organizer creates a new game
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Game'
responses:
'201':
description: Game created
get:
summary: List all games
responses:
'200':
description: List of games
/games/{id}:
get:
summary: Fetch game details
parameters:
- in: path
name: id
required: true
schema: { type: string }
responses:
'200':
description: Game details
patch:
summary: Organizer updates a game
parameters:
- in: path
name: id
required: true
schema: { type: string }
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Game'
responses:
'200':
description: Game updated
delete:
summary: Organizer cancels a game
parameters:
- in: path
name: id
required: true
schema: { type: string }
responses:
'204':
description: Game deleted
/games/{id}/invite:
post:
summary: Organizer invites a player
parameters:
- in: path
name: id
required: true
schema: { type: string }
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
userId:
type: string
responses:
'200':
description: Invitation sent
/games/{id}/join:
post:
summary: Player joins a game
parameters:
- in: path
name: id
required: true
schema: { type: string }
responses:
'200':
description: Joined game
/games/{id}/respond:
post:
summary: Player responds to invitation
parameters:
- in: path
name: id
required: true
schema: { type: string }
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
status:
type: string
enum: [confirmed, declined]
responses:
'200':
description: Response recorded
components:
schemas:
User:
type: object
properties:
id: { type: string }
name: { type: string }
email: { type: string }
phone: { type: string }
photoUrl: { type: string }
capabilities:
type: object
properties:
isPlayer: { type: boolean }
isOrganizer: { type: boolean }
skillTags:
type: array
items: { type: string }
location:
type: object
properties:
lat: { type: number }
lng: { type: number }
reliabilityScore: { type: number }
verified: { type: boolean }
Game:
type: object
properties:
id: { type: string }
organizerId: { type: string }
dateTime: { type: string, format: date-time }
location:
type: object
properties:
lat: { type: number }
lng: { type: number }
address: { type: string }
description: { type: string }
skillLevel: { type: string }
maxPlayers: { type: integer }
status:
type: string
enum: [open, full, cancelled]
"""
# Save to file
yaml_path = "/mnt/data/MatchMade_User_Game_API.yaml"
with open(yaml_path, "w") as f:
f.write(openapi_yaml)
yaml_path