@lumina-study/courses-sdk
Version:
Type-safe TypeScript SDK for the Courses Platform API, auto-generated from OpenAPI specification
1,599 lines (1,595 loc) • 66.7 kB
TypeScript
import { Client } from 'openapi-fetch';
/**
* SDK configuration interface
*/
interface SDKConfig {
/**
* Base URL for the API (e.g., "https://api.example.com")
*/
baseUrl: string;
/**
* Optional callback to retrieve authentication token.
* Called on every request to get fresh token.
* Can return string (token), null (no auth), or Promise for async retrieval.
*/
getToken?: () => string | null | Promise<string | null>;
/**
* Optional custom fetch implementation for testing
*/
fetch?: typeof fetch;
}
/**
* This file was auto-generated by openapi-typescript.
* Do not make direct changes to the file.
*/
interface paths {
"/api/courses": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Get all published courses
* @description Retrieve all published courses. This is a public endpoint that does not require authentication.
*
* **Behavior:**
* - Returns only courses with at least one published version
* - Each course includes its latest published version in the `latestVersion` field
* - Unpublished drafts are excluded from results
* - Owned by any user (ownerId is visible in response)
*
* **Use Cases:**
* - Display course catalog to unauthenticated visitors
* - Browse available courses before signing up
* - Public course discovery and search
*
* **Example Response:**
* ```json
* [
* {
* "id": "course-uuid-123",
* "ownerId": "user-uuid-456",
* "categories": ["Computer Science"],
* "tags": ["beginner"],
* "createdAt": "2025-01-30T10:00:00Z",
* "updatedAt": "2025-01-30T10:00:00Z",
* "latestVersion": {
* "id": "version-uuid-789",
* "versionNumber": 1,
* "data": {
* "name": "Introduction to CS",
* "institution": "MIT"
* },
* "isPublished": true,
* "publishedAt": "2025-01-30T10:00:00Z"
* }
* }
* ]
* ```
*/
get: operations["CoursesController_findAll"];
put?: never;
/**
* Create course (admin only - legacy endpoint)
* @description Admin-only endpoint for direct course creation. Regular users should use POST /courses/publish instead.
*/
post: operations["CoursesController_create"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/courses/publish": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* Publish a new course from local draft
* @description Publish a course created locally in the browser. This is the recommended method for course creation.
*
* **Local-First Workflow:**
* - Users create and edit courses in their browser (IndexedDB) without requiring authentication
* - When ready to publish, users authenticate and submit the complete course data
* - The server assigns ownership (ownerId) to the authenticated user
* - After successful publish, the client removes the local draft
*
* **Example Request Body:**
* ```json
* {
* "data": {
* "name": "Introduction to Computer Science",
* "institution": "MIT",
* "instructor": "Prof. John Doe",
* "description": "Learn fundamental CS concepts"
* },
* "categories": ["Computer Science", "Programming"],
* "tags": ["beginner", "algorithms"]
* }
* ```
*
* **Example Response:**
* ```json
* {
* "id": "course-uuid-123",
* "ownerId": "user-uuid-456",
* "categories": ["Computer Science", "Programming"],
* "tags": ["beginner", "algorithms"],
* "createdAt": "2025-01-30T10:00:00Z",
* "updatedAt": "2025-01-30T10:00:00Z",
* "latestVersion": {
* "id": "version-uuid-789",
* "courseId": "course-uuid-123",
* "versionNumber": 1,
* "data": {
* "name": "Introduction to Computer Science",
* "institution": "MIT",
* "instructor": "Prof. John Doe",
* "description": "Learn fundamental CS concepts"
* },
* "isPublished": true,
* "publishedAt": "2025-01-30T10:00:00Z",
* "createdById": "user-uuid-456",
* "createdAt": "2025-01-30T10:00:00Z"
* }
* }
* ```
*/
post: operations["CoursesController_publishCourse"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/courses/my-courses": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Get my owned courses
* @description Retrieve all courses owned by the authenticated user, including both published and unpublished drafts.
*
* **Behavior:**
* - Returns only courses where `ownerId` matches the authenticated user's ID
* - Includes both published courses and unpublished drafts
* - Sorted by `updatedAt` descending (most recently updated first)
* - Each course includes its latest version (published or unpublished)
*
* **Use Cases:**
* - Display user's course dashboard
* - List courses for editing or management
* - Show publishing status for each owned course
*
* **Authentication:** JWT token required in Authorization header
*
* **Example Response:**
* ```json
* [
* {
* "id": "course-uuid-123",
* "ownerId": "user-uuid-456",
* "categories": ["Math"],
* "tags": ["advanced"],
* "createdAt": "2025-01-29T10:00:00Z",
* "updatedAt": "2025-01-30T15:00:00Z",
* "latestVersion": {
* "id": "version-uuid-789",
* "versionNumber": 2,
* "data": {
* "name": "Advanced Calculus",
* "institution": "MIT"
* },
* "isPublished": true,
* "publishedAt": "2025-01-30T15:00:00Z"
* }
* },
* {
* "id": "course-uuid-999",
* "ownerId": "user-uuid-456",
* "categories": ["Physics"],
* "tags": [],
* "createdAt": "2025-01-28T10:00:00Z",
* "updatedAt": "2025-01-28T11:00:00Z",
* "latestVersion": {
* "id": "version-uuid-888",
* "versionNumber": 1,
* "data": {
* "name": "Quantum Mechanics Draft",
* "institution": "Stanford"
* },
* "isPublished": false,
* "publishedAt": null
* }
* }
* ]
* ```
*/
get: operations["CoursesController_findMyCourses"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/courses/search": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["CoursesController_search"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/courses/published": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["CoursesController_findAllPublished"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/courses/{id}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["CoursesController_findOne"];
put?: never;
post?: never;
delete: operations["CoursesController_remove"];
options?: never;
head?: never;
patch: operations["CoursesController_update"];
trace?: never;
};
"/api/courses/{id}/publish": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch: operations["CoursesController_publish"];
trace?: never;
};
"/api/courses/{id}/unpublish": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch: operations["CoursesController_unpublish"];
trace?: never;
};
"/api/courses/{id}/versions": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Get version history for a course */
get: operations["CoursesController_getVersionHistory"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/courses/{id}/versions/latest": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Get the latest version of a course */
get: operations["CoursesController_getLatestVersion"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/courses/{id}/versions/compare": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Compare two versions of a course */
get: operations["CoursesController_compareVersions"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/courses/{id}/versions/{versionNumber}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Get a specific version of a course */
get: operations["CoursesController_getVersion"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/courses/{id}/copy": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* Copy a course for editing
* @description Create an editable copy of a published course. The copy is owned by the authenticated user and starts as unpublished.
*
* **Use Cases:**
* - Users want to customize an existing course for their needs
* - Teachers want to use a course as a template
* - Students want to create their own version of a course
*
* **Behavior:**
* - Only published courses can be copied
* - Copy starts with version 1 in unpublished state
* - Complete course structure is deep copied (metadata, modules, connections)
* - Copy is fully independent - changes don't affect original
* - Copy owner is set to authenticated user
*
* **Example Response:**
* ```json
* {
* "id": "new-course-uuid-789",
* "ownerId": "user-uuid-456",
* "categories": ["Computer Science"],
* "tags": ["beginner"],
* "createdAt": "2025-11-03T00:30:00Z",
* "updatedAt": "2025-11-03T00:30:00Z",
* "latestVersion": {
* "id": "version-uuid-001",
* "courseId": "new-course-uuid-789",
* "versionNumber": 1,
* "data": {
* "name": "Introduction to CS (Copy)",
* "institution": "MIT",
* "modules": { /* complete module structure *\/ }
* },
* "isPublished": false,
* "publishedAt": null,
* "createdById": "user-uuid-456",
* "createdAt": "2025-11-03T00:30:00Z"
* }
* }
* ```
*/
post: operations["CoursesController_copyCourse"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/admin/courses": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["AdminCoursesController_findAll"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/admin/courses/{id}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["AdminCoursesController_findOne"];
put?: never;
post?: never;
delete: operations["AdminCoursesController_remove"];
options?: never;
head?: never;
patch: operations["AdminCoursesController_update"];
trace?: never;
};
"/api/admin/courses/{id}/publish": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch: operations["AdminCoursesController_publish"];
trace?: never;
};
"/api/admin/courses/{id}/unpublish": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch: operations["AdminCoursesController_unpublish"];
trace?: never;
};
"/api/enrollments": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Get all enrollments for authenticated user
* @description Retrieve all active enrollments for the authenticated user.
*
* **Authentication:** Required - JWT token in Authorization header
*
* **Behavior:**
* - Returns only enrollments where userId matches authenticated user
* - Filters by status = 'active' (excludes withdrawn enrollments)
* - Returns empty array if user has no active enrollments
*
* **Example Response:**
* ```json
* [
* {
* "id": "enrollment-1",
* "userId": "user-123",
* "courseId": "course-1",
* "status": "active",
* "enrolledAt": "2025-01-29T10:00:00Z",
* "withdrawnAt": null,
* "createdAt": "2025-01-29T10:00:00Z",
* "updatedAt": "2025-01-29T10:00:00Z"
* },
* {
* "id": "enrollment-2",
* "userId": "user-123",
* "courseId": "course-2",
* "status": "active",
* "enrolledAt": "2025-01-30T10:00:00Z",
* "withdrawnAt": null,
* "createdAt": "2025-01-30T10:00:00Z",
* "updatedAt": "2025-01-30T10:00:00Z"
* }
* ]
* ```
*/
get: operations["EnrollmentsController_getUserEnrollments"];
put?: never;
/**
* Enroll in a course
* @description Enroll the authenticated user in a course. If the user is already enrolled, returns the existing enrollment (idempotent operation).
*
* **Authentication:** Required - JWT token in Authorization header
*
* **Behavior:**
* - Validates that the course exists
* - Checks if user is already enrolled
* - Returns existing enrollment if found (no error)
* - Creates new enrollment if not found
* - Sets status to 'active' and enrolledAt to current timestamp
*
* **Example Request Body:**
* ```json
* {
* "courseId": "123e4567-e89b-12d3-a456-426614174000"
* }
* ```
*
* **Example Response:**
* ```json
* {
* "id": "enrollment-uuid",
* "userId": "user-123",
* "courseId": "123e4567-e89b-12d3-a456-426614174000",
* "status": "active",
* "enrolledAt": "2025-01-30T10:00:00Z",
* "withdrawnAt": null,
* "createdAt": "2025-01-30T10:00:00Z",
* "updatedAt": "2025-01-30T10:00:00Z"
* }
* ```
*/
post: operations["EnrollmentsController_enroll"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/enrollments/{courseId}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Check enrollment status for a specific course
* @description Check if the authenticated user is enrolled in a specific course.
*
* **Authentication:** Required - JWT token in Authorization header
*
* **Behavior:**
* - Returns enrollment details if user is actively enrolled
* - Returns 404 if user is not enrolled or enrollment is withdrawn
*
* **Example Response:**
* ```json
* {
* "id": "enrollment-123",
* "userId": "user-123",
* "courseId": "123e4567-e89b-12d3-a456-426614174000",
* "status": "active",
* "enrolledAt": "2025-01-30T10:00:00Z",
* "withdrawnAt": null,
* "createdAt": "2025-01-30T10:00:00Z",
* "updatedAt": "2025-01-30T10:00:00Z"
* }
* ```
*/
get: operations["EnrollmentsController_getEnrollment"];
put?: never;
post?: never;
/**
* Withdraw from a course
* @description Mark enrollment as withdrawn for the authenticated user.
*
* **Authentication:** Required - JWT token in Authorization header
*
* **Behavior:**
* - Finds active enrollment for user and course
* - Updates status to 'withdrawn'
* - Sets withdrawnAt timestamp to current time
* - Returns 404 if no active enrollment exists
*
* **Example Response:**
* ```json
* {
* "id": "enrollment-123",
* "userId": "user-123",
* "courseId": "123e4567-e89b-12d3-a456-426614174000",
* "status": "withdrawn",
* "enrolledAt": "2025-01-30T10:00:00Z",
* "withdrawnAt": "2025-01-30T15:00:00Z",
* "createdAt": "2025-01-30T10:00:00Z",
* "updatedAt": "2025-01-30T15:00:00Z"
* }
* ```
*/
delete: operations["EnrollmentsController_withdraw"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
}
interface components {
schemas: {
ModuleNode: {
/**
* @description Unique identifier for the module node
* @example 1
*/
id: string;
/**
* @description Display label for the module
* @example Introduction to Algorithms
*/
label: string;
/**
* @description Sequential order number (null if unordered)
* @example 1
*/
order?: Record<string, never> | null;
/**
* @description Array of prerequisite module IDs
* @example [
* "0"
* ]
*/
pre: string[];
/**
* @description Array of dependent module IDs
* @example [
* "2",
* "3"
* ]
*/
post: string[];
};
ModuleGraph: {
/** @description Array of module nodes in the graph */
nodes: components["schemas"]["ModuleNode"][];
};
CourseData: {
/**
* @description The name of the course
* @example Introduction to Computer Science
*/
name: string;
/**
* @description The institution offering the course
* @example MIT
*/
institution?: string;
/** @description Course modules graph structure */
modules?: components["schemas"]["ModuleGraph"];
/**
* @description Categories the course belongs to
* @example [
* "Computer Science",
* "Mathematics"
* ]
*/
categories?: string[];
/**
* @description Tags for searchability and filtering
* @example [
* "algorithms",
* "beginner",
* "data-structures"
* ]
*/
tags?: string[];
};
CreateCourseDto: {
/**
* @description The course data containing name, institution, and other course details
* @example {
* "name": "Introduction to Computer Science",
* "institution": "MIT"
* }
*/
data: components["schemas"]["CourseData"];
/**
* @description Categories the course belongs to
* @example [
* "Computer Science",
* "Mathematics"
* ]
*/
categories?: string[];
/**
* @description Tags for searchability and filtering
* @example [
* "algorithms",
* "beginner",
* "data-structures"
* ]
*/
tags?: string[];
/**
* @description ID of the user who owns/created this course
* @example user-123
*/
ownerId?: string;
};
PublishCourseDto: {
/**
* @description The course data containing name, institution, and other course details
* @example {
* "name": "Introduction to Computer Science",
* "institution": "MIT"
* }
*/
data: components["schemas"]["CourseData"];
/**
* @description Categories the course belongs to
* @example [
* "Computer Science",
* "Mathematics"
* ]
*/
categories?: string[];
/**
* @description Tags for searchability and filtering
* @example [
* "algorithms",
* "beginner",
* "data-structures"
* ]
*/
tags?: string[];
};
UpdateCourseDto: {
/**
* @description The course data to update (partial updates supported)
* @example {
* "name": "Advanced Computer Science",
* "institution": "Stanford"
* }
*/
data?: components["schemas"]["CourseData"];
/**
* @description Categories the course belongs to
* @example [
* "Computer Science",
* "Mathematics"
* ]
*/
categories?: string[];
/**
* @description Tags for searchability and filtering
* @example [
* "algorithms",
* "beginner",
* "data-structures"
* ]
*/
tags?: string[];
/**
* @description ID of the user who owns/created this course
* @example user-123
*/
ownerId?: string;
};
CourseVersionMetadataDto: {
/**
* @description The sequential version number
* @example 1
*/
versionNumber: number;
/**
* @description Whether this version is published
* @example true
*/
isPublished: boolean;
/**
* @description Timestamp when the version was published (null if not published)
* @example 2025-10-19T10:00:00.000Z
*/
publishedAt: Record<string, never> | null;
/**
* @description ID of the user who created this version
* @example user-uuid-123
*/
createdById: string;
/**
* @description Timestamp when the version was created
* @example 2025-10-19T10:00:00.000Z
*/
createdAt: string;
};
VersionHistoryPaginationDto: {
/**
* @description Current page number
* @example 1
*/
page: number;
/**
* @description Number of versions per page
* @example 10
*/
pageSize: number;
/**
* @description Total number of versions
* @example 25
*/
totalVersions: number;
/**
* @description Total number of pages
* @example 3
*/
totalPages: number;
};
PaginatedVersionHistoryDto: {
/** @description Array of version metadata */
versions: components["schemas"]["CourseVersionMetadataDto"][];
/** @description Pagination information */
pagination: components["schemas"]["VersionHistoryPaginationDto"];
/**
* @description The latest version number for this course
* @example 3
*/
latestVersion: number;
};
CourseVersionDto: {
/**
* @description The unique identifier of the version
* @example uuid-123-456
*/
id: string;
/**
* @description The course ID this version belongs to
* @example course-uuid-123
*/
courseId: string;
/**
* @description The sequential version number
* @example 1
*/
versionNumber: number;
/**
* @description The complete course data for this version
* @example {
* "institution": "MIT",
* "title": "Introduction to Computer Science"
* }
*/
data: components["schemas"]["CourseData"];
/**
* @description Whether this version is published
* @example true
*/
isPublished: boolean;
/**
* @description Timestamp when the version was published (null if not published)
* @example 2025-10-19T10:00:00.000Z
*/
publishedAt: Record<string, never> | null;
/**
* @description ID of the user who created this version
* @example user-uuid-123
*/
createdById: string;
/**
* @description Timestamp when the version was created
* @example 2025-10-19T10:00:00.000Z
*/
createdAt: string;
};
VersionComparisonDto: {
/** @description The first version for comparison */
version1: components["schemas"]["CourseVersionDto"];
/** @description The second version for comparison */
version2: components["schemas"]["CourseVersionDto"];
};
CreateEnrollmentDto: {
/**
* Format: uuid
* @description The ID of the course to enroll in
* @example 123e4567-e89b-12d3-a456-426614174000
*/
courseId: string;
};
EnrollmentResponseDto: {
/**
* @description Unique identifier for the enrollment
* @example 123e4567-e89b-12d3-a456-426614174000
*/
id: string;
/**
* @description ID of the enrolled user
* @example user-123
*/
userId: string;
/**
* @description ID of the course
* @example 123e4567-e89b-12d3-a456-426614174000
*/
courseId: string;
/**
* @description Enrollment status
* @example active
* @enum {string}
*/
status: "active" | "withdrawn";
/**
* Format: date-time
* @description Timestamp when user enrolled
* @example 2025-01-30T10:00:00Z
*/
enrolledAt: string;
/**
* @description Timestamp when user withdrew (null if still active)
* @example null
*/
withdrawnAt: Record<string, never> | null;
/**
* Format: date-time
* @description Timestamp when enrollment was created
* @example 2025-01-30T10:00:00Z
*/
createdAt: string;
/**
* Format: date-time
* @description Timestamp when enrollment was last updated
* @example 2025-01-30T10:00:00Z
*/
updatedAt: string;
};
};
responses: never;
parameters: never;
requestBodies: never;
headers: never;
pathItems: never;
}
interface operations {
CoursesController_findAll: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Array of published courses */
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_create: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["CreateCourseDto"];
};
};
responses: {
/** @description Course created successfully */
201: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Unauthorized - authentication required */
401: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Forbidden - admin access required */
403: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_publishCourse: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["PublishCourseDto"];
};
};
responses: {
/** @description Course published successfully with assigned ID and version 1 */
201: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/**
* @description Bad Request - validation errors in course data
*
* **Common validation errors:**
* - Missing required field: `data.name`
* - Empty course name (after trimming whitespace)
* - Invalid data types (e.g., name is not a string)
* - Invalid array format for categories or tags
*
* **Example error response:**
* ```json
* {
* "statusCode": 400,
* "message": [
* "data.name should not be empty",
* "data.name must be a string"
* ],
* "error": "Bad Request"
* }
* ```
*/
400: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/**
* @description Unauthorized - authentication required
*
* User must be authenticated with a valid JWT token to publish courses.
*
* **Example error response:**
* ```json
* {
* "statusCode": 401,
* "message": "Unauthorized"
* }
* ```
*/
401: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_findMyCourses: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Array of owned courses (published and unpublished) */
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Unauthorized - authentication required */
401: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_search: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_findAllPublished: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_findOne: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_remove: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_update: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["UpdateCourseDto"];
};
};
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_publish: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_unpublish: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_getVersionHistory: {
parameters: {
query?: {
/** @description Page number (default: 1) */
page?: number;
/** @description Number of versions per page (default: 10, max: 100) */
pageSize?: number;
};
header?: never;
path: {
/** @description Course ID */
id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Paginated version history */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["PaginatedVersionHistoryDto"];
};
};
/** @description Invalid pagination parameters */
400: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Course not found */
404: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_getLatestVersion: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Course ID */
id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Latest version data */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["CourseVersionDto"];
};
};
/** @description Access denied - version is not published and user is not owner/admin */
403: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Course not found or no versions exist */
404: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_compareVersions: {
parameters: {
query: {
/** @description First version number */
v1: number;
/** @description Second version number */
v2: number;
};
header?: never;
path: {
/** @description Course ID */
id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Comparison of two versions */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["VersionComparisonDto"];
};
};
/** @description Invalid version numbers */
400: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Access denied - one or both versions are not published and user is not owner/admin */
403: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description One or both versions not found */
404: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_getVersion: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Course ID */
id: string;
/** @description Version number */
versionNumber: number;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Version data */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["CourseVersionDto"];
};
};
/** @description Access denied - version is not published and user is not owner/admin */
403: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Version not found */
404: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CoursesController_copyCourse: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Source course ID (UUID format) */
id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Course copied successfully with new UUID and ownership */
201: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Bad Request - invalid course ID format */
400: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Unauthorized - authentication required to copy courses */
401: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Forbidden - cannot copy unpublished course */
403: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Not Found - source course does not exist */
404: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Internal Server Error - failed to copy course */
500: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
AdminCoursesController_findAll: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
AdminCoursesController_findOne: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
AdminCoursesController_remove: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
AdminCoursesController_update: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["UpdateCourseDto"];
};
};
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
AdminCoursesController_publish: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
AdminCoursesController_unpublish: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {