Skip to content
This repository has been archived by the owner on Nov 7, 2024. It is now read-only.

Commit final #130

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
Binary file added .DS_Store
Binary file not shown.
1 change: 1 addition & 0 deletions Procfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
web: vendor/bin/heroku-php-apache2 public/
73 changes: 57 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,63 @@
# Desafio técnico para desenvolvedores
Acesso do heroku: http://desafioateliwareluanzanatta.herokuapp.com

Construa uma nova aplicação, utilizando o framework de sua preferência (Ruby on Rails, Elixir Phoenix, Python Django ou Flask, NodeJS Sails, Java Spring, ASP.NET ou outro), a qual deverá conectar na API do GitHub e disponibilizar as seguintes funcionalidades:
Após acessar o link, faça login no canto superior direito:
email = [email protected] / senha = 12345678 ou faça o registro

- Botão para buscar e armazenar os repositórios destaques de 5 linguagens à sua escolha;
- Listar os repositórios encontrados;
- Visualizar os detalhes de cada repositório.
No menu favoritos no heroku já tem salvo o repositório do desafio e da aplicação(Para demonstração)
Mais explicações sobre a aplicação em si estão disponíveis ao logar

Alguns requisitos:

- Deve ser uma aplicação totalmente nova;
- A solução deve estar em um repositório público do GitHub;
- A aplicação deve armazenar as informações encontradas;
- Utilizar PostgreSQL, MySQL ou SQL Server;
- O deploy deve ser realizado, preferencialmente, no Heroku, AWS ou no Azure;
- A aplicação precisa ter testes automatizados;
- Preferenciamente dockerizar a aplicação;
- Por favor atualizar o readme da aplicação com passo a passo com instrução para subir o ambiente.

Quando terminar, faça um Pull Request neste repo e avise-nos por email.
Passo a Passo para subir o ambiente.

**IMPORTANTE:** se você não conseguir finalizar o teste, por favor nos diga o motivo e descreva quais foram as suas dificuldades. Você pode também sugerir uma outra abordagem para avaliarmos seus skills técnicos, vender seu peixe, mostrar-nos do que é capaz.

1 - Instalar o docker na maquina
https://www.docker.com

2 - Instalar o laravel
https://laravel.com/docs/9.x#getting-started-on-macos

- curl -s "https://laravel.build/example-app" | bash

3 - Instalar o MySQL

- brew install mysql

3 - Instalar um gerenciador para o banco(Opcional)

- instalei o DBeaver por já ter utilizado e ter facilidade na utilização, mas pode ser qualquer um, desde que tenha suporte para MySQL.
No heroku está sendo utilizado o PostgreSQL

- brew install dbeaver-community

4 - Abrir o dbeaver e criar uma nova conexão(localhost)

5 - Baixar os arquivos da aplicação que estão no Github

6 - Abrir a pasta de criação da raiz laravel, "example-app" é o nome default

7 - Colocar todos os arquivos baixado dentro da pasta

8 - Iniciar o docker

9 - Levantar a aplicação

- cd example-app

- ./vendor/bin/sail up

10 - Criar as tabelas do banco

- utilizando o vscode instale a extensão do docker

- clique nela, já instalada, e acesse a opção CONTAINERS / example-pp

- Clique com o botão direito em "sail" e de depois em "Attach Shell

- No terminal aberto digite "php artisan migrate"

10 - Abra o navegador e digite http://localhost

11 - No canto direito superior clique em login e faça login: email = [email protected] / senha = 12345678 ou faça o registro

FIM
Binary file added app/.DS_Store
Binary file not shown.
32 changes: 32 additions & 0 deletions app/Console/Kernel.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')->hourly();
}

/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');

require base_path('routes/console.php');
}
}
50 changes: 50 additions & 0 deletions app/Exceptions/Handler.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

namespace App\Exceptions;

use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;

class Handler extends ExceptionHandler
{
/**
* A list of exception types with their corresponding custom log levels.
*
* @var array<class-string<\Throwable>, \Psr\Log\LogLevel::*>
*/
protected $levels = [
//
];

/**
* A list of the exception types that are not reported.
*
* @var array<int, class-string<\Throwable>>
*/
protected $dontReport = [
//
];

/**
* A list of the inputs that are never flashed for validation exceptions.
*
* @var array<int, string>
*/
protected $dontFlash = [
'current_password',
'password',
'password_confirmation',
];

/**
* Register the exception handling callbacks for the application.
*
* @return void
*/
public function register()
{
$this->reportable(function (Throwable $e) {
//
});
}
}
34 changes: 34 additions & 0 deletions app/Http/Controllers/AddFavController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

