# async_pg example ## This example illustrates - `tokio_postgres` - use of `tokio_pg_mapper` for postgres data mapping - `deadpool_postgres` for connection pooling - `dotenv` + `config` for configuration ## Instructions 1. Create database user ```shell createuser -P test_user ``` Enter a password of your choice. The following instructions assume you used `testing` as password. This step is **optional** and you can also use an existing database user for that. Just make sure to replace `test_user` by the database user of your choice in the following steps and change the `.env` file containing the configuration accordingly. 2. Create database ```shell createdb -O test_user testing_db ``` 3. Initialize database ```shell psql -f sql/schema.sql testing_db ``` This step can be repeated and clears the database as it drops and recreates the schema `testing` which is used within the database. 4. Create `.env` file: ```ini SERVER_ADDR=127.0.0.1:8080 PG.USER=test_user PG.PASSWORD=testing PG.HOST=127.0.0.1 PG.PORT=5432 PG.DBNAME=testing_db PG.POOL.MAX_SIZE=16 ``` 5. Run the server: ```shell cargo run ``` 6. Using a different terminal send an HTTP POST request to the running server: ```shell echo '{"email": "ferris@thecrab.com", "first_name": "ferris", "last_name": "crab", "username": "ferreal"}' | http -f --json --print h POST http://127.0.0.1:8080/users ``` **...or using curl...** ```shell curl -d '{"email": "ferris@thecrab.com", "first_name": "ferris", "last_name": "crab", "username": "ferreal"}' -H 'Content-Type: application/json' http://127.0.0.1:8080/users ``` A unique constraint exists for username, so sending this request twice will return an internal server error (HTTP 500).