A web application for discovering, posting, reviewing, and interacting with street food spots. It supports multiple roles:
- 👤 Normal Users
- 💎 Premium Users
- 🛡️ Admins
Each with different access and permissions.
- Node.js – JavaScript runtime for scalable backend
- Express.js – Framework for REST APIs
- TypeScript – Type-safe development
- Prisma ORM – Easy database access
- PostgreSQL – Relational database
- Node.js (v16+)
- npm or yarn
- PostgreSQL (v12+)
- Git
-
Clone the repository:
git clone <repository-url> cd <repository-folder>
-
Install dependencies:
yarn install
-
Start Development Server:
yarn dev
-
Set Up the Database -Ensure PostgreSQL is running.
-Apply Prisma migrations to create the database schema:
npx prisma migrate dev
-
Build for Production:
npm run build
GET /
– 🔒 Admin: Get all usersGET /me
– 🔐 Logged-in: Get own profilePOST /create-admin
– 🌐 Public: Create adminPOST /create-user
– 🌐 Public: Register userPATCH /:id/status
– 🔒 Admin: Update statusPATCH /update-my-profile
– 🔐 Logged-in: Update own profile
POST /login
– 🌐 Public: Login & get tokensPOST /refresh-token
– 🌐 Public: Get new tokenPOST /change-password
– 🔐 Logged-in: Change passwordPOST /forgot-password
– 🌐 Public: Request reset linkPOST /reset-password
– 🌐 Public: Reset password
GET /
– 🌐 Public: Get all categoriesGET /:id
– 🌐 Public: Get one categoryPOST /create-category
– 🔐 Admin/User: Add categoryDELETE /:id
– 🔒 Admin: Delete category
GET /get-approved-post
– 🔐 User: Get approved postsGET /
– 🔒 Admin: Get all postsGET /:id
– 🔒 Admin: Get single postGET /get-pending-post
– 🔒 Admin: Get pending postsGET /get-rejected-post
– 🔒 Admin: Get rejected postsGET /get-approved-post/:id
– 🌐 Public: View single approved postPOST /create-post
– 🔐 User: Add postPATCH /update-status/:id
– 🔒 Admin: Change post statusPATCH /update-post/:id
– 🔐 User: Update own postPATCH /premium/:id
– 🔒 Admin: Mark post as premiumDELETE /:id
– 🔒 Admin: Delete post
GET /
– 🌐 Public: All commentsGET /:id
– 🌐 Public: One commentPOST /:postId
– 🔐 User: Add commentDELETE /:id
– 🔒 Admin: Delete comment
GET /
– 🌐 Public: All votesGET /:id
– 🌐 Public: One votePOST /:postId
– 🔐 User: Vote on a postDELETE /:postId
– 🔐 User: Remove vote
GET /
– 🌐 Public: All reviewsGET /:id
– 🌐 Public: One reviewPOST /:postId
– 🔐 User: Submit reviewDELETE /:postId
– 🔐 User: Delete own review
Street_Food_Discovery_Website/
│── .vercel/
│── node_modules/
│── dist/
│── src/
│ ├── app/
| | │── modules
│ | | ├── Auth
| | | | |-controller.ts
| | | | |-service.ts
| | | | |-route.ts
│ | | ├── Category
| | | | |-controller.ts
| | | | |-service.service.ts
| | | | |-service.route.ts
│ | | ├── Comment
| | | | |-controller.ts
| | | | |-service.ts
| | | | |-route.ts
│ | | ├── Posts
| | | | |-controller.ts
| | | | |-service.ts
| | | | |-route.ts
│ | | ├── Review
| | | | |-controller.ts
| | | | |-service.ts
| | | | |-route.ts
│ | | ├── User
| | | | |-controller.ts
| | | | |-service.ts
| | | | |-route.ts
│ | | ├── Vote
| | | | |-controller.ts
| | | | |-service.ts
| | | | |-route.ts
| | │── middlewares
│ | | ├── globalErrorHandlers.ts
│ | | ├── validateRequest.ts
│ | | ├── auth.ts
│ | | ├── emailSender.ts
| | │── interfaces
│ | | ├── common.ts
│ | | ├── file.ts
│ | | ├── pagination.ts
| | │── error
│ | | ├── AppError.ts
| | │── routes
│ | | ├── index.ts
│ ├── generated/
│ ├── helpers/
│ ├── shared/
│ │ ├── catchAsync.ts
│ │ ├── sendResponse.ts
│ │ ├── prisma.ts
│ │ ├── pick.ts
│ ├── helpers/
│ │ ├── fileUploader.ts
│ │ ├── jwtHelpers.ts
│ │ ├── paginationHelpers.ts
│ ├── app.ts
│ │
│ ├── server.ts
│── uploads
│── .env
│── .gitignore
│── README.md
│── tsconfig.json
│── yarn.lock