recreate project
This commit is contained in:
@@ -0,0 +1,839 @@
|
||||
openapi: 3.0.3
|
||||
info:
|
||||
title: Parent API - Al Rahma Sunday School
|
||||
version: 1.1.0
|
||||
description: >
|
||||
REST API for parent-related functionality in the Al Rahma Sunday School system.
|
||||
All endpoints require JWT authentication using a Bearer token, unless otherwise noted.
|
||||
Each response follows the standard format:
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "success|error",
|
||||
"message": "string",
|
||||
"data": {}
|
||||
}
|
||||
```
|
||||
|
||||
servers:
|
||||
- url: https://alrahmaisgl.org/api/v1
|
||||
|
||||
security:
|
||||
- BearerAuth: []
|
||||
|
||||
tags:
|
||||
- name: Parents
|
||||
description: Manage parent profiles and accounts
|
||||
- name: Students
|
||||
description: Access and manage parent’s student data
|
||||
- name: Attendance
|
||||
description: View attendance history for a parent's children
|
||||
- name: Enrollment
|
||||
description: Manage enrollments and student registration
|
||||
- name: Payments
|
||||
description: Retrieve invoices and payment details
|
||||
- name: Events
|
||||
description: Manage student participation in school events
|
||||
|
||||
paths:
|
||||
/parents:
|
||||
get:
|
||||
tags: [Parents]
|
||||
summary: List all parents (admin use)
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: page
|
||||
in: query
|
||||
schema: { type: integer, example: 1 }
|
||||
- name: per_page
|
||||
in: query
|
||||
schema: { type: integer, example: 20 }
|
||||
responses:
|
||||
200:
|
||||
description: Paginated list of parents
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/PaginatedParentsResponse'
|
||||
401:
|
||||
description: Unauthorized
|
||||
|
||||
/parents/{id}:
|
||||
get:
|
||||
tags: [Parents]
|
||||
summary: Get parent details by ID
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
responses:
|
||||
200:
|
||||
description: Parent details
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Parent'
|
||||
404:
|
||||
description: Parent not found
|
||||
401:
|
||||
description: Unauthorized
|
||||
|
||||
/parents/{id}/profile:
|
||||
get:
|
||||
tags: [Parents]
|
||||
summary: Get parent profile
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
responses:
|
||||
200:
|
||||
description: Parent profile details
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Parent'
|
||||
put:
|
||||
tags: [Parents]
|
||||
summary: Update parent profile
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ParentUpdateRequest'
|
||||
responses:
|
||||
200:
|
||||
description: Profile updated successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/BasicSuccess'
|
||||
|
||||
/parents/{id}/students:
|
||||
get:
|
||||
tags: [Students]
|
||||
summary: Get all students for a parent
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
responses:
|
||||
200:
|
||||
description: Student list with details
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/StudentsResponse'
|
||||
post:
|
||||
tags: [Students]
|
||||
summary: Register a new student for this parent
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/CreateStudentRequest'
|
||||
responses:
|
||||
200:
|
||||
description: Student created
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/BasicSuccess'
|
||||
|
||||
/parents/{id}/students/{studentId}:
|
||||
put:
|
||||
tags: [Students]
|
||||
summary: Update a student's info
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
- name: studentId
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/UpdateStudentRequest'
|
||||
responses:
|
||||
200:
|
||||
description: Student updated
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/BasicSuccess'
|
||||
delete:
|
||||
tags: [Students]
|
||||
summary: Delete a student
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
- name: studentId
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
responses:
|
||||
200:
|
||||
description: Student deleted
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/BasicSuccess'
|
||||
|
||||
/parents/{id}/attendance:
|
||||
get:
|
||||
tags: [Attendance]
|
||||
summary: Get student attendance records
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
- name: school_year
|
||||
in: query
|
||||
schema: { type: string, example: "2024-2025" }
|
||||
responses:
|
||||
200:
|
||||
description: Attendance records retrieved
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/AttendanceList'
|
||||
examples:
|
||||
sample:
|
||||
value:
|
||||
status: success
|
||||
message: Attendance data retrieved successfully
|
||||
data:
|
||||
- firstname: Ali
|
||||
lastname: Ahmad
|
||||
date: "2024-10-06"
|
||||
status: present
|
||||
reason: null
|
||||
- firstname: Aisha
|
||||
lastname: Ahmad
|
||||
date: "2024-10-13"
|
||||
status: absent
|
||||
reason: Sick
|
||||
|
||||
/parents/{id}/payments:
|
||||
get:
|
||||
tags: [Payments]
|
||||
summary: Retrieve invoices/payments for parent
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
responses:
|
||||
200:
|
||||
description: Payment history
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/InvoiceList'
|
||||
examples:
|
||||
sample:
|
||||
value:
|
||||
status: success
|
||||
message: Payments retrieved successfully
|
||||
data:
|
||||
- id: 101
|
||||
invoice_number: INV-2025-0001
|
||||
parent_id: 55
|
||||
amount: 550
|
||||
status: unpaid
|
||||
created_at: "2025-08-20 12:00:00"
|
||||
|
||||
/parents/{id}/enrollments:
|
||||
get:
|
||||
tags: [Enrollment]
|
||||
summary: Get enrollment data for parent’s students
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
- name: school_year
|
||||
in: query
|
||||
schema: { type: string, example: "2024-2025" }
|
||||
responses:
|
||||
200:
|
||||
description: Enrollment info
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/EnrollmentResponse'
|
||||
|
||||
/parents/{id}/enroll-classes:
|
||||
get:
|
||||
tags: [Enrollment]
|
||||
summary: Get data for the enroll classes page
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
- name: school_year
|
||||
in: query
|
||||
schema: { type: string, example: "2024-2025" }
|
||||
responses:
|
||||
200:
|
||||
description: Enroll classes data
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ParentEnrollClassesData'
|
||||
post:
|
||||
tags: [Enrollment]
|
||||
summary: Update enrollments (enroll/withdraw)
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/UpdateParentEnrollmentsRequest'
|
||||
responses:
|
||||
200:
|
||||
description: Enrollment updates processed
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/UpdateParentEnrollmentsResponse'
|
||||
|
||||
/parents/{id}/emergency-contacts:
|
||||
get:
|
||||
tags: [Parents]
|
||||
summary: List emergency contacts for parent
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
responses:
|
||||
200:
|
||||
description: Emergency contacts
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/EmergencyContactsList'
|
||||
post:
|
||||
tags: [Parents]
|
||||
summary: Create or update an emergency contact
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/SaveEmergencyContactRequest'
|
||||
responses:
|
||||
200:
|
||||
description: Saved
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/BasicSuccess'
|
||||
|
||||
/parents/{id}/authorized-users:
|
||||
get:
|
||||
tags: [Parents]
|
||||
summary: List authorized users (second parents/guardians)
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
responses:
|
||||
200:
|
||||
description: Authorized users
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/AuthorizedUsersList'
|
||||
post:
|
||||
tags: [Parents]
|
||||
summary: Add an authorized user (pending)
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/AddAuthorizedUserRequest'
|
||||
responses:
|
||||
200:
|
||||
description: Created
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/BasicSuccess'
|
||||
|
||||
/parents/{id}/enroll:
|
||||
post:
|
||||
tags: [Enrollment]
|
||||
summary: Enroll one or more students
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
student_ids:
|
||||
type: array
|
||||
items: { type: integer }
|
||||
example: [5, 6]
|
||||
responses:
|
||||
200:
|
||||
description: Enrollment submitted successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/BasicSuccess'
|
||||
|
||||
/parents/{id}/events:
|
||||
get:
|
||||
tags: [Events]
|
||||
summary: Get events and participation data
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
responses:
|
||||
200:
|
||||
description: Events and participation data
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/EventParticipationResponse'
|
||||
examples:
|
||||
sample:
|
||||
value:
|
||||
status: success
|
||||
message: Event participation data retrieved
|
||||
data:
|
||||
events:
|
||||
- id: 1
|
||||
name: Field Trip
|
||||
amount: 25
|
||||
start_date: "2025-10-20"
|
||||
end_date: "2025-10-20"
|
||||
charges:
|
||||
"12:1":
|
||||
student_id: 12
|
||||
event_id: 1
|
||||
participation: yes
|
||||
charged: 25
|
||||
date: "2025-09-30 10:00:00"
|
||||
|
||||
/parents/{id}/events/update:
|
||||
post:
|
||||
tags: [Events]
|
||||
summary: Update student event participation
|
||||
security:
|
||||
- BearerAuth: []
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: integer }
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
participation:
|
||||
type: object
|
||||
example:
|
||||
"3:1": "yes"
|
||||
"3:2": "no"
|
||||
responses:
|
||||
200:
|
||||
description: Participation updated successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/BasicSuccess'
|
||||
|
||||
components:
|
||||
securitySchemes:
|
||||
BearerAuth:
|
||||
type: http
|
||||
scheme: bearer
|
||||
bearerFormat: JWT
|
||||
description: >
|
||||
Enter your JSON Web Token here.
|
||||
Example:
|
||||
```
|
||||
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6...
|
||||
```
|
||||
|
||||
schemas:
|
||||
BasicSuccess:
|
||||
type: object
|
||||
properties:
|
||||
status: { type: string, example: "success" }
|
||||
message: { type: string, example: "Operation completed successfully" }
|
||||
data: { nullable: true }
|
||||
|
||||
Parent:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: integer }
|
||||
firstname: { type: string }
|
||||
lastname: { type: string }
|
||||
email: { type: string, format: email }
|
||||
cellphone: { type: string }
|
||||
address_street: { type: string }
|
||||
city: { type: string }
|
||||
state: { type: string }
|
||||
zip: { type: string }
|
||||
|
||||
ParentUpdateRequest:
|
||||
type: object
|
||||
properties:
|
||||
firstname: { type: string }
|
||||
lastname: { type: string }
|
||||
cellphone: { type: string }
|
||||
address_street: { type: string }
|
||||
city: { type: string }
|
||||
state: { type: string }
|
||||
zip: { type: string }
|
||||
|
||||
PaginatedParentsResponse:
|
||||
type: object
|
||||
properties:
|
||||
status: { type: string, example: "success" }
|
||||
message: { type: string }
|
||||
data:
|
||||
type: object
|
||||
properties:
|
||||
page: { type: integer }
|
||||
per_page: { type: integer }
|
||||
total: { type: integer }
|
||||
data:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/Parent'
|
||||
|
||||
StudentsResponse:
|
||||
type: object
|
||||
properties:
|
||||
status: { type: string }
|
||||
message: { type: string }
|
||||
data:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: integer }
|
||||
firstname: { type: string }
|
||||
lastname: { type: string }
|
||||
gender: { type: string }
|
||||
dob: { type: string }
|
||||
current_class:
|
||||
type: object
|
||||
properties:
|
||||
class_name: { type: string }
|
||||
section_name: { type: string }
|
||||
medical_conditions:
|
||||
type: array
|
||||
items: { type: string }
|
||||
allergies:
|
||||
type: array
|
||||
items: { type: string }
|
||||
|
||||
AttendanceList:
|
||||
type: object
|
||||
properties:
|
||||
status: { type: string }
|
||||
message: { type: string }
|
||||
data:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
firstname: { type: string }
|
||||
lastname: { type: string }
|
||||
date: { type: string, format: date }
|
||||
status: { type: string, enum: [present, absent, late] }
|
||||
reason: { type: string, nullable: true }
|
||||
|
||||
InvoiceList:
|
||||
type: object
|
||||
properties:
|
||||
status: { type: string }
|
||||
message: { type: string }
|
||||
data:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: integer }
|
||||
invoice_number: { type: string }
|
||||
parent_id: { type: integer }
|
||||
amount: { type: number }
|
||||
status: { type: string }
|
||||
created_at: { type: string }
|
||||
|
||||
EnrollmentResponse:
|
||||
type: object
|
||||
properties:
|
||||
status: { type: string }
|
||||
message: { type: string }
|
||||
data:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: integer }
|
||||
firstname: { type: string }
|
||||
lastname: { type: string }
|
||||
enrollment:
|
||||
type: object
|
||||
properties:
|
||||
enrollment_status: { type: string }
|
||||
admission_status: { type: string, nullable: true }
|
||||
|
||||
EventParticipationResponse:
|
||||
type: object
|
||||
properties:
|
||||
status: { type: string }
|
||||
message: { type: string }
|
||||
data:
|
||||
type: object
|
||||
properties:
|
||||
events:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: integer }
|
||||
name: { type: string }
|
||||
amount: { type: number }
|
||||
start_date: { type: string }
|
||||
end_date: { type: string }
|
||||
charges:
|
||||
type: object
|
||||
additionalProperties:
|
||||
type: object
|
||||
properties:
|
||||
student_id: { type: integer }
|
||||
event_id: { type: integer }
|
||||
participation: { type: string, enum: [yes, no] }
|
||||
charged: { type: number }
|
||||
date: { type: string, format: date-time }
|
||||
|
||||
CreateStudentRequest:
|
||||
type: object
|
||||
properties:
|
||||
firstname: { type: string }
|
||||
lastname: { type: string }
|
||||
dob: { type: string, format: date }
|
||||
age: { type: integer }
|
||||
gender: { type: string }
|
||||
registration_grade: { type: string }
|
||||
photo_consent: { type: integer, enum: [0,1] }
|
||||
rfid_tag: { type: string }
|
||||
is_new: { type: integer, enum: [0,1], default: 1 }
|
||||
|
||||
UpdateStudentRequest:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/CreateStudentRequest'
|
||||
|
||||
EmergencyContactsList:
|
||||
type: object
|
||||
properties:
|
||||
status: { type: string }
|
||||
message: { type: string }
|
||||
data:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: integer }
|
||||
parent_id: { type: integer }
|
||||
emergency_contact_name: { type: string }
|
||||
cellphone: { type: string }
|
||||
email: { type: string }
|
||||
relation: { type: string }
|
||||
|
||||
SaveEmergencyContactRequest:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: integer, nullable: true }
|
||||
emergency_contact_name: { type: string }
|
||||
cellphone: { type: string }
|
||||
email: { type: string, nullable: true }
|
||||
relation: { type: string, nullable: true }
|
||||
|
||||
AuthorizedUsersList:
|
||||
type: object
|
||||
properties:
|
||||
status: { type: string }
|
||||
message: { type: string }
|
||||
data:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: integer }
|
||||
user_id: { type: integer }
|
||||
firstname: { type: string }
|
||||
lastname: { type: string }
|
||||
email: { type: string }
|
||||
phone_number: { type: string }
|
||||
relation_to_user: { type: string }
|
||||
status: { type: string }
|
||||
|
||||
AddAuthorizedUserRequest:
|
||||
type: object
|
||||
required: [firstname, lastname, email, phone_number]
|
||||
properties:
|
||||
firstname: { type: string }
|
||||
lastname: { type: string }
|
||||
email: { type: string }
|
||||
phone_number: { type: string }
|
||||
relation_to_user: { type: string }
|
||||
|
||||
ParentEnrollClassesData:
|
||||
type: object
|
||||
properties:
|
||||
status: { type: string }
|
||||
message: { type: string }
|
||||
data:
|
||||
type: object
|
||||
properties:
|
||||
students:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: integer }
|
||||
firstname: { type: string }
|
||||
lastname: { type: string }
|
||||
class_section: { type: string }
|
||||
admission_status: { type: string, nullable: true }
|
||||
enrollment_status: { type: string }
|
||||
disable_enroll: { type: boolean }
|
||||
schoolYears:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
school_year: { type: string }
|
||||
selectedYear: { type: string }
|
||||
isEditable: { type: boolean }
|
||||
withdrawalDeadline: { type: string, format: date }
|
||||
lastDayOfRegistration: { type: string, format: date }
|
||||
schoolStartDate: { type: string, format: date }
|
||||
|
||||
UpdateParentEnrollmentsRequest:
|
||||
type: object
|
||||
properties:
|
||||
enroll:
|
||||
type: array
|
||||
items: { type: integer }
|
||||
example: [101, 102]
|
||||
withdraw:
|
||||
type: array
|
||||
items: { type: integer }
|
||||
example: [103]
|
||||
|
||||
UpdateParentEnrollmentsResponse:
|
||||
type: object
|
||||
properties:
|
||||
status: { type: string }
|
||||
message: { type: string }
|
||||
data:
|
||||
type: object
|
||||
properties:
|
||||
enrolled:
|
||||
type: array
|
||||
items: { type: integer }
|
||||
withdrawn:
|
||||
type: array
|
||||
items: { type: integer }
|
||||
messages:
|
||||
type: array
|
||||
items: { type: string }
|
||||
Reference in New Issue
Block a user