From f72de9294d7659fb81f385ee59946ab2817f401b Mon Sep 17 00:00:00 2001 From: H37kouya Date: Sun, 20 Feb 2022 19:37:47 +0900 Subject: [PATCH 1/3] =?UTF-8?q?chore=20root=20dir=20=E3=81=AB=20editorconf?= =?UTF-8?q?ig=20=E3=81=AE=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1671c9b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[docker-compose.yml] +indent_size = 4 From dbb56df3b58513a2f616bd06e06da65d46153f24 Mon Sep 17 00:00:00 2001 From: H37kouya Date: Sun, 6 Mar 2022 20:19:52 +0900 Subject: [PATCH 2/3] wip feature project wip --- .../Project/ShowAllProjectController.php | 18 +++++-- .../Project/ShowEditProjectController.php | 18 +++++-- .../ShowIndividualProjectController.php | 20 +++++-- backend/app/Models/Project.php | 30 ++++++++++- .../Project/GetAllProjectsUseCase.php | 50 ++++++++++++++++++ .../UseCases/Project/GetProjectUseCase.php | 18 +++++++ backend/resources/views/home.blade.php | 13 +++++ .../resources/views/project/edit.blade.php | 32 ++++++++++++ .../resources/views/project/index.blade.php | 52 +++++++++++++++++++ .../views/project/individual.blade.php | 32 ++++++++++++ 10 files changed, 272 insertions(+), 11 deletions(-) create mode 100644 backend/app/UseCases/Project/GetAllProjectsUseCase.php create mode 100644 backend/app/UseCases/Project/GetProjectUseCase.php diff --git a/backend/app/Http/Controllers/Project/ShowAllProjectController.php b/backend/app/Http/Controllers/Project/ShowAllProjectController.php index 5d780ff..36e225b 100644 --- a/backend/app/Http/Controllers/Project/ShowAllProjectController.php +++ b/backend/app/Http/Controllers/Project/ShowAllProjectController.php @@ -4,13 +4,19 @@ namespace App\Http\Controllers\Project; +use App\Facades\Auth; use App\Http\Controllers\Controller; -use Illuminate\Http\Request; +use App\UseCases\Project\GetAllProjectsUseCase; use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; class ShowAllProjectController extends Controller { + public function __construct( + public GetAllProjectsUseCase $getAllProjectsUseCase + ) { + } + /** * 手続きページを表示するコントローラー * @@ -18,6 +24,12 @@ class ShowAllProjectController extends Controller */ public function __invoke(): View|Factory { - return view('project.index', []); + $user = Auth::user(); + $allProjects = $this->getAllProjectsUseCase->invoke($user->id); + + return view('project.index', [ + 'projectsBelonged' => $allProjects['projectsBelonged'], + 'projectsNotBelonged' => $allProjects['projectsNotBelonged'], + ]); } -} \ No newline at end of file +} diff --git a/backend/app/Http/Controllers/Project/ShowEditProjectController.php b/backend/app/Http/Controllers/Project/ShowEditProjectController.php index c33b9f1..5e319e2 100644 --- a/backend/app/Http/Controllers/Project/ShowEditProjectController.php +++ b/backend/app/Http/Controllers/Project/ShowEditProjectController.php @@ -5,19 +5,31 @@ namespace App\Http\Controllers\Project; use App\Http\Controllers\Controller; +use App\UseCases\Project\GetProjectUseCase; use Illuminate\Http\Request; use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; class ShowEditProjectController extends Controller { + public function __construct( + public GetProjectUseCase $getProjectsUseCase + ) { + } + /** * プロジェクト編集ページを表示するコントローラー * * @return View|Factory */ - public function __invoke(): View|Factory - { - return view('project.edit', []); + public function __invoke( + Request $request, + int $project_id + ): View|Factory { + $project = $this->getProjectsUseCase->invoke($project_id); + + return view('project.edit', [ + 'project' => $project, + ]); } } diff --git a/backend/app/Http/Controllers/Project/ShowIndividualProjectController.php b/backend/app/Http/Controllers/Project/ShowIndividualProjectController.php index c82c7e1..659608b 100644 --- a/backend/app/Http/Controllers/Project/ShowIndividualProjectController.php +++ b/backend/app/Http/Controllers/Project/ShowIndividualProjectController.php @@ -5,19 +5,31 @@ namespace App\Http\Controllers\Project; use App\Http\Controllers\Controller; +use App\UseCases\Project\GetProjectUseCase; use Illuminate\Http\Request; use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; class ShowIndividualProjectController extends Controller { + public function __construct( + public GetProjectUseCase $getProjectUseCase + ) { + } + /** * 個別のプロジェクト(プロジェクト詳細ページ)を表示するコントローラー * * @return View|Factory */ - public function __invoke(): View|Factory - { - return view('project.individual', []); + public function __invoke( + Request $request, + int $project_id + ): View|Factory { + $project = $this->getProjectUseCase->invoke($project_id); + + return view('project.individual', [ + 'project' => $project, + ]); } -} \ No newline at end of file +} diff --git a/backend/app/Models/Project.php b/backend/app/Models/Project.php index ff6751c..5f5aa11 100644 --- a/backend/app/Models/Project.php +++ b/backend/app/Models/Project.php @@ -6,12 +6,20 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasOne; class Project extends Model { use HasFactory; + protected $fillable = [ - "representative_id", "name", "description", "thumbnail", "place_of_activity", "start_date", "end_date", "created_at", "updated_at" + "representative_id", + "name", + "description", + "thumbnail", + "place_of_activity", + "start_date", + "end_date", ]; /** @@ -20,4 +28,24 @@ class Project extends Model * @var array */ public static $rules = array(); + + /** + * キャストする属性 + * + * @var array + */ + protected $casts = [ + 'start_date' => 'date', + 'end_date' => 'date', + ]; + + /** + * Project に所属している + * + * @return HasOne + */ + public function projectBelonged(): HasOne + { + return $this->hasOne(ProjectBelonged::class, 'project_id', 'id'); + } } diff --git a/backend/app/UseCases/Project/GetAllProjectsUseCase.php b/backend/app/UseCases/Project/GetAllProjectsUseCase.php new file mode 100644 index 0000000..b9830c1 --- /dev/null +++ b/backend/app/UseCases/Project/GetAllProjectsUseCase.php @@ -0,0 +1,50 @@ +pluck('id')->toArray(); + + // ユーザーが所属しているプロジェクト + $projectsBelongedRelation = ProjectBelonged::whereUserId($userId) + ->get() + ->sortByDesc('updated_at'); + // ユーザーが所属しているプロジェクト の ID + $projectsBelongedIds = $projectsBelongedRelation->pluck('project_id')->toArray(); + // ユーザーが未所属のプロジェクト + $projectsBelonged = $projects->whereIn('id', $projectsBelongedIds) + ->sortByDesc('updated_at'); + + // ユーザーが未所属のプロジェクト の ID + $projectsNotBelongedIds = array_diff($projectIds, $projectsBelongedIds); + // ユーザーが未所属のプロジェクト + $projectsNotBelonged = $projects->whereIn('id', $projectsNotBelongedIds) + ->sortByDesc('updated_at'); + + return [ + 'projectsBelonged' => $projectsBelonged, + 'projectsNotBelonged' => $projectsNotBelonged, + ]; + } +} diff --git a/backend/app/UseCases/Project/GetProjectUseCase.php b/backend/app/UseCases/Project/GetProjectUseCase.php new file mode 100644 index 0000000..7f4b93a --- /dev/null +++ b/backend/app/UseCases/Project/GetProjectUseCase.php @@ -0,0 +1,18 @@ +ダッシュボード +
+

ダッシュボード

+
+ +@endsection diff --git a/backend/resources/views/project/edit.blade.php b/backend/resources/views/project/edit.blade.php index e69de29..af84d00 100644 --- a/backend/resources/views/project/edit.blade.php +++ b/backend/resources/views/project/edit.blade.php @@ -0,0 +1,32 @@ +@php +use Illuminate\Support\Carbon; +@endphp + +@extends("layouts.noLogin") +@section("title","プロジェクト編集") + +@section('header') +@parent +@endsection +@section('content') +

プロジェクト編集

+
+

プロジェクト編集

+
+ +
+

プロジェクト

+
+

プロジェクト 名: {{ $project['name'] }}

+

プロジェクト 説明: {{ $project['description'] }}

+

プロジェクト 活動場所: {{ $project['place_of_activity'] }}

+

プロジェクト 開始日: {{ $project['start_date']->format('Y年m月d日') }}

+

プロジェクト 終了日: {{ $project['end_date']?->format('Y年m月d日') ?? '未設定' }}

+
+ + プロジェクト一覧 +
+@endsection diff --git a/backend/resources/views/project/index.blade.php b/backend/resources/views/project/index.blade.php index e69de29..131ad26 100644 --- a/backend/resources/views/project/index.blade.php +++ b/backend/resources/views/project/index.blade.php @@ -0,0 +1,52 @@ +@extends("layouts.noLogin") +@section("title","プロジェクト一覧") + +@section('header') +@parent +@endsection +@section('content') +

プロジェクト一覧

+
+

プロジェクト一覧

+
+ +
+

所属しているプロジェクト

+ @foreach ($projectsBelonged as $project) +
+

プロジェクト 名: {{ $project['name'] }}

+

プロジェクト 説明: {{ $project['description'] }}

+

プロジェクト 活動場所: {{ $project['place_of_activity'] }}

+

プロジェクト 開始日: {{ $project['start_date']->format('Y年m月d日') }}

+

プロジェクト 終了日: {{ $project['end_date']?->format('Y年m月d日') ?? '未設定' }}

+

+ $project['id']]) }} + style="color: #0070f3; text-decoration: none;" + >このプロジェクトを見る +

+

+ $project['id']]) }} + style="color: #0070f3; text-decoration: none;" + >このプロジェクトを編集する +

+
+ @endforeach + +

未所属しているプロジェクト

+ @foreach ($projectsNotBelonged as $project) +
+

プロジェクト 名: {{ $project['name'] }}

+

プロジェクト 説明: {{ $project['description'] }}

+

プロジェクト 活動場所: {{ $project['place_of_activity'] }}

+

プロジェクト 開始日: {{ $project['start_date']->format('Y年m月d日') }}

+

プロジェクト 終了日: {{ $project['end_date']?->format('Y年m月d日') ?? '未設定' }}

+ $project['id']]) }} + style="color: #0070f3; text-decoration: none;" + >このプロジェクトを見る +
+ @endforeach +
+@endsection diff --git a/backend/resources/views/project/individual.blade.php b/backend/resources/views/project/individual.blade.php index e69de29..202e01e 100644 --- a/backend/resources/views/project/individual.blade.php +++ b/backend/resources/views/project/individual.blade.php @@ -0,0 +1,32 @@ +@php +use Illuminate\Support\Carbon; +@endphp + +@extends("layouts.noLogin") +@section("title","プロジェクト詳細") + +@section('header') +@parent +@endsection +@section('content') +

プロジェクト詳細

+
+

プロジェクト詳細

+
+ +
+

プロジェクト

+
+

プロジェクト 名: {{ $project['name'] }}

+

プロジェクト 説明: {{ $project['description'] }}

+

プロジェクト 活動場所: {{ $project['place_of_activity'] }}

+

プロジェクト 開始日: {{ $project['start_date']->format('Y年m月d日') }}

+

プロジェクト 終了日: {{ $project['end_date']?->format('Y年m月d日') ?? '未設定' }}

+
+ + プロジェクト一覧 +
+@endsection From 9729710a2c2478c982d4618bb2ea7862b9e6bd4f Mon Sep 17 00:00:00 2001 From: H37kouya Date: Sun, 6 Mar 2022 20:28:05 +0900 Subject: [PATCH 3/3] add type --- backend/app/UseCases/Project/GetProjectUseCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/app/UseCases/Project/GetProjectUseCase.php b/backend/app/UseCases/Project/GetProjectUseCase.php index 7f4b93a..0b47f51 100644 --- a/backend/app/UseCases/Project/GetProjectUseCase.php +++ b/backend/app/UseCases/Project/GetProjectUseCase.php @@ -10,7 +10,7 @@ final class GetProjectUseCase { public function invoke( int $projectId - ) { + ): Project { $project = Project::find($projectId); return $project;