Skip to content

Commit 19c4b6a

Browse files
committed
First commit
0 parents  commit 19c4b6a

File tree

89 files changed

+12532
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+12532
-0
lines changed

.editorconfig

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
root = true
2+
3+
[*]
4+
charset = utf-8
5+
end_of_line = lf
6+
indent_size = 4
7+
indent_style = space
8+
insert_final_newline = true
9+
trim_trailing_whitespace = true
10+
11+
[*.md]
12+
trim_trailing_whitespace = false
13+
14+
[*.{yml,yaml}]
15+
indent_size = 2
16+
17+
[docker-compose.yml]
18+
indent_size = 4

.env.example

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
APP_NAME=Laravel
2+
APP_ENV=local
3+
APP_KEY=
4+
APP_DEBUG=true
5+
APP_URL=http://localhost
6+
7+
LOG_CHANNEL=stack
8+
LOG_DEPRECATIONS_CHANNEL=null
9+
LOG_LEVEL=debug
10+
11+
DB_CONNECTION=mysql
12+
DB_HOST=127.0.0.1
13+
DB_PORT=3306
14+
DB_DATABASE=laravel
15+
DB_USERNAME=root
16+
DB_PASSWORD=
17+
18+
BROADCAST_DRIVER=log
19+
CACHE_DRIVER=file
20+
FILESYSTEM_DISK=local
21+
QUEUE_CONNECTION=sync
22+
SESSION_DRIVER=file
23+
SESSION_LIFETIME=120
24+
25+
MEMCACHED_HOST=127.0.0.1
26+
27+
REDIS_HOST=127.0.0.1
28+
REDIS_PASSWORD=null
29+
REDIS_PORT=6379
30+
31+
MAIL_MAILER=smtp
32+
MAIL_HOST=mailpit
33+
MAIL_PORT=1025
34+
MAIL_USERNAME=null
35+
MAIL_PASSWORD=null
36+
MAIL_ENCRYPTION=null
37+
MAIL_FROM_ADDRESS="[email protected]"
38+
MAIL_FROM_NAME="${APP_NAME}"
39+
40+
AWS_ACCESS_KEY_ID=
41+
AWS_SECRET_ACCESS_KEY=
42+
AWS_DEFAULT_REGION=us-east-1
43+
AWS_BUCKET=
44+
AWS_USE_PATH_STYLE_ENDPOINT=false
45+
46+
PUSHER_APP_ID=
47+
PUSHER_APP_KEY=
48+
PUSHER_APP_SECRET=
49+
PUSHER_HOST=
50+
PUSHER_PORT=443
51+
PUSHER_SCHEME=https
52+
PUSHER_APP_CLUSTER=mt1
53+
54+
VITE_APP_NAME="${APP_NAME}"
55+
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
56+
VITE_PUSHER_HOST="${PUSHER_HOST}"
57+
VITE_PUSHER_PORT="${PUSHER_PORT}"
58+
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
59+
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

.eslintrc.cjs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module.exports = {
2+
root: true,
3+
env: { browser: true, es2020: true },
4+
extends: [
5+
'eslint:recommended',
6+
'plugin:@typescript-eslint/recommended',
7+
'plugin:react-hooks/recommended',
8+
],
9+
ignorePatterns: ['dist', '.eslintrc.cjs'],
10+
parser: '@typescript-eslint/parser',
11+
plugins: ['react-refresh'],
12+
rules: {
13+
'react-refresh/only-export-components': [
14+
'warn',
15+
{ allowConstantExport: true },
16+
],
17+
},
18+
}

.gitattributes

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
* text=auto eol=lf
2+
3+
*.blade.php diff=html
4+
*.css diff=css
5+
*.html diff=html
6+
*.md diff=markdown
7+
*.php diff=php
8+
9+
/.github export-ignore
10+
CHANGELOG.md export-ignore
11+
.styleci.yml export-ignore

