Link to the Hungry Hippo website
Frontend: React, Tailwind, TypeScript
Backend: NodeJS, Express, PostgreSQL, JavaScript
T-grams Development Team presents the Hungry Hippo project. This project is a web application that allows users to order food from the best restaurants in the vicinity and track their order status at affordable delivery prices. It is a Full Stack Web Application made as a part of 50th Voyage organised by Chingu. More about Voyage 50 and the project requirements can be found:
In order not to block the creative and innovative work of the project, the team has adopted the idea to use the Google Docs document as a team document in a very free fashion. We were sharing the ideas, adding details and minutes of the meetings in that document that was more of a brainstorming tool. The said document is accessible in the Google Docs.
For the Project Management, the team has used the Github Projects' Kanban Board
The main design and prototyping is done by Figma
and the file can be accessed here.
On the other hand, some excerps are exported to the docs
folder in pdf
format.
User Authentication:
Restaurant Discovery:
Food Ordering:
User Profiles:
Payment Integration:
Food Categories:
Map Integration:
API Endpoints
To access the API endpoints, you can use the following URLs:
http://localhost:3000/api
https://hungryhippo.onrender.com/api
SwaggerUI Documentation can be found here
/auth/login
- POST - raw/json data
```json
{
"username": "testuser", // or "email": "3JFJt@example.com"
"password": "testpassword"
}/auth/logout
- POST/api/auth/refresh-token
- GET/resetpassword/send-password-reset-email
- POST - raw/json data
```json
{
"email": "john.doe@example.com"
}/resetpassword/reset-link/{token}
- GET/resetpassword/reset-password
- POST - raw/json data
```json
{
"password": "newpassword123",
"confirmPassword": "newpassword123"
}/api/auth/profile
- GET
Food Items Search/api/fooditems/items
- GET - raw/json data
```json
{
"password": "newpassword123",
"confirmPassword": "newpassword123"
}/api/profile
- PUT - raw/json data
```json
{
"username": "johndoe",
"email": "johndoe@example.com",
"firstName": "John",
"lastName": "Doe"
}/api/nearbyrestaurants
- GET
```json
{
"longitude": 40.6782,
"latitude": -73.9442
}Create Order: /order/create-order
- POST - raw/json data
{
"deliveryAddress": "whatever4",
"deliveryDate": "2024-08-05",
"deliveryTime": "14:00",
"foodItems": [
{
"itemId": "1",
"quantity": 1
},
{
"itemId": 200,
"quantity": 5
},
{
"itemId": 4,
"quantity": 2
}
]
}
Get Order by Id: /order/get-order/{orderId}
- GET
Get Orders by User: /order/get-orders
- GET
Cancel Order: /order/cancel/{orderId}
- PUT - raw/json data
/foodcategories
- GET?[foodItemId={id}&][categoryId={id}&][restaurantId={id}&country={country string}]
- GET/wallets/requestAccountTopup
- POST - raw/json data
```json
{
"amount": 50
}/wallets/makePayment
- POST - raw/json data
```json
{
"amount": 30,
"orderId": "order_123456"
}/wallets
- GET/transactions
- GETPostgreSQL relational database has been chosenfor this project. The database was created using Sequelize ORM and deployed on Neon.
By analyzing the proposed food items API from the deployed API https://menus-api.vercel.app/, we have noticed that only the general list of all food items was obtainable. On the other hand, the repo free-food-menus-api was lacking the geo-coordinates of the food items (restaurants) that were available on the deployed API. Therefore, instead of relying on the deployed API, we have decided to make a seeder script that would populate the database with the output of the deployed API: backend/seeders/API2db.js
.
git clone https://github.com/chingu-voyages/v50-tier3-team-21/
cd backend && npm install
.env
file, details in env-samplenpm run seed
npm run dev
cd frontend && npm install
.env
file, details in env-samplenpm run dev
Some of the automated tests were written in Jest and can be executed with npm run test
in backend directory.
Because of the time constraint, and because the developers had decided to work with the tecnologies that weren't used by them before, a lot of time was spent into studying, learning and discussing the solutions and implementing them.
Having all that in mind, the team has decided to implement more tests in the future versions of the app. Nevertheless, the manual tests were performed by the team. Backend functionalities were tested with Postman and Beekeeper Studio, and frontend functionalities were tested with the browsers on various devices.
Frontend:
Backend:
Hosting Platforms
Development and Design Tools
© 2024 T-grams - The Hungry Hippo Team. MIT License. All rights reserved