URL: /auth
Request:
{
"document": "29737520009",
"password": "FN57akyScx"
}
Response:
{
"token": "jwt token"
}
URL: /user
Request:
{
"name": "Joao da Silva",
"document": "29737520009",
"password": "FN57akyScx"
}
Response:
{
"id": "uuidv4"
}
URL: /admin/user
Headers: Authentication
Request:
{
"name": "Joao da Silva",
"document": "29737520009"
}
Response:
{
"id": "uuidv4",
"password": "FN57akyScx"
}
URL: /user
Headers: Authentication
Request:
{
"currentPassword": "FN57akyScx",
"newPassword": "FN57akyScx222"
}
Response:
200 OK
URL: /book
Request:
/book?page=0
/book?page=0&search=nome_livro
Response:
[
{
"id": "uuidv4",
"title": "A Cabana",
"status": "RENTED | AVAILABLE",
"returnDate": "2024-04-17T20:19:57.164Z"
}
]
URL: /book/{id}
Request:
/book/cedw123123
Response:
{
"id": "uuidv4",
"title": "A Cabana",
"description": "Bla bla bla",
"author": "Fulano de tal",
"status": "RENTED | AVAILABLE",
"returnDate": "2024-04-17T20:19:57.164Z"
}
URL: /book/{id}
Headers: Authentication
Request:
/book/cedw123123
Response: Obs: objeto user, rentDate e returnDate vem null caso status seja AVAILABLE
{
"id": "uuidv4",
"title": "A Cabana",
"description": "Bla bla bla",
"author": "Fulano de tal",
"status": "RENTED | AVAILABLE",
"rentDate": "2024-04-17T20:19:57.164Z",
"returnDate": "2024-04-17T20:19:57.164Z",
"user": {
"name": "Joao da Silva",
"document": "29737520009"
}
}
URL: /rent
Headers: Authentication
Request:
{
"bookId": "uuidv4"
}
Response:
{
"returnDate": "2024-04-17T20:19:57.164Z"
}
URL: /rent
Headers: Authentication
Obs: o endpoint eh o mesmo, a diferenca eh que aqui mandamos o token no header, e na api devemos validar se tem token e
se o portador do token eh do tipo atendente
Request:
{
"userDocument": "29737520009",
"bookId": "uuidv4"
}
Response:
{
"returnDate": "2024-04-17T20:19:57.164Z"
}
URL: /rent
Headers: Authentication
Request:
/rent?page=0
Response:
[
{
"id": "uuidv4",
"bookTitle": "A Cabana",
"status": "RENTED | AVAILABLE",
"returnDate": "2024-04-17T20:19:57.164Z"
}
]
URL: /user/{document}
Headers: Authentication
Obs: so pode ser feito por um usuario do tipo atendente
Request:
/user/29737520009
Response:
{
"document": "29737520009",
"name": "Joao da Silva",
"role": "CLIENT | ATTENDANT",
"booksRentedAmount": 10,
"currentRentedBooks": [
{
"id": "uuidv4",
"name": "A Cabana"
}
]
}
URL: /user/reset-password
Headers: Authentication
Obs: so pode ser feito por um usuario do tipo atendente
Request:
{
"document": "29737520009"
}
Response:
{
"password": "senha gerada automaticamente"
}
URL: /rent/return
Headers: Authentication
Obs: so pode ser feito por um usuario do tipo atendente
Request:
{
"userDocument": "29737520009",
"bookId": "uuidv4"
}
Response:
200 OK
URL: /book
Headers: Authentication
Obs: so pode ser feito por um usuario do tipo atendente
Request:
{
"name": "A Cabana",
"Description": "Bla bla bla",
"authorId": "Joao da Silva"
}
Response:
200 OK
URL: /user
Headers: Authentication
Obs: so pode ser feito por um usuario do tipo atendente
Request:
/user?page=0
/user?page=0&search=document_or_name
Response:
[
{
"name": "Joao da Silva",
"document": "29737520009"
}
]
classDiagram
class Book {
<<Entity>>
+ id: string
+ title: string
+ description: string
+ status: RENTED | AVAILABLE
+ createdAt: datetime
- author: Author
}
class Author {
<<Entity>>
+ id: string
+ name: string
+ createdAt: datetime
}
class User {
<<Entity>>
+ id: string
+ name: string
+ document: string
+ password: string
+ role: CLIENT | ATTENDANT
+ createdAt: datetime
- rents: Rent[]
}
class Rent {
<<Entity>>
+ id: string
+ bookId: string
+ userId: string
+ rentDate: datetime
+ returnDate: datetime
+ returnedDate: datetime
}
Book "N" *-- "1" Author : has
Book "1" *-- "N" Rent : has
User "1*" *-- "N" Rent : has