.gitignore

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/.phpunit.cache
2+
/node_modules
3+
/public/build
4+
/public/hot
5+
/public/storage
6+
/storage/*.key
7+
/vendor
8+
.env
9+
.env.backup
10+
.env.production
11+
.phpunit.result.cache
12+
Homestead.json
13+
Homestead.yaml
14+
auth.json
15+
npm-debug.log
16+
yarn-error.log
17+
/.fleet
18+
/.idea
19+
/.vscode

.php-cs-fixer.cache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"php":"8.1.10","version":"3.22.0","indent":" ","lineEnding":"\n","rules":{"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"class_definition":{"inline_constructor_arguments":false,"space_before_parenthesis":true},"compact_nullable_typehint":true,"curly_braces_position":{"allow_single_line_empty_anonymous_classes":true},"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_braces":true,"no_blank_lines_after_class_opening":true,"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"none"},"return_type_declaration":true,"short_scalar_cast":true,"single_import_per_statement":{"group_to_single_imports":false},"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"on_multiline":"ensure_fully_multiline"},"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_spaces_inside_parenthesis":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_line_after_imports":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true},"hashes":{"app\\Http\\Controllers\\.null-ls_213948_TodoController.php":"cd22362ca2546349fc0574ebb8884aa5","app\\Http\\Controllers\\.null-ls_845393_TodoController.php":"9175c5ee98ca8acbeeaa9c3a69d14ca7","app\\Http\\Controllers\\.null-ls_470081_TodoController.php":"94a830ffe2b6d86836a958b29644b323","app\\Http\\Controllers\\.null-ls_575389_TodoController.php":"4c3775412ff1b55719412e2569ce05bf","app\\Http\\Controllers\\.null-ls_142901_TodoController.php":"c20ce2dd2bc2cf45f42b112de02d8d5c","app\\Http\\Controllers\\.null-ls_706741_TodoController.php":"96daadbbc3f290154c0f7114a9801d91"}}

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# laravel-react-todo
2+
3+
A pratical example of a ToDo monolithic application with Laravel (API) and React

app/Console/Kernel.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
namespace App\Console;
4+
5+
use Illuminate\Console\Scheduling\Schedule;
6+
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
7+
8+
class Kernel extends ConsoleKernel
9+
{
10+
/**
11+
* Define the application's command schedule.
12+
*/
13+
protected function schedule(Schedule $schedule): void
14+
{
15+
// $schedule->command('inspire')->hourly();
16+
}
17+
18+
/**
19+
* Register the commands for the application.
20+
*/
21+
protected function commands(): void
22+
{
23+
$this->load(__DIR__.'/Commands');
24+
25+
require base_path('routes/console.php');
26+
}
27+
}

app/Exceptions/Handler.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace App\Exceptions;
4+
5+
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
6+
use Throwable;
7+
8+
class Handler extends ExceptionHandler
9+
{
10+
/**
11+
* The list of the inputs that are never flashed to the session on validation exceptions.
12+
*
13+
* @var array<int, string>
14+
*/
15+
protected $dontFlash = [
16+
'current_password',
17+
'password',
18+
'password_confirmation',
19+
];
20+
21+
/**
22+
* Register the exception handling callbacks for the application.
23+
*/
24+
public function register(): void
25+
{
26+
$this->reportable(function (Throwable $e) {
27+
//
28+
});
29+
}
30+
}

