DownloadAPL nextED aptitude test
The Goal
Create a small sample application using common APL tools & languages. The application will need to import a large CSV file (100k records) into a queue, where a background worker will process each individual record.
Requirements
-
Use a public Git repository
-
Set up a Homestead & VirtualBox VM environment for the application
-
Use the native Laravel framework as much as possible (Models, Routes, Config, Storage, DB)
-
Use Laravel Queue (your choice of queue)
-
Use MySQL as the destination database
- Create a DB migration to setup a Users table
- Use the native Laravel timestamps
- Use the SoftDelete feature
-
Write a script to create a CSV file with 100k records containing a list of users
- Names, emails, passwords and phone numbers (can be fully randomized)
- Include a ?deleted? column, with a few records having a value set
-
Create a CSV file importer, that will accept the generated CSV file and insert the records into the Queue
-
Create a Console Command that processes the records in the queue, and update the database with the data.
-
Setup PHP Unit / Functional Tests on the importer and queue worker.
Requirements
-
_Homestead_, _Valet_ or any other local setup.
-
Laravel 8.x
Local setup
-
Clone this repository
-
Download and install `Homestead` and `VirtualBox`
-
Install the dependencies from the project folder
composer install
-
Generate the Homestead configuration file by running the
php vendor/bin/homestead make
or by copying the attached _Homestead.yaml_ file to your project directory and run
vagrant up
-
In order to connect to your virtual machine, run:
vagrant ssh
-
Go to your project folder listed in the Homestead.yaml file and create the `.env` file, than update the database connection data
copy .env.example .env
php artisan migrate
php artisan queue:table
Application Usage
Generate users to file
This application can generate users in csv , json format.
To generate a list of users, use the following command:
php artisan generate:users {format} {count=10} {filename=users}
This command will generate a users.csv file containing 100000 users to the default storage directory.
Currently there are two formats supported: json and csv. For more info, see the app/Extension/HandleItemsList and app/Extension/HandleItemsList folders for more info about further format implementations.
__Example:__
This will generate a users.csv file with 100000 user data php artisan generate:users csv 100000
This command will generate a users.json file with 100000 users data. php artisan generate:users json 100000
Load file into users table
Start the workers:
php artisan queue:work --queue=users
To load a file into the users table, run the below command
php artisan load:users {format=csv} {filename=users}
__Example:__
This will load the users.csv file into the users table php artisan load:users csv users
This will load the users.json file into the users table php artisan generate:users json 100000
Testing the app
In order to properly run tests, the .env.testing file has to be completed.
After the above is completed, run:
php artisan test
Author
Andras Zoltan Gyarfas - Zoli |