mirror of https://github.com/MieuxVoter/mvapi
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.2 KiB
85 lines
2.2 KiB
# API for Mieux Voter
|
|
|
|
This API allows you to create elections, vote and obtain results with [majority judgment](https://en.wikipedia.org/wiki/Majority_judgment).
|
|
|
|
You can use our server at [api.mieuxvoter.fr/](api.mieuxvoter.fr/).
|
|
|
|
Since our API relies on OpenAPI, documentation is automatically generated and it is available at [api.mieuxvoter.fr/redoc](api.mieuxvoter.fr/redoc) or [api.mieuxvoter.fr/docs](api.mieuxvoter.fr/docs).
|
|
|
|
|
|
## Installation with Docker
|
|
|
|
Copy the `.env` into `.env.local` with your own settings.
|
|
|
|
Then launch the dockers with:
|
|
|
|
`docker compose --profile all --env-file .env.local up -d`
|
|
|
|
Note that you can use the `profile` called `dashboard` if you only need Metabase, `image` if you only need to store images, or `backup` for restic.
|
|
|
|
You certainly want to apply databases migrations with:
|
|
|
|
`docker/migrate.sh`
|
|
|
|
|
|
## Run the tests
|
|
|
|
`docker/test.sh`
|
|
|
|
|
|
|
|
## Local development
|
|
|
|
1. Install [postgresql](https://www.postgresql.org/download/).
|
|
|
|
2. Install python 3.11.
|
|
|
|
3. Create a new virtual environment and activate it:
|
|
|
|
|
|
```bash
|
|
venv .venv
|
|
source .venv/bin/activate
|
|
```
|
|
|
|
4. Install dependencies:
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
pip install -r requirements-dev.txt
|
|
```
|
|
|
|
5. Copy `.env` into `.env.local` and edit environment variables
|
|
|
|
|
|
6. Start the server:
|
|
|
|
```
|
|
uvicorn app.main:app --reload --env-file .env.local
|
|
```
|
|
|
|
7. Visit the generated documentation:
|
|
|
|
```
|
|
http://127.0.0.1:8000/redoc
|
|
```
|
|
|
|
If you need to alter the database, you can create new migrations using [alembic](https://alembic.sqlalchemy.org/en/latest/index.html).
|
|
|
|
|
|
## TODO
|
|
|
|
POST elections: creation election
|
|
--> return a JWT token for administration
|
|
--> and the election link
|
|
--> and eventually a series of JWT tokens for voting
|
|
PUT elections/[election-id] get all data about a specific election. Might need a JWT token
|
|
--> might return new invites
|
|
GET grades/[election-id]: only get the grades related to an election. Might need a JWT token
|
|
GET candidates/[election-id]: only get the candidates related to an election. Might need a JWT token
|
|
GET votes/[election-id]: only get the votes. Might need a JWT token
|
|
POST elections/[election-id]/votes: to vote. Might need a JWT token
|
|
|
|
|
|
GET /metrics a few metrics, among them the number of elections, number of voters and number of votes.
|