RESTful API for the ThinkGreenly, built with Node.js, Express, and PostgreSQL. Handles authentication, idea moderation, and payments.
- Database: PostgreSQL with Prisma ORM.
- JWT Authentication: Secure member/admin login.
- CRUD Operations: Manage ideas, comments, and votes.
- Admin Endpoints: Approve/reject ideas with feedback.
- Runtime: Node.js
- Framework: Express.js
- Database: PostgreSQL
- ORM: Prisma
- Payment API: SSLCommerz.
- Auth: JWT, bcrypt
- Node.js β₯18.x
- PostgreSQL β₯16.x
-
Clone the repo:
git clone https://github.com/khaledssbd/ThinkGreenly-apis.git cd ThinkGreenly-apis
-
Install dependencies
npm install --legacy-peer-deps
-
Set up environment variables in a
.env
file:NODE_ENV="development" PORT=5000 DATABASE_URL="postgresql://postgres:postgres@localhost:5432/ThinkGreenly?schema=public" JWT_SECRET="" JWT_EXPIRATION="15d" JWT_REFRESH="" JWT_REFRESH_EXPIRATION="7d" RESET_PASSWORD_SECRET="" RESET_PASSWORD_EXPIRATION="10m" RESET_PASSWORD_LINK="http://localhost:5000/auth/reset-password" RESEND_API_KEY="" BCRYPT_SALT_ROUNDS=12 SMTP_HOST="smtp.gmail.com" SMTP_PORT=587 SMTP_USER="" CLOUDINARY_CLOUD_NAME="" CLOUDINARY_API_KEY= CLOUDINARY_API_SECRET=""
-
Set up database
npx prisma migrate dev
-
Start the server
npm run dev
β
οΈ POST β/api/v1/auth/loginββββββββββββββββββββLogin User
β
οΈ POST β/api/v1/auth/send-emailβββββββββββββSend Email (e.g., reset link)
β
οΈ POST β/api/v1/auth/reset-passwordβββββββββReset Password
β
οΈ POST β/api/v1/auth/refresh-tokenββββββββββGenerate Refresh Token
β
οΈ PATCH β/api/v1/auth/change-passwordββββββββChange Password
β
οΈ POST β/api/v1/usersβββββββββββββββββββββCreate User
β
οΈ PATCH β/api/v1/users/:id/statusββββββββββUpdate User Status/Role (Admin)
β
οΈ GET ββ/api/v1/users/meββββββββββββββββGet My Profile
β
οΈ GET ββ/api/v1/users/:idββββββββββββββββGet Single User
β
οΈ PATCH β/api/v1/users/:id/profileβββββββββUpdate Profile
β
οΈ GET ββ/api/v1/admin/ideasββββββββββββββGet All Ideas (Admin View)
β
οΈ GET ββ/api/v1/admin/usersββββββββββββββGet All Users
β
οΈ PATCH β/api/v1/admin/ideas/:id/statusββββUpdate Idea Status (Approve/Reject)
β
οΈ PATCH β/api/v1/admin/users/:id/statusβββUpdate User Status (e.g., isActive)
β
οΈ POST β/api/v1/ideas/draftsβββββββββββββDraft an Idea
β
οΈ GET ββ/api/v1/ideasβββββββββββββββββββGet All Ideas (Public)
β
οΈ GET ββ/api/v1/ideas/:idβββββββββββββββGet an Idea
β
οΈ PUT ββ/api/v1/ideas/:idβββββββββββββββUpdate an Idea
β
οΈ DELETE β/api/v1/ideas/:idββββββββββββββDelete an Idea
β
οΈ POST β/api/v1/ideasβββββββββββββββββββCreate an Idea (Submit for Review)
β
οΈ GET ββ/api/v1/ideas/meββββββββββββββββGet All Own Ideas
β
οΈ POST β/api/v1/paymentsββββββββββββββββCreate a Payment (Paid Ideas)
β
οΈ GET ββ/api/v1/paymentsββββββββββββββββGet All Payments (Admin)
β
οΈ GET ββ/api/v1/payments/meβββββββββββββGet Member Payments
β
οΈ GET ββ/api/v1/payments/:idββββββββββββGet Payment Details
β
οΈ PATCH β/api/v1/payments/:id/validateβββValidate a Payment
β
οΈ POST β/api/v1/commentsββββββββββββββββCreate Comment
β
οΈ GET ββ/api/v1/comments/:idββββββββββββGet Comment
β
οΈ DELETE β/api/v1/comments/:idβββββββββββDelete Comment
β
οΈ POST β/api/v1/categoriesββββββββββββββCreate Category (Admin)
β
οΈ GET ββ/api/v1/categoriesββββββββββββββGet All Categories
β
οΈ POST β/api/v1/votesβββββββββββββRegister Vote (Upvote/Downvote)
β
οΈ DELETE β/api/v1/votes/:idββββββββββRemove Vote
β
οΈ GET ββ/api/v1/votes/meβββββββββββGet Current Userβs Vote for an Idea
β
οΈ GET ββ/api/v1/ideas/sorted-by-votesβββ Get All Ideas Sorted by Votes
β
οΈ GET ββ/api/v1/votes/statsβββββββββ Get Upvote/Downvote Stats
MIT (do whatever you want to do π )