Skip to content

Development #59

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 19 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
39606b3
Enviando a base de desenvolvimento da api
bladellano Mar 25, 2023
c45eb2a
[CODE-001] Criando controllers Owner; Investment e adicionando rotas
bladellano Mar 25, 2023
744b39e
[CODE-002] Criando models; enums e migrations
bladellano Mar 25, 2023
ba81b10
[CODE-003] Criando factories e alterando o arquivo DatabaseSeeder.php
bladellano Mar 25, 2023
cea0f2c
[CODE-004] Implementando métodos em OwnerController e add rota p/ lis…
bladellano Mar 25, 2023
2493244
[CODE-005] Relação de ações realizadas:
bladellano Mar 25, 2023
aa367bc
[CODE-006] Atualizando README e Makefile
bladellano Mar 25, 2023
51773bf
[CODE-007] Add cron para ganhos; removendo enpoint 'Investment Update…
bladellano Mar 25, 2023
9ac582c
[CODE-008] Add HttpFoudantion p/ os Http Responses; no OwnerControlle…
bladellano Mar 26, 2023
e65924c
[CODE-009] Ajustando a lógica no withdraw() para validar o campo 'dat…
bladellano Mar 26, 2023
62dced3
[CODE-010] Adicionando tests para OwnerController
bladellano Mar 26, 2023
a978523
[CODE-011] Adicionando tests para InvestmentController e alterando ro…
bladellano Mar 26, 2023
fd97b50
[CODE-012] Atualizando README
bladellano Mar 26, 2023
4846fc0
[CODE-013] Iniciando documentação Swagger e atualizando README
bladellano Mar 26, 2023
759db8c
[CODE-014] Documentação Swagger de InvestmentController
bladellano Mar 26, 2023
d748d42
[CODE-015] Subindo arquivo coderockr.json para utilizar no Insomnia
bladellano Mar 26, 2023
ac00023
[CODE-016] Corrigindo taxa de ganho e enviando tests unit InvestmentC…
bladellano Mar 26, 2023
4b681a3
[CODE-017] Atualizando README
bladellano Mar 26, 2023
fd534d6
[CODE-018] Atualizando README
bladellano Mar 26, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
FROM php:8.1.0-apache
WORKDIR /var/www/html

# Mod Rewrite
RUN a2enmod rewrite

# Linux Library
RUN apt-get update -y && apt-get install -y \
libicu-dev \
unzip zip \
zlib1g-dev \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
cron \
nano

RUN apt-get clean

ENV APACHE_DOCUMENT_ROOT=/var/www/html/public
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

# Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

RUN apt-get install -y libpq-dev \
&& docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
&& docker-php-ext-install pdo pdo_pgsql pgsql pdo_mysql

# Cron
COPY cronfile /etc/cron.d/apply-gains
RUN chmod 0644 /etc/cron.d/apply-gains
RUN crontab /etc/cron.d/apply-gains
RUN touch /var/log/cron.log

# Redis
RUN pecl install -o -f redis \
&& rm -rf /tmp/pear \
&& docker-php-ext-enable redis

RUN docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd
57 changes: 57 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
include laravel-app/.env.example

install:
@make cp
@make down
@make build
@make up
@make composer-update
@make perm-storage
@make data
@make cron-start
@make msg

#Passos de instalação...
cp:
cd laravel-app/ && rm .env -f && cp .env.example .env && cd ..
down:
docker-compose down --remove-orphans
build:
docker-compose build --no-cache --force-rm
stop:
docker-compose stop
up:
docker-compose up -d
composer-update:
docker exec coderockr-app bash -c "composer update && php artisan key:generate"
perm-storage:
docker exec -t coderockr-app bash -c 'chown -R www-data:www-data /var/www/html/storage'
data:
docker exec coderockr-app bash -c "php artisan migrate"
docker exec coderockr-app bash -c "php artisan db:seed"
cron-start:
docker exec -t coderockr-app bash -c "/etc/init.d/cron start"

