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 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 614cf79..9cdc2e9 100644 --- a/backend/app/Models/Project.php +++ b/backend/app/Models/Project.php @@ -12,8 +12,15 @@ 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", ]; /** @@ -24,19 +31,19 @@ class Project extends Model public static $rules = array(); /** - * 初期値設定 + * 日付の登録(format使えるために) + * * @var array */ - protected $attributes = [ - "thumbnail" => "images/default/default_project_thumbnail.png", - ]; + protected $dates = ['start_date', 'end_date']; /** - * 日付の登録(format使えるために) - * + * 初期値設定 * @var array */ - protected $dates = ['start_date', 'end_date']; + protected $attributes = [ + "thumbnail" => "images/default/default_project_thumbnail.png", + ]; /** * プロジェクト進捗取得 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..0b47f51 --- /dev/null +++ b/backend/app/UseCases/Project/GetProjectUseCase.php @@ -0,0 +1,18 @@ +プロジェクト編集 +
プロジェクト編集
+プロジェクト 名: {{ $project['name'] }}
+プロジェクト 説明: {{ $project['description'] }}
+プロジェクト 活動場所: {{ $project['place_of_activity'] }}
+プロジェクト 開始日: {{ $project['start_date']->format('Y年m月d日') }}
+プロジェクト 終了日: {{ $project['end_date']?->format('Y年m月d日') ?? '未設定' }}
+プロジェクト一覧
+プロジェクト 名: {{ $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;" + >このプロジェクトを編集する +
+プロジェクト 名: {{ $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['name'] }}
+プロジェクト 説明: {{ $project['description'] }}
+プロジェクト 活動場所: {{ $project['place_of_activity'] }}
+プロジェクト 開始日: {{ $project['start_date']->format('Y年m月d日') }}
+プロジェクト 終了日: {{ $project['end_date']?->format('Y年m月d日') ?? '未設定' }}
+