Welcome to fluent, an app where you can practice learning a language with the spaced reptition revision technique.
fluent Api
is the backend for fluent
. To see fluent
in action, check out fluent.
The fluent
frontend can be found at: fluent-client
fluent
supports the creation of your own user account. If you'd like to see it in action before signing up, use the demo account details below.
- username: admin
- password: pass
Spaced repetition is a learning technique which exploits the psychological spacing effect. Within fluent
, this means that words that you translate correctly will pop up with increasingly less frequency with consecutive correct answers. Conversely, get a word wrong and that word will begin to pop up more frequently.
- Node and Express
- Authentication via JWT
- RESTful Api
- Testing
- Supertest (integration)
- Mocha and Chai (unit)
- Database
- Postgres
- Knex.js - SQL wrapper
Deployed via Heroku
- Postgres v8.5.1
- Node v15.11.0
Clone this repository to your local machine
git clone https://github.com/trevorjalt/fluent-api fluent-api
Change directory into the cloned repository
cd fluent-api
Make a fresh start of the git history for this project
rm -rf .git && git init
Install the node dependencies
npm install
Start the Postgres server
pg_ctl start
Create the development user
createuser -Pw --interactive
Type kakarot
for the name of the role
to add
Select y
when asked if the user should be a super user
Press return
(enter) for no password
Create the development databases
createdb -U kakarot fluent && createdb -U kakarot fluent-test
Create a .env
file in the project root, and include the following:
NODE_ENV=development
PORT=8000
TZ='UTC'
MIGRATION_DB_HOST=127.0.0.1
MIGRATION_DB_PORT=5432
MIGRATION_DB_NAME=fluent-test
MIGRATION_DB_USER=kakarot
MIGRATION_DB_PASS=
DB_URL="postgresql://kakarot@localhost/fluent"
TEST_DB_URL="postgresql://kakarot@localhost/fluent-test"
JWT_SECRET="spaced-repetition-jwt-secret"
Run the migrations for the development test database
npm run migrate:test
Update the following in the .env
MIGRATION_DB_NAME=fluent
Run the migrations for the development database
npm run migrate
Seed the development database
psql -U kakarot -d fluent -f ./seeds/seed.tables.sql
Run the fluent
tests
npm t
Start the application
npm start
Start nodemon for the application
npm run dev
- endpoints
- /api/user
- /api/auth
- /api/language
- /api/language/head
- /api/language/guess
fluent
is supported by JWT authentication. A valid username
and password
must be posted to the /api/auth/token/ endpoint. This will return a bearer token that must be included in the header for all protected endpoints. To create a valid user, see /api/user/
POST
request body
requires:
{
name: '',
username: '',
password: ''
}
POST
request body
requires:
{
username: '',
password: ''
}
GET
Header
must include a JWT Token
request body
requires
{
language_id: [number],
user_id: [number]
}
GET
Header
must include a JWT Token
request body
requires
{
language_id: [number]
}
POST
Header
must include a JWT Token
request body
requires:
{
guess: ''
}