450 lines
11 KiB
Plaintext
450 lines
11 KiB
Plaintext
openapi: 3.1.0
|
|
info:
|
|
title: My Library API
|
|
description: Documentation for My Library API
|
|
version: '1.0'
|
|
servers:
|
|
- url: http://localhost:8080
|
|
description: Generated server url
|
|
tags:
|
|
- name: Book Management
|
|
description: APIs for book operations
|
|
- name: Customer Management
|
|
description: APIs for managing customer information and loyalty points
|
|
paths:
|
|
/api/customers/{customerId}:
|
|
put:
|
|
tags:
|
|
- Customer Management
|
|
summary: Update customer information
|
|
description: Updates an existing customer's information
|
|
operationId: updateCustomer
|
|
parameters:
|
|
- name: customerId
|
|
in: path
|
|
description: Customer's UUID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CustomerInfo'
|
|
required: true
|
|
responses:
|
|
'200':
|
|
description: Customer successfully updated
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
$ref: '#/components/schemas/CustomerDTO'
|
|
'404':
|
|
description: Customer not found
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
$ref: '#/components/schemas/CustomerDTO'
|
|
delete:
|
|
tags:
|
|
- Customer Management
|
|
summary: Delete a customer
|
|
description: Deletes a customer by their ID
|
|
operationId: deleteCustomer
|
|
parameters:
|
|
- name: customerId
|
|
in: path
|
|
description: Customer's UUID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
responses:
|
|
'204':
|
|
description: Customer successfully deleted
|
|
'404':
|
|
description: Customer not found
|
|
/api/customers:
|
|
post:
|
|
tags:
|
|
- Customer Management
|
|
summary: Register a new customer
|
|
description: Creates a new customer with the provided information
|
|
operationId: registerCustomer
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CustomerInfo'
|
|
required: true
|
|
responses:
|
|
'201':
|
|
description: Customer successfully registered
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
'400':
|
|
description: Invalid customer information provided
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
/api/customers/{customerId}/loyalty/subtract:
|
|
post:
|
|
tags:
|
|
- Customer Management
|
|
summary: Subtract loyalty points
|
|
description: Subtracts loyalty points from a customer's account
|
|
operationId: subtractLoyaltyPoints
|
|
parameters:
|
|
- name: customerId
|
|
in: path
|
|
description: Customer's UUID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
- name: points
|
|
in: query
|
|
description: Number of points to subtract
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
format: int32
|
|
responses:
|
|
'200':
|
|
description: Loyalty points successfully subtracted
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
type: integer
|
|
format: int32
|
|
'400':
|
|
description: Not enough loyalty points
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
type: integer
|
|
format: int32
|
|
'404':
|
|
description: Customer not found
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
type: integer
|
|
format: int32
|
|
/api/customers/{customerId}/loyalty/add:
|
|
post:
|
|
tags:
|
|
- Customer Management
|
|
summary: Add loyalty points
|
|
description: Adds loyalty points to a customer's account
|
|
operationId: addLoyaltyPoints
|
|
parameters:
|
|
- name: customerId
|
|
in: path
|
|
description: Customer's UUID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
- name: points
|
|
in: query
|
|
description: Number of points to add
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
format: int32
|
|
responses:
|
|
'200':
|
|
description: Loyalty points successfully added
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
type: integer
|
|
format: int32
|
|
'404':
|
|
description: Customer not found
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
type: integer
|
|
format: int32
|
|
/api/books:
|
|
get:
|
|
tags:
|
|
- Book Management
|
|
summary: Get all books
|
|
description: Returns a paginated list of books
|
|
operationId: getBooks
|
|
parameters:
|
|
- name: pageable
|
|
in: query
|
|
required: true
|
|
schema:
|
|
$ref: '#/components/schemas/Pageable'
|
|
responses:
|
|
'200':
|
|
description: Successfully retrieved books
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
$ref: '#/components/schemas/Page'
|
|
post:
|
|
tags:
|
|
- Book Management
|
|
summary: Register a new book
|
|
description: Adds a new book to the system
|
|
operationId: registerBook
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/BookDTO'
|
|
required: true
|
|
responses:
|
|
'201':
|
|
description: Book successfully registered
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
type: integer
|
|
format: int64
|
|
'400':
|
|
description: Invalid book data provided
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
type: string
|
|
'406':
|
|
description: Conflict with existing book in database
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
type: string
|
|
/api/customers/phone/{phoneNumber}:
|
|
get:
|
|
tags:
|
|
- Customer Management
|
|
summary: Find customer by phone number
|
|
description: Returns customer information based on phone number
|
|
operationId: findCustomerByPhoneNumber
|
|
parameters:
|
|
- name: phoneNumber
|
|
in: path
|
|
description: Customer's phone number
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Customer found
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
$ref: '#/components/schemas/CustomerDTO'
|
|
'404':
|
|
description: Customer not found
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
$ref: '#/components/schemas/CustomerDTO'
|
|
/api/books/{bookId}:
|
|
get:
|
|
tags:
|
|
- Book Management
|
|
summary: Get book by ID
|
|
description: Retrieves a book by its ID
|
|
operationId: getBookById
|
|
parameters:
|
|
- name: bookId
|
|
in: path
|
|
description: ID of the book to retrieve
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
format: int64
|
|
responses:
|
|
'200':
|
|
description: Book found
|
|
content:
|
|
'*/*':
|
|
schema:
|
|
$ref: '#/components/schemas/BookDTO'
|
|
'404':
|
|
description: Book not found
|
|
components:
|
|
schemas:
|
|
CustomerInfo:
|
|
type: object
|
|
properties:
|
|
firstName:
|
|
type: string
|
|
lastName:
|
|
type: string
|
|
phoneNumber:
|
|
type: string
|
|
required:
|
|
- firstName
|
|
- lastName
|
|
- phoneNumber
|
|
CustomerDTO:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
firstName:
|
|
type: string
|
|
lastName:
|
|
type: string
|
|
phoneNumber:
|
|
type: string
|
|
loyaltyPoints:
|
|
type: integer
|
|
format: int32
|
|
BookDTO:
|
|
type: object
|
|
properties:
|
|
isbn:
|
|
type: integer
|
|
format: int64
|
|
title:
|
|
type: string
|
|
maxLength: 255
|
|
minLength: 0
|
|
author:
|
|
type: string
|
|
publisher:
|
|
type: string
|
|
publicationDate:
|
|
type: string
|
|
format: date
|
|
price:
|
|
type: number
|
|
format: double
|
|
quantity:
|
|
type: integer
|
|
format: int32
|
|
categories:
|
|
type: array
|
|
description: Book categories
|
|
enum:
|
|
- FICTION
|
|
- NON_FICTION
|
|
- SCIENCE_FICTION
|
|
- FANTASY
|
|
- MYSTERY
|
|
- THRILLER
|
|
- ROMANCE
|
|
- BIOGRAPHY
|
|
- HISTORY
|
|
- POETRY
|
|
- CHILDRENS
|
|
- YOUNG_ADULT
|
|
- SCIENCE
|
|
- PHILOSOPHY
|
|
- SELF_HELP
|
|
- TRAVEL
|
|
- COOKING
|
|
- ART
|
|
- RELIGION
|
|
- REFERENCE
|
|
example:
|
|
- FICTION
|
|
- THRILLER
|
|
items:
|
|
type: string
|
|
description:
|
|
type: string
|
|
language:
|
|
type: string
|
|
required:
|
|
- author
|
|
- categories
|
|
- isbn
|
|
- language
|
|
- price
|
|
- publicationDate
|
|
- publisher
|
|
- quantity
|
|
- title
|
|
Pageable:
|
|
type: object
|
|
properties:
|
|
page:
|
|
type: integer
|
|
format: int32
|
|
minimum: 0
|
|
size:
|
|
type: integer
|
|
format: int32
|
|
minimum: 1
|
|
sort:
|
|
type: array
|
|
items:
|
|
type: string
|
|
Page:
|
|
type: object
|
|
properties:
|
|
totalElements:
|
|
type: integer
|
|
format: int64
|
|
totalPages:
|
|
type: integer
|
|
format: int32
|
|
size:
|
|
type: integer
|
|
format: int32
|
|
content:
|
|
type: array
|
|
items:
|
|
type: object
|
|
number:
|
|
type: integer
|
|
format: int32
|
|
sort:
|
|
$ref: '#/components/schemas/SortObject'
|
|
first:
|
|
type: boolean
|
|
last:
|
|
type: boolean
|
|
pageable:
|
|
$ref: '#/components/schemas/PageableObject'
|
|
numberOfElements:
|
|
type: integer
|
|
format: int32
|
|
empty:
|
|
type: boolean
|
|
PageableObject:
|
|
type: object
|
|
properties:
|
|
offset:
|
|
type: integer
|
|
format: int64
|
|
sort:
|
|
$ref: '#/components/schemas/SortObject'
|
|
pageSize:
|
|
type: integer
|
|
format: int32
|
|
pageNumber:
|
|
type: integer
|
|
format: int32
|
|
unpaged:
|
|
type: boolean
|
|
paged:
|
|
type: boolean
|
|
SortObject:
|
|
type: object
|
|
properties:
|
|
empty:
|
|
type: boolean
|
|
unsorted:
|
|
type: boolean
|
|
sorted:
|
|
type: boolean
|