app/Http/Controllers/Controller.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
6+
use Illuminate\Foundation\Validation\ValidatesRequests;
7+
use Illuminate\Routing\Controller as BaseController;
8+
9+
class Controller extends BaseController
10+
{
11+
use AuthorizesRequests, ValidatesRequests;
12+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Http\Resources\TodoCollection;
6+
use App\Models\Todo;
7+
use Illuminate\Http\JsonResponse;
8+
use Illuminate\Http\Request;
9+
10+
class TodoController extends Controller
11+
{
12+
public function index(): TodoCollection
13+
{
14+
return new TodoCollection(
15+
Todo::query()->latest()->get()
16+
);
17+
}
18+
19+
public function update(Request $request, Todo $todo): JsonResponse
20+
{
21+
$data = $request->validate([
22+
'description' => ['sometimes', 'required'],
23+
'completed' => ['sometimes', 'required']
24+
]);
25+
26+
$todo->update($data);
27+
return response()->json($todo);
28+
}
29+
30+
public function store(Request $request): JsonResponse
31+
{
32+
$data = $request->validate(['description' => 'required']);
33+
34+
$todo = Todo::factory()->create($data);
35+
return response()->json($todo);
36+
}
37+
38+
public function destroy(Todo $todo): TodoCollection
39+
{
40+
$todo->delete();
41+
42+
return new TodoCollection(
43+
Todo::query()->latest()->get()
44+
);
45+
}
46+
}

app/Http/Kernel.php

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<?php
2+
3+
namespace App\Http;
4+
5+
use Illuminate\Foundation\Http\Kernel as HttpKernel;
6+
7+
class Kernel extends HttpKernel
8+
{
9+
/**
10+
* The application's global HTTP middleware stack.
11+
*
12+
* These middleware are run during every request to your application.
13+
*
14+
* @var array<int, class-string|string>
15+
*/
16+
protected $middleware = [
17+
// \App\Http\Middleware\TrustHosts::class,
18+
\App\Http\Middleware\TrustProxies::class,
19+
\Illuminate\Http\Middleware\HandleCors::class,
20+
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
21+
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
22+
\App\Http\Middleware\TrimStrings::class,
23+
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
24+
];
25+
26+
/**
27+
* The application's route middleware groups.
28+
*
29+
* @var array<string, array<int, class-string|string>>
30+
*/
31+
protected $middlewareGroups = [
32+
'web' => [
33+
\App\Http\Middleware\EncryptCookies::class,
34+
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
35+
\Illuminate\Session\Middleware\StartSession::class,
36+
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
37+
\App\Http\Middleware\VerifyCsrfToken::class,
38+
\Illuminate\Routing\Middleware\SubstituteBindings::class,
39+
],
40+
41+
'api' => [
42+
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
43+
\Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
44+
\Illuminate\Routing\Middleware\SubstituteBindings::class,
45+
],
46+
];
47+
48+
/**
49+
* The application's middleware aliases.
50+
*
51+
* Aliases may be used instead of class names to conveniently assign middleware to routes and groups.
52+
*
53+
* @var array<string, class-string|string>
54+
*/
55+
protected $middlewareAliases = [
56+
'auth' => \App\Http\Middleware\Authenticate::class,
57+
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
58+
'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
59+
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
60+
'can' => \Illuminate\Auth\Middleware\Authorize::class,
61+
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
62+
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
63+
'precognitive' => \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class,
64+
'signed' => \App\Http\Middleware\ValidateSignature::class,
65+
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
66+
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
67+
];
68+
}

app/Http/Middleware/Authenticate.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use Illuminate\Auth\Middleware\Authenticate as Middleware;
6+
use Illuminate\Http\Request;
7+
8+
class Authenticate extends Middleware
9+
{
10+
/**
11+
* Get the path the user should be redirected to when they are not authenticated.
12+
*/
13+
protected function redirectTo(Request $request): ?string
14+
{
15+
return $request->expectsJson() ? null : route('login');
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
6+
7+
class EncryptCookies extends Middleware
8+
{
9+
/**
10+
* The names of the cookies that should not be encrypted.
11+
*
12+
* @var array<int, string>
13+
*/
14+
protected $except = [
15+
//
16+
];
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
6+
7+
class PreventRequestsDuringMaintenance extends Middleware
8+
{
9+
/**
10+
* The URIs that should be reachable while maintenance mode is enabled.
11+
*
12+
* @var array<int, string>
13+
*/
14+
protected $except = [
15+
//
16+
];
17+
}

0 commit comments

Comments
 (0)