{"id":29133085,"url":"https://github.com/xriot45/devote-backend","last_synced_at":"2026-05-07T01:35:44.154Z","repository":{"id":301133501,"uuid":"1008266568","full_name":"xRiot45/devote-backend","owner":"xRiot45","description":"DeVote is a modern voting application based on Web3 technology designed to provide a transparent, secure, and non-manipulable voting system by utilizing smart contracts, blockchain, and hybrid architecture (on-chain + off-chain).","archived":false,"fork":false,"pushed_at":"2025-06-25T09:49:00.000Z","size":198,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-06-25T10:43:12.106Z","etag":null,"topics":["backend","mysql","nestjs","off-chain","rest-api","typeorm","typescript","web3"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xRiot45.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-25T09:28:00.000Z","updated_at":"2025-06-25T09:55:16.000Z","dependencies_parsed_at":"2025-06-25T10:43:14.316Z","dependency_job_id":"8b41084f-5646-4899-8265-713ad618854d","html_url":"https://github.com/xRiot45/devote-backend","commit_stats":null,"previous_names":["xriot45/devote-backend"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/xRiot45/devote-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xRiot45%2Fdevote-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xRiot45%2Fdevote-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xRiot45%2Fdevote-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xRiot45%2Fdevote-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xRiot45","download_url":"https://codeload.github.com/xRiot45/devote-backend/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xRiot45%2Fdevote-backend/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262727708,"owners_count":23354665,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","mysql","nestjs","off-chain","rest-api","typeorm","typescript","web3"],"created_at":"2025-06-30T07:01:57.818Z","updated_at":"2026-05-07T01:35:44.148Z","avatar_url":"https://github.com/xRiot45.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🗳️ Devote Backend\n\nDevote Backend is the server-side application for the Devote platform, a decentralized voting system built with **NestJS** and **MySQL**. It manages off-chain logic such as user authentication, session management, proposal creation, and interaction with Ethereum smart contracts for on-chain voting.\n\n## 🚀 Tech Stack\n\n- **Backend Framework**: [NestJS](https://nestjs.com/)\n- **Database**: [MySQL](https://www.mysql.com/)\n- **Blockchain**: [Ethereum](https://ethereum.org/) (via [Hardhat](https://hardhat.org/))\n- **Smart Contracts**: Written in Solidity\n- **Authentication**: JWT \u0026 MetaMask (wallet-based)\n- **Language**: TypeScript\n\n---\n\n## ✨ Key Features\n\n- ✅ **User Authentication**\n    - Login with MetaMask wallet signature\n    - JWT-based session management\n\n- ✅ **Proposal Management**\n    - Create, read, update, delete proposals via REST API\n    - Role-based access for managing proposals\n\n- ✅ **On-Chain Voting**\n    - Blockchain interaction using `ethers.js` and Hardhat\n    - Only the voting action is recorded on-chain (Ethereum)\n\n- ✅ **Modular Codebase**\n    - Organized using NestJS modules for scalability and maintainability\n\n---\n\n## 🧑‍💻 Getting Started\n\n### Prerequisites\n\n- Node.js v18+\n- MySQL\n- (Optional for blockchain dev) Hardhat + Ethereum wallet (e.g., MetaMask)\n\n### Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/xRiot45/devote-backend\ncd devote-backend\n\n# Install dependencies\nnpm install\n\n# Edit the .env file with your database and JWT config\n\n# Run the application\nnpm run start:dev\n```\n\n---\n\n## 🔐 Environment Variables\n\nCreate a `.env` file in the root directory with the following configuration:\n\n```env\nAPP_NAME='devote-backend'\nAPP_PORT=3001\nAPP_ENV=development\nAPP_DEBUG=true\nAPP_URL=http://localhost\nAPP_TIMEZONE=UTC\n\nAPP_LOCALE=en\nAPP_FALLBACK_LOCALE=\nAPP_FAKER_LOCALE=\n\nAPP_MAINTENANCE_DRIVER=\nAPP_MAINTENANCE_STORE=\n\nBCRYPT_ROUNDS=10\n\nLOG_CHANNEL=\nLOG_STACK=\nLOG_DEPRECATIONS_CHANNEL=\nLOG_LEVEL=\n\nDB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=\nDB_DATABASE=\nDB_USERNAME=\nDB_PASSWORD=\nDB_SYNCHRONIZE=true\n\nSESSION_DRIVER=\nSESSION_LIFETIME=\nSESSION_ENCRYPT=\nSESSION_PATH=\nSESSION_DOMAIN=\n\nBROADCAST_CONNECTION=\nFILESYSTEM_DISK=\nQUEUE_CONNECTION=\n\nCACHE_STORE=\n# CACHE_PREFIX=\n\nMEMCACHED_HOST=\n\nREDIS_CLIENT=\nREDIS_HOST=\nREDIS_PASSWORD=\nREDIS_PORT=\n\nMAIL_MAILER=\nMAIL_SCHEME=\nMAIL_HOST=\nMAIL_PORT=\nMAIL_USERNAME=\nMAIL_PASSWORD=\nMAIL_FROM_ADDRESS=\nMAIL_FROM_NAME=\n\nAWS_ACCESS_KEY_ID=\nAWS_SECRET_ACCESS_KEY=\nAWS_DEFAULT_REGION=\nAWS_BUCKET=\nAWS_USE_PATH_STYLE_ENDPOINT=\n\nJWT_ACCESS_TOKEN_SECRET=\u003cyour_jwt_access_token_secret\u003e\nJWT_REFRESH_TOKEN_SECRET=\u003cyour_jwt_refresh_token_secret\u003e\n\n\nRPC_URL=http://127.0.0.1:8545\nCONTRACT_ADDRESS=\u003cyour_contract_address\u003e\n```\n\n---\n\n## 📦 API Endpoints (Overview)\n\n| Method | Endpoint                                     | Description                         |\n| ------ | -------------------------------------------- | ----------------------------------- |\n| GET    | `/api/users`                                 | Get all users                       |\n| GET    | `/api/users/me`                              | Get current authenticated user      |\n| POST   | `/api/auth/wallet`                           | Authenticate using wallet signature |\n| GET    | `/api/auth/wallet/check`                     | Check wallet authentication status  |\n| GET    | `/api/proposals`                             | List all proposals                  |\n| GET    | `/api/proposals/:proposalId`                 | Get proposal details                |\n| POST   | `/api/proposals`                             | Create a new proposal               |\n| PATCH  | `/api/proposals/:proposalId`                 | Update an existing proposal         |\n| DELETE | `/api/proposals/:proposalId`                 | Delete a proposal                   |\n| PATCH  | `/api/proposals/:proposalId/reorder-options` | Reorder voting options              |\n| PUT    | `/api/proposals/:proposalId/status`          | Update proposal status              |\n| GET    | `/api/voting-sessions`                       | List all voting sessions            |\n| POST   | `/api/proposal-votes`                        | Submit a vote                       |\n| GET    | `/api/proposal-votes/:proposalId/has-voted`  | Check if user has voted             |\n| GET    | `/api/voting-results`                        | Get voting results                  |\n| GET    | `/api/voting-results/:proposalId`            | Get result for a specific proposal  |\n| GET    | `/api/dashboard/summary`                     | Get dashboard summary info          |\n\n---\n\n## 📘 Smart Contract Integration\n\n- Interactions are done using `ethers.js` and integrated in the `vote` module.\n- Only **voting** is performed on-chain.\n- Proposals and user sessions are managed off-chain.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxriot45%2Fdevote-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxriot45%2Fdevote-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxriot45%2Fdevote-backend/lists"}