{"openapi":"3.0.0","paths":{"/auth":{"post":{"description":"Rota feita para retornar um token JWT. O login é feito a partir do e-mail e senha do usuário.","operationId":"AuthController_handle","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequestDto"}}}},"responses":{"200":{"description":"Token gerado com sucesso.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponseDto"}}}},"400":{"description":"Dados enviados são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZodValidationErrorResponseDto"}}}}},"summary":"Rota de login.","tags":["Auth"]}},"/user":{"post":{"description":"Rota feita para criar um usuário com base em seu nome, e-mail e senha.","operationId":"CreateUserController_handle","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserRequestDto"}}}},"responses":{"201":{"description":"Usuário criado com sucesso."},"400":{"description":"Dados enviados são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZodValidationErrorResponseDto"}}}}},"summary":"Rota de criação de usuário.","tags":["User"]}},"/note":{"post":{"description":"Rota feita para criar uma nota, com título e descrição (esta pode estar vazia) para um usuário autenticado.","operationId":"AddNoteController_handle","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddNoteRequestDto"}}}},"responses":{"201":{"description":"Nota criada com sucesso."},"400":{"description":"Dados inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZodValidationErrorResponseDto"}}}},"401":{"description":"Falta de autenticação e/ou autenticação incorreta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedErrorResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Rota de criação de nota.","tags":["Note"]}},"/user/notes":{"get":{"description":"Rota com funcionalidade de buscar todas as notas de um usuário autenticado, ordenadas em data de criação (`desc`)","operationId":"FetchUserNotesContoller_handle","parameters":[],"responses":{"200":{"description":"Notas retornadas com sucesso.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FetchUserNotesResponseDto"}}}},"401":{"description":"Falta de autenticação e/ou autenticação incorreta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedErrorResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Rota para pegar todas as notas de um usuário.","tags":["Note"]}},"/note/{id}":{"put":{"description":"Rota com funcionalidade de editar uma nota de um usuário autenticado, com base no ID da nota.","operationId":"UpdateNoteController_handle","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNoteDto"}}}},"responses":{"204":{"description":"Nota editada com sucesso."},"400":{"description":"Pode retornar erro de nota inexistente ou erro de validação de dados.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/InexistingNoteResponseDto"},{"$ref":"#/components/schemas/ZodValidationErrorResponseDto"}]}}}},"401":{"description":"Falta de autenticação e/ou autenticação incorreta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedErrorResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Rota para edição de uma nota.","tags":["Note"]},"delete":{"description":"Rota com a funcionalidade de deletar uma nota, com base em seu ID, de um usuário autenticado.","operationId":"DeleteNoteController_handle","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":"Nota deletada com sucesso."},"400":{"description":"Tentou deletar uma nota inexsitente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InexistingNoteResponseDto"}}}},"401":{"description":"Falta de autenticação e/ou autenticação incorreta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedErrorResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Rota para deletar uma nota.","tags":["Note"]}}},"info":{"title":"Good Diary","description":"Documentação da API do Good Diary.","version":"1.0","contact":{}},"tags":[{"name":"Auth","description":"Rotas envolvendo a autenticação do usuário."},{"name":"User","description":"Rotas envolvendo a manipulação de entidades e registros de usuários."},{"name":"Note","description":"Rotas envolvendo a manipulação de entidades e registros de notas, criados por usuários."}],"servers":[],"components":{"schemas":{"LoginRequestDto":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"E-mail do usuário."},"password":{"type":"string","description":"Senha do usuário."}},"required":["email","password"]},"LoginResponseDto":{"type":"object","properties":{"token":{"type":"string","format":"jwt","description":"O token de autenticação."}},"required":["token"]},"ZodValidationErrorDetail":{"type":"object","properties":{"code":{"type":"string","example":"too_small","description":"Código interno do erro no Zod"},"message":{"type":"string","example":"Uma nota deve conter título","description":"Mensagem amigável"},"path":{"example":["title"],"description":"Caminho do campo com erro","type":"array","items":{"type":"string"}},"origin":{"type":"string","example":"body","description":"Origem da validação"},"type":{"type":"string","example":"string"},"minimum":{"type":"number","example":1},"maximum":{"type":"number","example":100},"inclusive":{"type":"boolean","example":true},"expected":{"type":"string","example":"string"},"received":{"type":"string","example":"undefined"}},"required":["code","message","path"]},"ZodValidationErrorResponseDto":{"type":"object","properties":{"statusCode":{"type":"number","example":400},"message":{"type":"string","example":"Validation failed"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ZodValidationErrorDetail"}}},"required":["statusCode","message","errors"]},"CreateUserRequestDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nome do usuário."},"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"E-mail do usuário"},"password":{"type":"string","minLength":6,"description":"Senha do usuário."}},"required":["name","email","password"]},"AddNoteRequestDto":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Título da nota."},"description":{"type":"string","description":"Descrição/corpo da nota."}},"required":["title","description"]},"UnauthorizedErrorResponseDto":{"type":"object","properties":{"message":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}},"required":["message","statusCode"]},"FetchUserNotesResponseDto":{"type":"object","properties":{"notes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"ID da nota."},"title":{"type":"string","description":"Título da nota"},"description":{"type":"string","description":"Descrição/corpo da nota."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Quando a nota foi criada."},"updatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"Última vez que a nota foi editada."}},"required":["id","title","description","createdAt","updatedAt"]},"x-nestjs_zod-has-null":true}},"required":["notes"]},"UpdateNoteDto":{"type":"object","properties":{"title":{"type":"string","minLength":1},"description":{"type":"string"}},"required":["title","description"]},"InexistingNoteResponseDto":{"type":"object","properties":{"message":{"type":"string","example":"Essa nota não existe."},"statusCode":{"type":"number","example":401}},"required":["message","statusCode"]}}}}