Skip to content
This repository was archived by the owner on Mar 12, 2023. It is now read-only.
Draft
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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -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
18 changes: 15 additions & 3 deletions backend/app/Http/Controllers/Project/ShowAllProjectController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,32 @@

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
) {
}

/**
* 手続きページを表示するコントローラー
*
* @return View|Factory
*/
public function __invoke(): View|Factory
{
return view('project.index', []);
$user = Auth::user();
$allProjects = $this->getAllProjectsUseCase->invoke($user->id);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[phpstan] reported by reviewdog 🐶
Cannot access property $id on App\Models\User|null.


return view('project.index', [
'projectsBelonged' => $allProjects['projectsBelonged'],
'projectsNotBelonged' => $allProjects['projectsNotBelonged'],
]);
}
}
}
18 changes: 15 additions & 3 deletions backend/app/Http/Controllers/Project/ShowEditProjectController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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,
]);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
]);
}
}
}
23 changes: 15 additions & 8 deletions backend/app/Models/Project.php
Original file line number Diff line number Diff line change
Expand Up @@ -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",
];

/**
Expand All @@ -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",
];

/**
* プロジェクト進捗取得
Expand Down
50 changes: 50 additions & 0 deletions backend/app/UseCases/Project/GetAllProjectsUseCase.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

declare(strict_types=1);

namespace App\UseCases\Project;

use App\Models\Project;
use App\Models\ProjectBelonged;

final class GetAllProjectsUseCase
{
/**
* 全てのプロジェクトを表示する
*
* [
* '所属しているプロジェクト',
* '未所属のプロジェクト',
* ]
* @return array
*/
public function invoke(
int $userId,
): array {
// 全てのプロジェクト
$projects = Project::all();
// 全てのプロジェクト の ID
$projectIds = $projects->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,
];
}
}
18 changes: 18 additions & 0 deletions backend/app/UseCases/Project/GetProjectUseCase.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

declare(strict_types=1);

namespace App\UseCases\Project;

use App\Models\Project;

final class GetProjectUseCase
{
public function invoke(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[phpstan] reported by reviewdog 🐶
Method App\UseCases\Project\GetProjectUseCase::invoke() has no return type specified.

int $projectId
): Project {
$project = Project::find($projectId);

return $project;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[phpstan] reported by reviewdog 🐶
Method App\UseCases\Project\GetProjectUseCase::invoke() should return App\Models\Project but returns App\Models\Project|null.

}
}
19 changes: 18 additions & 1 deletion backend/resources/views/project/edit.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,24 @@
@parent
@endsection
@section('content')
<h1 class="text-center my-8 text-3xl ">プロジェクト編集</h1>
<h1 class="text-center my-8 text-3xl kiwi-maru">プロジェクト編集</h1>
<div class="mx-auto px-4 " style="max-width: 1200px">
<p>プロジェクト編集</p>
</div>

<div>
<h2>プロジェクト</h2>
<div style="padding-bottom: 32px">
<p>プロジェクト 名: {{ $project['name'] }}</p>
<p>プロジェクト 説明: {{ $project['description'] }}</p>
<p>プロジェクト 活動場所: {{ $project['place_of_activity'] }}</p>
<p>プロジェクト 開始日: {{ $project['start_date']->format('Y年m月d日') }}</p>
<p>プロジェクト 終了日: {{ $project['end_date']?->format('Y年m月d日') ?? '未設定' }}</p>
</div>

<a
href={{ route('projectIndex') }}
style="color: #0070f3; text-decoration: none;"
>プロジェクト一覧</a>
</div>
@endsection
43 changes: 42 additions & 1 deletion backend/resources/views/project/index.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,48 @@
@parent
@endsection
@section('content')
<h1 class="text-center my-8 text-3xl ">プロジェクト一覧</h1>
<h1 class="text-center my-8 text-3xl kiwi-maru">プロジェクト一覧</h1>
<div class="mx-auto px-4 " style="max-width: 1200px">
<p>プロジェクト一覧</p>
</div>

<div>
<h2>所属しているプロジェクト</h2>
@foreach ($projectsBelonged as $project)
<div style="padding-bottom: 32px">
<p>プロジェクト 名: {{ $project['name'] }}</p>
<p>プロジェクト 説明: {{ $project['description'] }}</p>
<p>プロジェクト 活動場所: {{ $project['place_of_activity'] }}</p>
<p>プロジェクト 開始日: {{ $project['start_date']->format('Y年m月d日') }}</p>
<p>プロジェクト 終了日: {{ $project['end_date']?->format('Y年m月d日') ?? '未設定' }}</p>
<p>
<a
href={{ route('projectShow', ['project_id' => $project['id']]) }}
style="color: #0070f3; text-decoration: none;"
>このプロジェクトを見る</a>
</p>
<p>
<a
href={{ route('projectEdit', ['project_id' => $project['id']]) }}
style="color: #0070f3; text-decoration: none;"
>このプロジェクトを編集する</a>
</p>
</div>
@endforeach

<h2>未所属しているプロジェクト</h2>
@foreach ($projectsNotBelonged as $project)
<div style="padding-bottom: 32px">
<p>プロジェクト 名: {{ $project['name'] }}</p>
<p>プロジェクト 説明: {{ $project['description'] }}</p>
<p>プロジェクト 活動場所: {{ $project['place_of_activity'] }}</p>
<p>プロジェクト 開始日: {{ $project['start_date']->format('Y年m月d日') }}</p>
<p>プロジェクト 終了日: {{ $project['end_date']?->format('Y年m月d日') ?? '未設定' }}</p>
<a
href={{ route('projectShow', ['project_id' => $project['id']]) }}
style="color: #0070f3; text-decoration: none;"
>このプロジェクトを見る</a>
</div>
@endforeach
</div>
@endsection
19 changes: 18 additions & 1 deletion backend/resources/views/project/individual.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,24 @@
@parent
@endsection
@section('content')
<h1 class="text-center my-8 text-3xl ">プロジェクト個別</h1>
<h1 class="text-center my-8 text-3xl kiwi-maru">プロジェクト詳細</h1>
<div class="mx-auto px-4 " style="max-width: 1200px">
<p>プロジェクト詳細</p>
</div>

<div>
<h2>プロジェクト</h2>
<div style="padding-bottom: 32px">
<p>プロジェクト 名: {{ $project['name'] }}</p>
<p>プロジェクト 説明: {{ $project['description'] }}</p>
<p>プロジェクト 活動場所: {{ $project['place_of_activity'] }}</p>
<p>プロジェクト 開始日: {{ $project['start_date']->format('Y年m月d日') }}</p>
<p>プロジェクト 終了日: {{ $project['end_date']?->format('Y年m月d日') ?? '未設定' }}</p>
</div>

<a
href={{ route('projectIndex') }}
style="color: #0070f3; text-decoration: none;"
>プロジェクト一覧</a>
</div>
@endsection