namespace App\Http\Controllers;

use App\Models\Apifav;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Http;

class AddFavController extends Controller
{
public function index(){
$lista = Apifav::all();
//dd($lista);
return view('fav.index', ['lista_fav'=>$lista]);
}

public function store(Request $request){
$id3 = $request->input('dadosfav');
$response = Http::get('https://api.github.com/repos/'.$id3)->json();
$collection = collect($response);
$userId = $collection -> collect('full_name', 'name', 'description','html_url', 'language', 'created_at', 'updated_at', 'visibility');
//dd($userId);
Apifav::create($userId->all());
return redirect()->route('apifav.index');
}

public function destroy($id)
{
$apifav = Apifav::findOrFail($id);
$apifav->delete();
return redirect()->route('apifav.index');
}
}
38 changes: 38 additions & 0 deletions app/Http/Controllers/ApiController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;

class ApiController extends Controller
{
public function index(){
return view('apis.index');
}

public function listar(Request $request){
//$id = "microsoft";
$id = $request->input('id');
//dump($id);
$response = Http::get('https://api.github.com/search/repositories?q=language:'.$id.'&sort=stars&order=desc')->json('items');
$collection = collect($response);
$userId = $collection -> collect('language','full_name', 'description','html_url');
//dump($userId);
return view('apis.listar', [
'userIds' => $userId,
]);
}

public function listar2(Request $request){
$id2 = $request->input('id2');
$response = Http::get('https://api.github.com/users/'.$id2.'/repos')->json();
$collection = collect($response);
$userId = $collection -> collect('id','full_name', 'description','html_url');
//dump($userId);
return view('apis.listar2', [
'userIds' => $userId,
]);
}
}

54 changes: 54 additions & 0 deletions app/Http/Controllers/Auth/AuthenticatedSessionController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AuthenticatedSessionController extends Controller
{
/**
* Display the login view.
*
* @return \Illuminate\View\View
*/
public function create()
{
return view('auth.login');
}

/**
* Handle an incoming authentication request.
*
* @param \App\Http\Requests\Auth\LoginRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(LoginRequest $request)
{
$request->authenticate();

$request->session()->regenerate();

return redirect()->intended(RouteServiceProvider::HOME);
}

/**
* Destroy an authenticated session.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Request $request)
{
Auth::guard('web')->logout();

$request->session()->invalidate();

$request->session()->regenerateToken();

return redirect('/');
}
}
44 changes: 44 additions & 0 deletions app/Http/Controllers/Auth/ConfirmablePasswordController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;

class ConfirmablePasswordController extends Controller
{
/**
* Show the confirm password view.
*
* @return \Illuminate\View\View
*/
public function show()
{
return view('auth.confirm-password');
}

/**
* Confirm the user's password.
*
* @param \Illuminate\Http\Request $request
* @return mixed
*/
public function store(Request $request)
{
if (! Auth::guard('web')->validate([
'email' => $request->user()->email,
'password' => $request->password,
])) {
throw ValidationException::withMessages([
'password' => __('auth.password'),
]);
}

$request->session()->put('auth.password_confirmed_at', time());

return redirect()->intended(RouteServiceProvider::HOME);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;

class EmailVerificationNotificationController extends Controller
{
/**
* Send a new email verification notification.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(Request $request)
{
if ($request->user()->hasVerifiedEmail()) {
return redirect()->intended(RouteServiceProvider::HOME);
}

$request->user()->sendEmailVerificationNotification();

return back()->with('status', 'verification-link-sent');
}
}
23 changes: 23 additions & 0 deletions app/Http/Controllers/Auth/EmailVerificationPromptController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;

class EmailVerificationPromptController extends Controller
{
/**
* Display the email verification prompt.
*
* @param \Illuminate\Http\Request $request
* @return mixed
*/
public function __invoke(Request $request)
{
return $request->user()->hasVerifiedEmail()
? redirect()->intended(RouteServiceProvider::HOME)
: view('auth.verify-email');
}
}
Loading