Learning app. Generates math problems and tests your skills.
It works similar to an online judge. Problems are generated based on chosen topic.
Made with TypeScript, NestJS and React.
Example of how to set environment variables:
VITE_BASE_URL=http://localhost:3000 npm run dev
Example of how to deploy using Docker.
Setup database:
DATABASE_URL=postgresql://postgres:mypass@172.25.0.2:5432/learn_dev?schema=public
SECRET_KEY=abcdefghijkl
docker build --target db -t learn-db-setup .
docker run --rm --env DATABASE_URL=$DATABASE_URL --network=custom_network1 learn-db-setup
Run app:
docker build --target app -t learn-app .
docker run -dit -p 3007:3000 --env ALLOW_HOST=https://learn.chrisvilches.com --env DATABASE_URL=$DATABASE_URL --env SECRET_KEY=$SECRET_KEY --network=custom_network1 --name learn learn-app
Make sure to pass the PYTHON_CMD
(Python interpreter path) environment variable:
PYTHON_CMD=/usr/bin/python3 npm run test --prefix ./packages/problem-generator
For unit tests, run (on ./packages/webapp
):
npm run test
For integration tests, make sure Docker (at least version 24.0.7) is installed.
Compile the problem-generator
package:
npm run build --prefix ./packages/problem-generator/
Run:
npm run test:e2e --prefix ./packages/webapp/
Using tsx
for some reason doesn't inject dependencies correctly (they become undefined
and crashes).
This may be related to decorator related configurations when compiling and executing TS code. Since dependency injection uses reflection, decorators and metadata are necessary, and tsx
may be omitting that.