Files
web-cad/docs/openapi.yaml
T

800 lines
17 KiB
YAML
Raw Normal View History

2026-07-26 22:47:50 +02:00
openapi: 3.0.3
info:
title: Web CAD API
description: REST API for the Web-based 2D CAD for Event Seating Plans
version: 1.0.0
license:
name: MIT
servers:
- url: http://localhost:3001
description: Local development
- url: https://web-cad-neu.server.media-on.de
description: Production
components:
securitySchemes:
BearerAuth:
type: http
scheme: bearer
schemas:
Error:
type: object
properties:
error:
type: string
User:
type: object
properties:
id:
type: string
email:
type: string
format: email
name:
type: string
role:
type: string
enum: [admin, planer, betrachter, gast]
created_at:
type: string
format: date-time
Project:
type: object
properties:
id:
type: string
name:
type: string
description:
type: string
owner_id:
type: string
folder_id:
type: string
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
Drawing:
type: object
properties:
id:
type: string
project_id:
type: string
name:
type: string
data_json:
type: string
created_at:
type: string
format: date-time
Layer:
type: object
properties:
id:
type: string
drawing_id:
type: string
name:
type: string
visible:
type: integer
locked:
type: integer
color:
type: string
line_type:
type: string
transparency:
type: number
sort_order:
type: integer
parent_id:
type: string
nullable: true
Element:
type: object
properties:
id:
type: string
drawing_id:
type: string
layer_id:
type: string
type:
type: string
enum: [line, circle, arc, rect, polygon, polyline, text, dimension, block_instance, chair]
x:
type: number
y:
type: number
width:
type: number
height:
type: number
properties_json:
type: string
Block:
type: object
properties:
id:
type: string
drawing_id:
type: string
name:
type: string
category:
type: string
elements_json:
type: string
thumbnail:
type: string
nullable: true
Session:
type: object
properties:
token:
type: string
userId:
type: string
expiresAt:
type: number
AuthResult:
type: object
properties:
user:
$ref: '#/components/schemas/User'
session:
$ref: '#/components/schemas/Session'
security:
- BearerAuth: []
paths:
/api/health:
get:
summary: Health check
security: []
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
status:
type: string
timestamp:
type: string
format: date-time
/api/auth/register:
post:
summary: Register a new user
security: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
format: email
password:
type: string
name:
type: string
role:
type: string
enum: [admin, planer, betrachter, gast]
responses:
'201':
description: User created
content:
application/json:
schema:
$ref: '#/components/schemas/AuthResult'
'400':
description: Missing fields
'409':
description: Email already registered
'429':
description: Rate limit exceeded
/api/auth/login:
post:
summary: Login
security: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
password:
type: string
responses:
'200':
description: Login successful
content:
application/json:
schema:
$ref: '#/components/schemas/AuthResult'
'401':
description: Invalid credentials
'429':
description: Rate limit exceeded
/api/auth/logout:
post:
summary: Logout
responses:
'204':
description: Logged out
/api/auth/me:
get:
summary: Get current user profile
responses:
'200':
description: Current user
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'401':
description: Not authenticated
/api/auth/password:
patch:
summary: Change password
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
oldPassword:
type: string
newPassword:
type: string
responses:
'204':
description: Password changed
'400':
description: Invalid old password
/api/projects:
get:
summary: List projects
parameters:
- name: folderId
in: query
schema:
type: string
description: Filter by folder ID (null for root)
responses:
'200':
description: List of projects
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Project'
post:
summary: Create a project
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description:
type: string
folder_id:
type: string
nullable: true
responses:
'201':
description: Project created
/api/projects/{id}:
get:
summary: Get a project
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Project details
'404':
description: Not found
put:
summary: Update a project
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Updated
delete:
summary: Delete a project
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'204':
description: Deleted
/api/projects/{id}/folder:
put:
summary: Move project to folder
parameters:
- name: id
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
properties:
folder_id:
type: string
nullable: true
responses:
'200':
description: Moved
/api/project-folders:
get:
summary: List project folders
responses:
'200':
description: List of folders
post:
summary: Create a folder
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
parent_id:
type: string
nullable: true
responses:
'201':
description: Folder created
/api/project-folders/{id}:
get:
summary: Get a folder
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Folder details
put:
summary: Rename a folder
parameters:
- name: id
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
responses:
'200':
description: Renamed
delete:
summary: Delete a folder
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'204':
description: Deleted
/api/drawings:
get:
summary: List drawings for a project
parameters:
- name: projectId
in: query
required: true
schema:
type: string
responses:
'200':
description: List of drawings
post:
summary: Create a drawing
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
project_id:
type: string
name:
type: string
responses:
'201':
description: Drawing created
/api/drawings/{id}:
get:
summary: Get a drawing
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Drawing details
put:
summary: Update a drawing
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Updated
delete:
summary: Delete a drawing
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'204':
description: Deleted
/api/drawings/{drawingId}/layers:
get:
summary: List layers for a drawing
parameters:
- name: drawingId
in: path
required: true
schema:
type: string
responses:
'200':
description: List of layers
post:
summary: Create a layer
parameters:
- name: drawingId
in: path
required: true
schema:
type: string
responses:
'201':
description: Layer created
/api/layers/{id}:
patch:
summary: Update a layer
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Updated
delete:
summary: Delete a layer
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'204':
description: Deleted
/api/drawings/{drawingId}/elements:
get:
summary: List elements for a drawing
parameters:
- name: drawingId
in: path
required: true
schema:
type: string
responses:
'200':
description: List of elements
post:
summary: Create an element
parameters:
- name: drawingId
in: path
required: true
schema:
type: string
responses:
'201':
description: Element created
/api/elements/{id}:
put:
summary: Update an element
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Updated
delete:
summary: Delete an element
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'204':
description: Deleted
/api/drawings/{drawingId}/blocks:
get:
summary: List blocks for a drawing
parameters:
- name: drawingId
in: path
required: true
schema:
type: string
responses:
'200':
description: List of blocks
post:
summary: Create a block
parameters:
- name: drawingId
in: path
required: true
schema:
type: string
responses:
'201':
description: Block created
/api/blocks/{id}:
put:
summary: Update a block
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Updated
delete:
summary: Delete a block
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'204':
description: Deleted
/api/settings:
get:
summary: Get all settings
responses:
'200':
description: Settings object
put:
summary: Set a setting value
requestBody:
content:
application/json:
schema:
type: object
properties:
key:
type: string
value:
type: string
responses:
'200':
description: Setting saved
/api/users:
get:
summary: List users (admin only)
responses:
'200':
description: List of users
/api/users/{id}:
put:
summary: Update a user (admin only)
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Updated
delete:
summary: Delete a user (admin only)
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'204':
description: Deleted
/api/ai/chat:
post:
summary: KI Copilot chat proxy
requestBody:
content:
application/json:
schema:
type: object
properties:
messages:
type: array
items:
type: object
properties:
role:
type: string
content:
type: string
responses:
'200':
description: AI response
'401':
description: Not authenticated
/api/notifications:
get:
summary: List notifications
responses:
'200':
description: List of notifications
post:
summary: Create a notification
responses:
'201':
description: Created
/api/notifications/{id}/read:
patch:
summary: Mark notification as read
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Marked as read
/api/projects/{id}/shares:
get:
summary: List shares for a project
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: List of shares
post:
summary: Share a project
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'201':
description: Shared
/api/global-blocks:
get:
summary: List global blocks
responses:
'200':
description: List of global blocks
post:
summary: Create a global block
responses:
'201':
description: Created
/api/global-block-folders:
get:
summary: List global block folders
responses:
'200':
description: List of folders
post:
summary: Create a global block folder
responses:
'201':
description: Created