https://firecrackervocabulary.com
https://play.google.com/store/apps/details?id=com.emtiajium.firecracker.collaborative.vocab.practice
➜ Install Node 18.13.0 using nvm
➜ Install docker and docker-compose
➜ git clone git@github.com:emtiajium/vocabulary-flashcard-backend.git
➜ cd vocabulary-flashcard-backend
➜ npm install
➜ docker-compose up -d
➜ npm run create:env
➜ npm run migration:run
➜ npm run test
➜ npm run start:dev
➜ https://localhost:9006/rest/ielts-service/swagger
➜ PK_<table-name>_<column-name>
e.g.,
PK_Android_id
➜ FK_<referencing-table-name>_<referencing-column-name>_<referenced-table-name>_<referenced-column-name>
e.g.,
FK_Definition_vocabularyId_Vocabulary_id
➜ UQ_<table-name>_<column-name>_<second-column-name>_<third-column-name>
e.g.,
UQ_User_username
,UQ_LeitnerSystems_userId_vocabularyId
➜ npm run migration:generate -n <file-name>
➜ Create an application at AWS Elastic Beanstalk
Set
Virtual machine key pair
(underSecurity
section)
Set the environment variables (under
Software
section)
➜ Create the database at AWS RDS
Carefully set VPC/Security groups
Follow this to connect to the Amazon RDS instance in a VPC
➜ Create a deployment pipeline at AWS CodePipeline
➜ Deploy!
➜ Read about enabling HTTPS with Let's Encrypt from here
1.52.1
: Sent current date's guessing game related date from the table avoiding random generation1.52.0
: API to get randomly chosen meanings (part of the guessing game)1.51.0
: Created a separate DB (Docker container) for the automated test withfsync=off
,synchronous_commit=off
andfull_page_writes=off
1.50.0
: Empty array when a vocab does not have a definition using the FILTER clause1.49.0
: Automated getting certificate to enable HTTPS after a new EC2 instance gets launched1.48.0
: Node 18 + Upgraded packages0.47.0
: Added@Post(/v1/users/active-users)
0.46.0
: Fake caching user to reduce DB hit during authentication0.45.0
: Added@Delete(/v1/users/self)
API0.44.0
: Set TypeORMeager
tofalse
0.43.0
: Removed cohort ID from the API response0.42.0
: Automated the linker words' relationship0.41.0
: Refactored@Post(/v1/leitner-systems/items/:box)
to filter return a single item when there are items that are supposed to have appeared in future0.40.0
: Refactored@Post(/v1/vocabularies/search)
to filter flashcard0.39.1
: Refactored@Post(/v1/cohorts)
to move all users' vocab to the requested cohort0.39.0
: Refactored@Put(/v1/cohorts/:name)
to move all users' vocab to the requested cohort0.38.1
: Refactored@Post(/v1/vocabularies/search)
: Trimmed the search keyword before starting searching0.38.0
: Refactored@Post(/v1/vocabularies/search)
to send only the required props0.37.0
: ReplacedCOUNT()
withEXISTS()
where applicable0.36.0
: Added@Get(/v1/vocabularies/words/:word)
0.35.0
: Refactored@Post(/v1/leitner-systems/items/:box)
to send an item that is not ready to appear to the user0.34.0
: Added validator@IsEqualToByConfig()
0.33.0
: Refactored@Post(/v1/users)
to send minimal data0.32.0
: Authenticated@Post(/v1/users)
0.31.0
: Verified token using the Google provided API0.30.0
: Allowed executing reporting related APIs only if the provided secret is matched0.29.0
: Automated the migration scripts generation following the naming strategy0.28.0
: Added test cases to validate the naming convention of the database keys (cont.0.25.0
)0.27.0
: Changed the type of the columncurrentBox
from the enum to the smallint0.26.0
: Cron job to ping the health-check endpoint using the EB post-deployment hook0.25.0
: Standardized the DB (primary, foreign, unique) keys0.24.0
: Extended the Elastic Beanstalk default nginx configuration0.23.1
: Added API to check if a vocabulary already exists0.23.0
: Prevented adding same vocabulary multiple times (within the same cohort)0.22.0
: Fixed the bug:cohortId
is now the foreign key in theVocabulary
table0.21.0
: Removed@Get(/v1/leitner-systems/exists/user/:vocabularyId)
+ Wrote missing test cases for 3 APIs0.20.0
: Introduced foreign keys at theLeitnerSystems
table0.19.0
: Refactored + Prevented updating a vocab by an intruder0.18.0
: Removed pinging to instance using all ENIs0.17.0
: Removed the environment variableNPM_USE_PRODUCTION
0.16.0
: Prevented deleting vocabulary by an intruder0.15.0
: CORS with specific origins0.14.0
: CI pipeline with GitHub actions0.13.0
: IntegratedTerminus
(NestJS provided health checks)0.12.0
: Interceptor to log the request headers0.11.1
: Capitalized all linker words0.11.0
: Advanced searching/filtering0.10.0
: Swagger0.9.1
: Refactored the API/v1/users/all
to apply ordering and send total number of users0.9.0
: HTTPS for the localhost0.8.0
: Introduced health check endpoint0.7.1
: Fixed import issue in the test files0.7.0
: Added APIs for reporting purpose0.6.3
: Auto setting ofisDraft
if a vocab has at least one definition0.6.2
: Dynamic vocab ordering0.6.1
: Added script to remove a leitner item for a user0.6.0
: Added functionality to remove definitions0.5.5
: Fixed the (TypeORM) relationship between Vocabulary and Definition + Ordered definitions by their creation time0.5.4
: Populated leitner box existence info0.5.3
: Applied ordering for the leitner items0.5.2
: Attached triggering time with Leitner box item0.5.1
: Attached Leitner box info within the response payload of the vocab search API0.5.0
: Leitner systems0.4.4
: Module for Android stuff0.4.3
: Ordered cohort members by their firstname (/v1/cohorts/self
)0.4.2
: Modified the cohort related APIs to accept usernames instead of user IDs0.4.1
: Added API for populating the new user with few vocabularies0.4.0
: Added authentication using JWT0.3.2
: Added validation for external links0.3.1
: Added vocabulary find/removal functionality0.3.0
: Added vocabulary creation/update functionality0.2.0
: Added cohort functionality0.1.0
: Added user functionality