#Lista de comandos...
in:
docker exec -it coderockr-app bash
predis:
docker exec -it predis bash
purge:
docker-compose down --rmi all
queue:
docker exec -t coderockr-app bash -c "php artisan queue:work"
test:
docker exec -t coderockr-app bash -c "php artisan test"
schedule-run:
docker exec -t coderockr-app bash -c "php artisan schedule:run"
cron-log:
docker exec -t coderockr-app bash -c "tail -f /var/log/cron.log"
cron-stop:
docker exec -t coderockr-app bash -c "/etc/init.d/cron stop"
msg:
@echo "########################################################################"
@echo "### Clique aqui para ver a api funcionando ${APP_URL}/api ###"
@echo "########################################################################"


133 changes: 67 additions & 66 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,88 +1,89 @@
# Back End Test Project <img src="https://coderockr.com/assets/images/coderockr.svg" align="right" height="50px" />

You should see this challenge as an opportunity to create an application following modern development best practices (given the stack of your choice), but also feel free to use your own architecture preferences (coding standards, code organization, third-party libraries, etc). It’s perfectly fine to use vanilla code or any framework or libraries.
# Desafio Api de Investimento Coderockr

## Scope
Neste desafio deverás construir uma API para uma aplicação que armazena e gere investimentos, a mesma deverá ter as seguintes funcionalidades:
## Requerido
- [Docker](https://www.docker.com/)
- [Docker Composer](https://docs.docker.com/compose/)
- [Make](https://linuxhint.com/install-use-make-ubuntu/)

In this challenge you should build an API for an application that stores and manages investments, it should have the following features:
## 👩‍💻 Sobre o desafio
Nesta aplicação foi desenvolvido com a maior parte dos recursos que o próprio framework já fornece, o único pacote que utilizei foi o L5-Swagger para criar uma documentação básica da api.

1. __Creation__ of an investment with an owner, a creation date and an amount.
1. The creation date of an investment can be today or a date in the past.
2. An investment should not be or become negative.
2. __View__ of an investment with its initial amount and expected balance.
1. Expected balance should be the sum of the invested amount and the [gains][].
2. If an investment was already withdrawn then the balance must reflect the gains of that investment
3. __Withdrawal__ of a investment.
1. The withdraw will always be the sum of the initial amount and its gains,
partial withdrawn is not supported.
2. Withdrawals can happen in the past or today, but can't happen before the investment creation or the future.
3. [Taxes][taxes] need to be applied to the withdrawals before showing the final value.
4. __List__ of a person's investments
1. This list should have pagination.
No container da aplicação adicionei um crontab, de tempos em tempos o serviço é executado aplicando ganhos em todos os investimentos que estiverem com status ativo. Isso acontece logo após o container estiver levantado, de 5 mim em 5 mim são analisados/aplicados os ganhos conforme a regra de negócio.

__NOTE:__ the implementation of an interface will not be evaluated.
A partir da rota `[GET]/api/owners` com o retorno da consulta, vocês já terão insumos para prosseguir com os testes em todas as rodas, como: Criar, Consultar, Sacar, Remove `owners` e `investments`

### Gain Calculation
## Executar localmente

The investment will pay 0.52% every month in the same day of the investment creation.
Clonar o projeto
```bash
git clone https://github.com/bladellano/backend-test.git --branch development
```

Given that the gain is paid every month, it should be treated as [compound gain][], which means that every new period (month) the amount gained will become part of the investment balance for the next payment.
Vá para o diretório do projeto
```bash
cd backend-test
```

### Taxation
## Opções para construção do projeto
### Opção 01 - com Makefile:

When money is withdrawn, tax is triggered. Taxes apply only to the profit/gain portion of the money withdrawn. For example, if the initial investment was 1000.00, the current balance is 1200.00, then the taxes will be applied to the 200.00.
```bash
make install
```

The tax percentage changes according to the age of the investment:
* If it is less than one year old, the percentage will be 22.5% (tax = 45.00).
* If it is between one and two years old, the percentage will be 18.5% (tax = 37.00).
* If older than two years, the percentage will be 15% (tax = 30.00).
### Opção 02 - sem Makefile:
```bash
cd laravel-app/ && rm .env -f && cp .env.example .env && cd ..

## Requirements
1. Create project using any technology of your preference. It’s perfectly OK to use vanilla code or any framework or libraries;
2. Although you can use as many dependencies as you want, you should manage them wisely;
3. It is not necessary to send the notification emails, however, the code required for that would be welcome;
4. The API must be documented in some way.
docker-compose up -d

## Deliverables
The project source code and dependencies should be made available in GitHub. Here are the steps you should follow:
1. Fork this repository to your GitHub account (create an account if you don't have one, you will need it working with us).
2. Create a "development" branch and commit the code to it. Do not push the code to the main branch.
3. Include a README file that describes:
- Special build instructions, if any
- List of third-party libraries used and short description of why/how they were used
- A link to the API documentation.
4. Once the work is complete, create a pull request from "development" into "main" and send us the link.
5. Avoid using huge commits hiding your progress. Feel free to work on a branch and use `git rebase` to adjust your commits before submitting the final version.
docker exec coderockr-app bash -c 'composer update && php artisan key:generate'

## Coding Standards
When working on the project be as clean and consistent as possible.
docker exec -t coderockr-app bash -c 'chown -R www-data:www-data /var/www/html/storage'

## Project Deadline
Ideally you'd finish the test project in 5 days. It shouldn't take you longer than a entire week.
docker exec coderockr-app bash -c 'php artisan migrate && php artisan db:seed'

## Quality Assurance
Use the following checklist to ensure high quality of the project.
docker exec -t coderockr-app bash -c '/etc/init.d/cron start'

### General
- First of all, the application should run without errors.
- Are all requirements set above met?
- Is coding style consistent?
- The API is well documented?
- The API has unit tests?
```
Após executar todas essa etapas e o projeto já estiver criado, clique aqui para ver a aplicação funcionando http://127.0.0.1:8080/api

## Submission
1. A link to the Github repository.
2. Briefly describe how you decided on the tools that you used.
Na raíz do projeto existe uma colletion para importar no Insomnia `coderockr.json`

## Have Fun Coding 🤘
- This challenge description is intentionally vague in some aspects, but if you need assistance feel free to ask for help.
- If any of the seems out of your current level, you may skip it, but remember to tell us about it in the pull request.
# Comandos Make para acesso rápido

## Credits
#### Entrar no bash da aplicação
```bash
make in
```
#### Executar tests
```bash
make test
```
#### Execução programada
```bash
make schedule-run
```
#### Log da execução programada
```bash
make cron-log
```

#### Parar a execução programada
```bash
make cron-stop
```

# Documentação da API

Link [http://127.0.0.1:8080/api/doc](http://127.0.0.1:8080/api/doc)

# Desenvolvido por

Esta aplicação foi desenvolvida por [Caio Dellano Nunes da Silva.](https://dellanosites.com.br/)

[![linkedin](https://img.shields.io/badge/linkedin-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/bladellano/)

This coding challenge was inspired on [kinvoapp/kinvo-back-end-test](https://github.com/kinvoapp/kinvo-back-end-test/blob/2f17d713de739e309d17a1a74a82c3fd0e66d128/README.md)

[gains]: #gain-calculation
[taxes]: #taxation
[interest]: #interest-calculation
[compound gain]: https://www.investopedia.com/terms/g/gain.asp
1 change: 1 addition & 0 deletions coderockr.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"_type":"export","__export_format":4,"__export_date":"2023-03-26T16:08:10.225Z","__export_source":"insomnia.desktop.app:v2022.7.5","resources":[{"_id":"req_d38491e792ea47efb2b9df97d484473b","parentId":"fld_50cc14fa07fc40ef8917bcbb2a19320f","modified":1679846771869,"created":1679600820058,"url":"{{ _.URL_API }}/api/owners","name":"Owners All","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1679600820058,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"fld_50cc14fa07fc40ef8917bcbb2a19320f","parentId":"wrk_f1ba305e7b32415e94abc737062ca779","modified":1679602999469,"created":1679602999469,"name":"Owner","description":"","environment":{},"environmentPropertyOrder":null,"metaSortKey":-1679602999469,"_type":"request_group"},{"_id":"wrk_f1ba305e7b32415e94abc737062ca779","parentId":null,"modified":1679600816909,"created":1679600816909,"name":"Coderockr","description":"","scope":"collection","_type":"workspace"},{"_id":"req_4e7e36024bfd4a3cbf87d130a7b77f54","parentId":"fld_50cc14fa07fc40ef8917bcbb2a19320f","modified":1679846793272,"created":1679669836079,"url":"{{ _.URL_API }}/api/owners/98c660e0-90b4-4ddf-8543-2183380d1a10","name":"Owner Show","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1679562238887.0781,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_6d39aaca65144302acb4ec6a41cc2c57","parentId":"fld_50cc14fa07fc40ef8917bcbb2a19320f","modified":1679791958802,"created":1679670314407,"url":"{{ _.URL_API }}/api/owners/only-investments/98c660e0-90b4-4ddf-8543-2183380d1a10","name":"Owner Only List Investiments","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1679542948301.6172,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_220c262ad5b04aa6acedd300cc902c8d","parentId":"fld_50cc14fa07fc40ef8917bcbb2a19320f","modified":1679846806367,"created":1679669424637,"url":"{{ _.URL_API }}/api/owners/98c660e0-90b4-4ddf-8543-2183380d1a10","name":"Owner Delete","description":"","method":"DELETE","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1679523657716.1562,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_1787ee92664d422c88602e52414336d5","parentId":"fld_50cc14fa07fc40ef8917bcbb2a19320f","modified":1679846818548,"created":1679790325455,"url":"{{ _.URL_API }}/api/owners","name":"Owner Store","description":"","method":"POST","body":{},"parameters":[{"id":"pair_a9d4cc0610a34ae09c3bb076bad51106","name":"name","value":"Michael Desiato23","description":""},{"id":"pair_22984b0446e443cdbd945c23a4ace4d7","name":"email","value":"[email protected]","description":""}],"headers":[],"authentication":{},"metaSortKey":-1679523657666.1562,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_cde5174172454c3e9c813fc71840760d","parentId":"fld_b6534c728dde4e7fbdabacff359bcf9e","modified":1679751900219,"created":1679610197759,"url":"{{ _.URL_API }}/api/investments","name":"Investment All","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1679407914203.3906,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"fld_b6534c728dde4e7fbdabacff359bcf9e","parentId":"wrk_f1ba305e7b32415e94abc737062ca779","modified":1679602992967,"created":1679602992967,"name":"Investiment","description":"","environment":{},"environmentPropertyOrder":null,"metaSortKey":-1679602992967,"_type":"request_group"},{"_id":"req_0cec9541a65e424abb21faba6e7a763d","parentId":"fld_b6534c728dde4e7fbdabacff359bcf9e","modified":1679846831951,"created":1679602662827,"url":"{{ _.URL_API }}/api/investments/98c660e0-9f6d-4682-add2-e8f091cefcaa","name":"Investment Show","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1679369333032.4688,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_d784675eba2746a29e8c7822c0c3ff88","parentId":"fld_b6534c728dde4e7fbdabacff359bcf9e","modified":1679846844660,"created":1679613429080,"url":"{{ _.URL_API }}/api/investments/withdraw/98c660e0-9f6d-4682-add2-e8f091cefcaa","name":"Investment Withdraw","description":"","method":"POST","body":{},"parameters":[{"id":"pair_e23a43ebc4f946928375ff8c4a6c4cea","name":"withdrawal_date","value":"2023-03-10","description":""}],"headers":[],"authentication":{},"metaSortKey":-1679350042447.0078,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_38a51a752a644ffabcb20411e619affa","parentId":"fld_b6534c728dde4e7fbdabacff359bcf9e","modified":1679792113332,"created":1679665210268,"url":"{{ _.URL_API }}/api/investments","name":"Investment Store","description":"","method":"POST","body":{},"parameters":[{"id":"pair_a9d4cc0610a34ae09c3bb076bad51106","name":"investment_date","value":"2022-01-02","description":""},{"id":"pair_22984b0446e443cdbd945c23a4ace4d7","name":"invested_amount","value":"2200.15","description":""},{"id":"pair_155aa9f1ad474bcdb94087176bea411a","name":"owner_id","value":"98c6afc6-bfdb-4ef8-ab80-daa7dc8aa440","description":""},{"id":"pair_df70e1a0db8142ddb29eb6055dd820df","name":"status","value":"ACTIVE","description":"","disabled":true}],"headers":[],"authentication":{},"metaSortKey":-1679321106568.8164,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_24a265614b9e4210a2f8fb126c70d6f2","parentId":"fld_b6534c728dde4e7fbdabacff359bcf9e","modified":1679846859080,"created":1679791707005,"url":"{{ _.URL_API }}/api/investments/98c660e0-9f6d-4682-add2-e8f091cefcaa","name":"Investment Delete","description":"","method":"DELETE","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1679321106518.8164,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"env_e0bc675e49fb75487f7799b3a07c785c276f3981","parentId":"wrk_f1ba305e7b32415e94abc737062ca779","modified":1679747957181,"created":1679600816920,"name":"Base Environment","data":{"URL_API":"http://127.0.0.1:8080"},"dataPropertyOrder":{"&":["URL_API"]},"color":null,"isPrivate":false,"metaSortKey":1679600816920,"_type":"environment"},{"_id":"jar_e0bc675e49fb75487f7799b3a07c785c276f3981","parentId":"wrk_f1ba305e7b32415e94abc737062ca779","modified":1679665896843,"created":1679600816925,"name":"Default Jar","cookies":[{"key":"XSRF-TOKEN","value":"eyJpdiI6IjJlcEtTd3QrWG5qY3ZwWDVpamhjaGc9PSIsInZhbHVlIjoiT2kwWHEwbS9FNElGRmxPemZLZEh6bUpOVmtPUjR5VGtCTGdqQys3WCtEbHFBNlhhd0xzK1Q4dHFwSjNndVkzSnRpUEh5ZUg3NHJLMXExSjI3YVljemdmRDNBejFLMWs2ajlweTMxeUp1VlpXWXd2TXB3WmRISjNSWXQ1UkVvSXgiLCJtYWMiOiJmMDlmZjk1ZDE4ZjA4M2Y0MDA4ZTRhYmZkYjlhMzJjMTE3YzI5MWY1NjFlOWMzYjcwN2VlOWVkZDE4MDljZmIwIiwidGFnIjoiIn0%3D","expires":"2023-03-24T15:51:36.000Z","maxAge":7200,"domain":"127.0.0.1","path":"/","extensions":["samesite=lax"],"hostOnly":true,"creation":"2023-03-24T13:51:36.841Z","lastAccessed":"2023-03-24T13:51:36.841Z","id":"150278620466737"},{"key":"laravel_session","value":"eyJpdiI6Ik5QTkJXOU9yVjc2TVd1MXNVSHA1bUE9PSIsInZhbHVlIjoiTE9Sd3pOd3psM3pSRXJRSXZ2d1AvMWlROXV3cEVMWWtYVGJ2YTJjR3k2dVVZSU1qdVRLNGxFNVM1Qm8wZnlneDZJemlVZVVrVGMyRzY0V3pISytLMmp1SXJaSXZWMkdWRGlyS2dSMS9jQkhqT1U5b21RdjAwTVZrbHN2bjhGSnkiLCJtYWMiOiJiZDlmY2NhZDgxZDNmYmFjYmNjNDZmMjk0NTg4MTM2M2MyMmRiMTFmZDc1OWNhODM4ZGUwMjMxYzgyZWY1YWJhIiwidGFnIjoiIn0%3D","expires":"2023-03-24T15:51:36.000Z","maxAge":7200,"domain":"127.0.0.1","path":"/","httpOnly":true,"extensions":["samesite=lax"],"hostOnly":true,"creation":"2023-03-24T13:51:36.842Z","lastAccessed":"2023-03-24T13:51:36.842Z","id":"4669215471896093"}],"_type":"cookie_jar"},{"_id":"spc_ba1ea985779d43e688d1b2146bd751dd","parentId":"wrk_f1ba305e7b32415e94abc737062ca779","modified":1679600816910,"created":1679600816910,"fileName":"Coderockr","contents":"","contentType":"yaml","_type":"api_spec"}]}
2 changes: 2 additions & 0 deletions cronfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
* * * * * cd /var/www/html && /usr/local/bin/php artisan schedule:run >> /var/log/cron.log 2>&1

Loading