refactoring(Gateway Health Indicator implementieren)

TODO-Roadmap.md
1.2 Health Check Verbesserungen
This commit is contained in:
stefan
2025-08-14 13:54:06 +02:00
parent d937e82d2b
commit eeda3b7ac2
13 changed files with 1537 additions and 13972 deletions
@@ -61,6 +61,8 @@ servers:
tags:
- name: Authentication
description: User authentication, registration, and profile management
- name: Members
description: Member registration, profile management, and membership administration
- name: Master Data
description: Reference data management (countries, states, age classes, venues)
- name: Horse Registry
@@ -186,6 +188,264 @@ paths:
schema:
$ref: '#/components/schemas/ErrorResponse'
# Members Context
/api/members:
get:
tags:
- Members
summary: Get All Members
description: Returns a list of all members with pagination support
operationId: getAllMembers
security:
- bearerAuth: []
parameters:
- name: activeOnly
in: query
required: false
schema:
type: boolean
default: true
description: Filter to only return active members
- name: limit
in: query
required: false
schema:
type: integer
default: 50
minimum: 1
maximum: 200
description: Maximum number of members to return
- name: offset
in: query
required: false
schema:
type: integer
default: 0
minimum: 0
description: Number of members to skip for pagination
- name: search
in: query
required: false
schema:
type: string
description: Search term for member name or email
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/MembersResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
post:
tags:
- Members
summary: Create Member
description: Creates a new member registration
operationId: createMember
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateMemberRequest'
responses:
'201':
description: Member successfully created
content:
application/json:
schema:
$ref: '#/components/schemas/MemberResponse'
'400':
description: Invalid member data
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/members/{id}:
get:
tags:
- Members
summary: Get Member by ID
description: Returns a member by their unique ID
operationId: getMemberById
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
description: Unique identifier of the member
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/MemberResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Member not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
put:
tags:
- Members
summary: Update Member
description: Updates an existing member's information
operationId: updateMember
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
description: Unique identifier of the member
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateMemberRequest'
responses:
'200':
description: Member successfully updated
content:
application/json:
schema:
$ref: '#/components/schemas/MemberResponse'
'400':
description: Invalid member data
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Member not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
delete:
tags:
- Members
summary: Delete Member
description: Soft deletes a member (marks as inactive)
operationId: deleteMember
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
description: Unique identifier of the member
responses:
'204':
description: Member successfully deleted
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Member not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/members/search:
get:
tags:
- Members
summary: Search Members
description: Search members by various criteria
operationId: searchMembers
security:
- bearerAuth: []
parameters:
- name: query
in: query
required: true
schema:
type: string
minLength: 2
description: Search query for member name, email, or membership number
- name: membershipType
in: query
required: false
schema:
type: string
enum: [FULL, YOUTH, HONORARY, ASSOCIATE]
description: Filter by membership type
- name: status
in: query
required: false
schema:
type: string
enum: [ACTIVE, INACTIVE, SUSPENDED]
default: ACTIVE
description: Filter by member status
responses:
'200':
description: Successful search operation
content:
application/json:
schema:
$ref: '#/components/schemas/MembersResponse'
'400':
description: Invalid search parameters
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
# Master Data Context
/api/masterdata/countries:
get:
@@ -1186,6 +1446,218 @@ components:
data:
$ref: '#/components/schemas/User'
# Members Models
MembersResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
data:
type: object
properties:
members:
type: array
items:
$ref: '#/components/schemas/Member'
totalCount:
type: integer
description: Total number of members matching the criteria
example: 150
pagination:
type: object
properties:
limit:
type: integer
example: 50
offset:
type: integer
example: 0
hasNext:
type: boolean
example: true
MemberResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
data:
$ref: '#/components/schemas/Member'
CreateMemberRequest:
type: object
required:
- firstName
- lastName
- email
- membershipType
properties:
firstName:
type: string
minLength: 1
maxLength: 100
example: Maria
lastName:
type: string
minLength: 1
maxLength: 100
example: Müller
email:
type: string
format: email
example: maria.mueller@example.com
phone:
type: string
pattern: '^\+?[1-9]\d{1,14}$'
example: +43 123 456789
dateOfBirth:
type: string
format: date
example: 1985-03-15
address:
$ref: '#/components/schemas/Address'
membershipType:
type: string
enum: [FULL, YOUTH, HONORARY, ASSOCIATE]
example: FULL
emergencyContact:
$ref: '#/components/schemas/EmergencyContact'
UpdateMemberRequest:
type: object
properties:
firstName:
type: string
minLength: 1
maxLength: 100
example: Maria
lastName:
type: string
minLength: 1
maxLength: 100
example: Müller-Schmidt
email:
type: string
format: email
example: maria.mueller-schmidt@example.com
phone:
type: string
pattern: '^\+?[1-9]\d{1,14}$'
example: +43 123 456789
address:
$ref: '#/components/schemas/Address'
membershipType:
type: string
enum: [FULL, YOUTH, HONORARY, ASSOCIATE]
example: FULL
status:
type: string
enum: [ACTIVE, INACTIVE, SUSPENDED]
example: ACTIVE
emergencyContact:
$ref: '#/components/schemas/EmergencyContact'
Member:
type: object
properties:
id:
type: string
format: uuid
example: 123e4567-e89b-12d3-a456-426614174000
membershipNumber:
type: string
example: M2024001234
firstName:
type: string
example: Maria
lastName:
type: string
example: Müller
email:
type: string
format: email
example: maria.mueller@example.com
phone:
type: string
example: +43 123 456789
dateOfBirth:
type: string
format: date
example: 1985-03-15
address:
$ref: '#/components/schemas/Address'
membershipType:
type: string
enum: [FULL, YOUTH, HONORARY, ASSOCIATE]
example: FULL
status:
type: string
enum: [ACTIVE, INACTIVE, SUSPENDED]
example: ACTIVE
joinDate:
type: string
format: date
example: 2024-01-15
lastPaymentDate:
type: string
format: date
example: 2024-01-01
emergencyContact:
$ref: '#/components/schemas/EmergencyContact'
createdAt:
type: string
format: date-time
example: 2024-01-15T10:30:00Z
updatedAt:
type: string
format: date-time
example: 2024-01-15T10:30:00Z
Address:
type: object
required:
- street
- city
- postalCode
- country
properties:
street:
type: string
example: Hauptstraße 123
city:
type: string
example: Wien
postalCode:
type: string
example: 1010
state:
type: string
example: Wien
country:
type: string
example: Austria
EmergencyContact:
type: object
required:
- name
- relationship
- phone
properties:
name:
type: string
example: Johann Müller
relationship:
type: string
example: Ehepartner
phone:
type: string
example: +43 123 456788
email:
type: string
format: email
example: johann.mueller@example.com
User:
type: object
properties: