{"id":16392541,"url":"https://github.com/miladsade96/plea","last_synced_at":"2026-04-09T23:01:43.472Z","repository":{"id":63461633,"uuid":"562396742","full_name":"miladsade96/plea","owner":"miladsade96","description":"Online Petition Platform","archived":false,"fork":false,"pushed_at":"2022-12-03T16:02:27.000Z","size":1265,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-22T22:29:04.158Z","etag":null,"topics":["celery","celerybeat","django","django-rest-framework","docker","docker-compose","petition","postgresql","python","python3","redis","rest-api","restful-api","signature-verification"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miladsade96.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-11-06T09:11:09.000Z","updated_at":"2022-11-29T04:42:30.000Z","dependencies_parsed_at":"2023-01-22T18:30:26.643Z","dependency_job_id":null,"html_url":"https://github.com/miladsade96/plea","commit_stats":null,"previous_names":["js-mechanic/plea","miladsade96/plea"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/miladsade96/plea","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miladsade96%2Fplea","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miladsade96%2Fplea/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miladsade96%2Fplea/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miladsade96%2Fplea/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miladsade96","download_url":"https://codeload.github.com/miladsade96/plea/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miladsade96%2Fplea/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267757334,"owners_count":24139681,"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","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["celery","celerybeat","django","django-rest-framework","docker","docker-compose","petition","postgresql","python","python3","redis","rest-api","restful-api","signature-verification"],"created_at":"2024-10-11T04:50:31.006Z","updated_at":"2026-04-09T23:01:43.367Z","avatar_url":"https://github.com/miladsade96.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# plea\n## Online Petition Platform API\n[![CodeFactor](https://www.codefactor.io/repository/github/everlookneversee/plea/badge)](https://www.codefactor.io/repository/github/everlookneversee/plea)\n![GitHub](https://img.shields.io/github/license/EverLookNeverSee/plea)\n![GitHub branch checks state](https://img.shields.io/github/checks-status/EverLookNeverSee/plea/main)\n![GitHub language count](https://img.shields.io/github/languages/count/EverLookNeverSee/plea)\n![GitHub top language](https://img.shields.io/github/languages/top/EverLookNeverSee/plea)\n![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/EverLookNeverSee/plea)\n![Lines of code](https://img.shields.io/tokei/lines/github/EverLookNeverSee/plea)\n![GitHub all releases](https://img.shields.io/github/downloads/EverLookNeverSee/plea/total)\n![GitHub issues](https://img.shields.io/github/issues-raw/EverLookNeverSee/plea)\n![GitHub pull requests](https://img.shields.io/github/issues-pr-raw/EverLookNeverSee/plea)\n![GitHub release (latest by date)](https://img.shields.io/github/v/release/EverLookNeverSee/plea)\n![GitHub contributors](https://img.shields.io/github/contributors/EverLookNeverSee/plea)\n![GitHub last commit](https://img.shields.io/github/last-commit/EverLookNeverSee/plea)\n\n---\n\n### Project dependencies:\nTech stack: Django, Django RestFramework, Celery, Celery Beat, Redis, PostgreSQL, Docker  \n[Project dependencies full list](requirements.txt)\n\n---\n\n### Development team:\n* Milad Sadeghi DM - EverLookNeverSee@GitHub\n* [List of contributors](https://github.com/EverLookNeverSee/plea/graphs/contributors)\n\n**This project is under active development.**\n\n---\n\n### Database models schema:\n![Database models schema](db_models_structure.png)\n\n\n---\n\n### Features based on database models:\n**Note: Users do not need to register if they are just wanted to be a signer.**\n* User:\n  * User account registration\n  * User activation using email\n  * Resend user activation email\n  * User info page which is accessible for user(not other users) and admin\n  * Change password\n  * Reset forgotten password\n  * Basic authentication\n  * Session authentication\n  * Token authentication\n  * JWT authentication\n  * Delete account by user\n  * Delete automatically inactive user accounts after one week by background processes\n  * Using private cache for user information\n\n* Petition:\n  * Creating petition by registered user(aka its owner)\n  * Change petition title, description, image, slug and goal by its owner or admin user\n  * Search petition by title, slug, description and owner\n  * Petition goal: the number of signatures if it has been reached, petition will be considered as a successful one\n  * Delete petition by its owner or admin user\n  * Send email automatically to petition recipient about petition success\n  * Send csv file attach to email to petition recipient that contains petition signers information\n  * Send email to petition signers (let_me_know=True) about petition success\n  * Using redis cache\n\n* Signature:\n  * Creating signature for a petition which is unverified by default\n  * Each signature has a unique email address\n  * Signature verification email\n  * Resend signature verification email\n  * let_me_know: If set to true, the system will email signer if the petition is successful\n  * is_anonymous: if set to true, signer private information such as firstname, lastname and email won't be shown\n  * Signature verification token will be expired after 3 hours\n  * Delete automatically unverified signatures after one week by background processes\n  * Using redis cache\n\n* Reason:\n  * Everyone can submit a reason for a petition(Why we need to sign this petition)\n  * Using redis cache\n\n* Vote:\n  * Everyone could either like or dislike reasons that are submitted on a petition\n  * Using redis cache\n\n---\n\n### Local run:\n1. Clone the repository on your local machine:\n```shell\ngit clone https://github.com/EverLookNeverSee/plea.git\n```\n2. Navigate to its root directory:\n```shell\ncd plea/\n```\n3. If you have installed redis server before on your local machine, stop it:\n```shell\nsudo /etc/init.d/redis-server stop\n```\n4. Running by docker compose:\n```shell\ndocker-compose up --build\n```\n5. Make migrations, migrate and create superuser:\n```shell\ndocker container exec -it plea_backend /bin/bash\npython manage.py makemigrations\npython manage.py migrate\npython manage.py createsuperuser\nexit\n```\n6. Manually activate the superuser:\n```text\nOpen db.sqlite3 file and replace 0 with 1 in is_active field then save it.\n```\n7. Add some fake data(user and petition) - Optional:\n```shell\ndocker container exec -it plea_backend /bin/bash\npython manage.py add_fake_petitions\nexit \n```\n8. Check out the project:\n```text\n1. API documentation: http://127.0.0.1:8000/swagger\n2. Smtp server for development: https://127.0.0.1:5000\n3. Admin panel: http://127.0.0.1:8000/admin\n```\n\n---\n\n### License:\nThis project is licensed under [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiladsade96%2Fplea","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiladsade96%2Fplea","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiladsade96%2Fplea/lists"}