https://github.com/leojimenezg/alura_challengeone_java_3
Oracle ONE Challenge: Forum-Hub, Java BackEnd APIRest using SpringBoot
https://github.com/leojimenezg/alura_challengeone_java_3
api-rest apirestful auth0 auth0-jwt backend jasonwebtoken java jwt-authentication postgresql spring spring-boot spring-mvc spring-security
Last synced: about 2 months ago
JSON representation
Oracle ONE Challenge: Forum-Hub, Java BackEnd APIRest using SpringBoot
- Host: GitHub
- URL: https://github.com/leojimenezg/alura_challengeone_java_3
- Owner: LeoJimenezG
- Created: 2024-07-12T00:43:12.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-12-27T23:59:14.000Z (4 months ago)
- Last Synced: 2025-03-10T22:59:29.752Z (about 2 months ago)
- Topics: api-rest, apirestful, auth0, auth0-jwt, backend, jasonwebtoken, java, jwt-authentication, postgresql, spring, spring-boot, spring-mvc, spring-security
- Language: Java
- Homepage:
- Size: 72.3 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Alura_ChallengeONE_Java_3
Alura Challenge: Forum-Hub. Java BackEnd API RESTThis API REST system simulates the functionality of a Forum using four main endpoints. It supports the GET, POST, PUT and DELETE http methods.
---
## 📘 How does it work
- Every endpoint capable of returning an object response, it will return the status code and a json.
- The system uses PostgresSQL for the database.
- The url before the endpoints can be adjusted according to the needs. (e.g., `http:/anyserver/ENDPOINT`).
- The system has four main endpoints: **/login**, **/topic**, **/author** and **/answer**. Each one of them correspond to different aspects and will vary on the http methods allowed.---
## 💻 Main Endpoints
### Endpoint("/login"):
- The only http method it accepts is POST.
- This endpoint does not require any kind of authorization, so anyone can access to it.
- You need to send a Json with valid credentials in order to recive a JsonWebToken that will allow you to access all the other endpoints.
- Example of the Json with credentials:
- If your credentials are valid you will recive your JWT and it will valid for two hours according to the UTC(-06:00).
- Example of successful response:
- If your credentials are not valid you will recive a 403 status code.
- Once you have recived your JWT, you will be able to access all the other endpoints.### Endpoint("/topic"):
- This endpoint will accept GET, POST, PUT and DELETE http methods.
- Only the active topics will be considered for this functions (`status = true`).
- #### Method POST:
- To register a new topic, you need to send a Json which can't have empty information.
- Example of a valid Json:

- If the request is successful you will get a 201 status code, the created object and its location `http:/server/topic/TOPIC_ID`):
- If you try to register a topic with the same `title` and `message` that another topic, you will get a 400 status code.
- #### Method GET:
- **Endpoint("/all")**:
- This endpoint will return a list of all the topics in a Json format.
- Example of sucessful response:
- **Endpoint("/firstTen")**:
- This endpoint will return a list of ten topics in ascending order according to their `creation_date`.- **Endpoint("/title/{title}")**:
- This endpoint allowes you to search a topic by its exact title.
- An example of a request is `http:/server/topic/title/example-of-title`.
- If the topic is found, you will recive a Json object:
- If the topic is not found, you will get a 404 status code.- **Endpoint("/author/{id}")**:
- This endpoint allowes you to search a topic by an author's id.
- An example of a request is `http:/server/topic/author/2`.
- If the author's id and topic is found, you will recive a list of topics in a Json format:
- If the author's id or topic is not found, you will get a 404 status code.
- **Endpoint("/course/{id}")**:
- This endpoint allowes you to search a topic by a course's id.
- An example of a request is `http:/server/topic/course/4`.
- If the course's id and topic is found, you will recive a list of topics in a Json format:

- If the course's id or topic is not found, you will get a 404 status code.- **Endpoint("/{id}")**:
- This endpoint allowes you to search a topic by its id.
- An example of a request is `http:/server/topic/1`.
- If the topic is found, you will recive a Json object:

- If the topic is not found, you will get a 404 status code.
- #### Method PUT:
- **Endpoint("/{id}")**:
- This endpoint allowes you to update a topic by its id.
- Example of a valid Json to update a topic:

- You can omit any of the Json properties as this is only an update.
- If the topic is found and the Json is valid, you will recive a Json of the updated object:

- If the topic is not found, you will get a 404 status code.- #### Method DELETE:
- **Endpoint("/{id}")**:
- This endpoint allowes you to delete a topic by its id.
- If the topic is found, you will only get a 200 status code.
- If the topic is not found, you will get a 404 status code.### Endpoint("/author"):
- This endpoint will accept GET and PUT http methods.
- #### Method GET:
- **Endpoint("/{id}")**:
- This endpoint allowes you to search an author by its id.
- An example of a request is `http:/server/author/1`.
- If the author is found, you will recive a Json object:

- If the author is not found, you will get a 404 status code.
- **Endpoint("/name/{name}")**:
- This endpoint allowes you to search an author by its exact name.
- An example of a request is `http:/server/author/name/Pedro-Hernandez`.
- If the author is found, you will recive a Json object:
- If the author is not found, you will get a 404 status code.
- **Endpoint("/email/{email}")**:
- This endpoint allowes you to search an author by its exact email.
- An example of a request is `http:/server/author/email/[email protected]`.
- If the author is found, you will recive a Json object:
- If the author is not found, you will get a 404 status code.- #### Method PUT:
- **Endpoint("/{id}")**:
- This endpoint allowes you to update an author by its id.
- Example of a valid Json to update an author:
- You can omit any of the Json properties as this is only an update.
- If the author is found and the Json is valid, you will revice a Json of the updated object:
- If the author is not found, you will get a 404 status code.### Endpoint("/answer"):
- This endpoint will accept GET, POST, PUT and DELETE http methods.
- #### Method GET:
- **Endpoint("/{id}")**:
- This endpoint allowes you to search an answer by its id.
- An example of a request is `http:/server/answer/1`.
- If the answer is found, you will recive a Json object:
- If the answer is not found, you will get a 404 status code.
- #### Method POST:
- **Endpoint("/add")**:
- This endpoint allowes you to add a new answer.
- You need to send a Json which can't have empty information.
- Example of a valid Json:
- If the request is successful you will get a 201 status code, the created object and its location `http:/server/answer/ANSWER_ID`:
- If your request is missing something or it is not correct, you will get a 400 status code.
- #### Method PUT:
- **Endpoint("/{id}")**:
- This endpoint allowes you to update an answer by its id.
- Example of a valid Json to update an answer:
- You can omit any of the Json properties as this is only an update.
- If the answer is found and the Json is valid, you will revice a Json of the updated object:
- If the answer is not found, you will get a 404 status code.
- #### Method DELETE:
- **Endpoint("/{id}")**:
- This endpoint allowes you to delete an answer by its id.
- If the answer is found, you will only get a 200 status code.
- If the answer is not found, you will get a 404 status code.---
## 🔐 Security Considerations
- The API uses JWT (JSON Web Token) for authentication and authorization.
- The token must be included in the `Authorization` header for all requests except the `/login` endpoint.
- Ensure secure storage of tokens on the client side.---
## 📚 Useful Resources
- [Spring Boot docs](https://spring.io/projects/spring-boot)
- [JWT introduction](https://jwt.io/introduction)
- [PostgresSQL docs](https://www.postgresql.org/docs/)