From f466ce7cc9ea6545ce372781d5e4d170b1f19e67 Mon Sep 17 00:00:00 2001 From: Romulus21 Date: Mon, 24 Aug 2020 07:55:32 +0200 Subject: [PATCH] first work on front events --- app/Http/Controllers/EventController.php | 8 +- app/Http/Resources/Event.php | 7 +- app/Models/Event.php | 6 + deploy.sh | 2 + .../js/components/Form/DateTimeField.vue | 71 ++++++++- resources/js/components/Form/InputField.vue | 6 +- .../js/components/Form/SelectorField.vue | 65 +++++++++ .../js/components/Form/TextAreaField.vue | 8 +- resources/js/components/Nav.vue | 4 + resources/js/router.js | 18 +++ resources/js/views/Event/EventCreate.vue | 112 ++++++++++++++- resources/js/views/Event/EventEdit.vue | 136 ++++++++++++++++++ resources/js/views/Event/EventIndex.vue | 57 +++++++- resources/js/views/Event/EventShow.vue | 75 ++++++++++ resources/sass/components/_base.scss | 8 ++ resources/svg/calendar.svg | 9 ++ tests/Feature/EventsTest.php | 15 +- 17 files changed, 575 insertions(+), 32 deletions(-) create mode 100644 resources/js/components/Form/SelectorField.vue create mode 100644 resources/js/views/Event/EventEdit.vue create mode 100644 resources/js/views/Event/EventShow.vue create mode 100644 resources/svg/calendar.svg diff --git a/app/Http/Controllers/EventController.php b/app/Http/Controllers/EventController.php index 32ed6f6..cdbf925 100644 --- a/app/Http/Controllers/EventController.php +++ b/app/Http/Controllers/EventController.php @@ -14,11 +14,15 @@ class EventController extends Controller /** * Display a listing of the resource. * - * @return \Illuminate\Http\Response + * @return \Illuminate\Http\Response|object */ public function index() { - // + $events = Event::all(); + + return (EventResource::collection($events)) + ->response() + ->setStatusCode(200); } /** diff --git a/app/Http/Resources/Event.php b/app/Http/Resources/Event.php index 9522499..48f6c75 100644 --- a/app/Http/Resources/Event.php +++ b/app/Http/Resources/Event.php @@ -3,6 +3,7 @@ namespace App\Http\Resources; use App\Http\Resources\User as UserResource; +use App\Http\Resources\EventCategory as EventCategoryRessource; use App\Http\Resources\EventGuestWithoutEmail as GuestsWithoutEmailResource; use Illuminate\Http\Resources\Json\JsonResource; @@ -27,11 +28,7 @@ class Event extends JsonResource 'start_date' => $this->start_date, 'end_date' => $this->end_date, 'location' => $this->location, - 'category' => [ - 'data' => [ - 'category_id' => $this->category_id - ], - ], + 'category' => new EventCategoryRessource($this->category), 'invitations' => UserResource::collection($this->guests), 'invitations-with-email' => [ 'data' => GuestsWithoutEmailResource::collection($this->emailedGuests) diff --git a/app/Models/Event.php b/app/Models/Event.php index 7d037d6..1d4c312 100644 --- a/app/Models/Event.php +++ b/app/Models/Event.php @@ -4,6 +4,7 @@ namespace App\Models; use App\User; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; @@ -11,6 +12,11 @@ class Event extends Model { protected $guarded = []; + public function category() :BelongsTo + { + return $this->belongsTo(EventCategory::class, 'category_id'); + } + public function guests() :BelongsToMany { return $this->belongsToMany(User::class, 'event_guest') diff --git a/deploy.sh b/deploy.sh index dcd3b66..0feca03 100644 --- a/deploy.sh +++ b/deploy.sh @@ -48,6 +48,7 @@ if [ -z "$1" ]; then composer install php artisan migrate --force + php artisan db:seed php artisan optimize npm install --no-progress @@ -79,6 +80,7 @@ elif [ "$1" = git-prod ]; then composer install php artisan migrate --force + php artisan db:seed php artisan optimize fi diff --git a/resources/js/components/Form/DateTimeField.vue b/resources/js/components/Form/DateTimeField.vue index 1ffd5a8..0ac20e4 100644 --- a/resources/js/components/Form/DateTimeField.vue +++ b/resources/js/components/Form/DateTimeField.vue @@ -1,13 +1,74 @@ - diff --git a/resources/js/components/Form/InputField.vue b/resources/js/components/Form/InputField.vue index 0ef175c..f005f6a 100644 --- a/resources/js/components/Form/InputField.vue +++ b/resources/js/components/Form/InputField.vue @@ -2,7 +2,7 @@
-

Error Here

+

Error Here

@@ -55,8 +55,8 @@ export default { } }, errorClassObject: function () { - return { - 'error-field': this.hasError + if (this.hasError) { + return 'border-red' } } }, diff --git a/resources/js/components/Form/SelectorField.vue b/resources/js/components/Form/SelectorField.vue new file mode 100644 index 0000000..5cbe02a --- /dev/null +++ b/resources/js/components/Form/SelectorField.vue @@ -0,0 +1,65 @@ + + + diff --git a/resources/js/components/Form/TextAreaField.vue b/resources/js/components/Form/TextAreaField.vue index 935e133..d3b6fff 100644 --- a/resources/js/components/Form/TextAreaField.vue +++ b/resources/js/components/Form/TextAreaField.vue @@ -1,6 +1,6 @@ @@ -60,8 +60,8 @@ export default { } }, errorClassObject: function () { - return { - 'error-field': this.hasError + if (this.hasError) { + return 'border-red' } } }, diff --git a/resources/js/components/Nav.vue b/resources/js/components/Nav.vue index 5c252ed..25e693d 100644 --- a/resources/js/components/Nav.vue +++ b/resources/js/components/Nav.vue @@ -17,6 +17,10 @@ Bookmarks + + + Evénements + Jeux diff --git a/resources/js/router.js b/resources/js/router.js index 49a1c34..010d10d 100644 --- a/resources/js/router.js +++ b/resources/js/router.js @@ -15,6 +15,10 @@ import BookmarkIndex from './views/Bookmark/BookmarkIndex' import GameIndex from './views/Games/GameIndex' import Hangman from './views/Games/HangMan/Hangman' import Quizz from './views/Games/Quizz/Quizz' +import EventIndex from './views/Event/EventIndex' +import EventCreate from './views/Event/EventCreate' +import EventShow from './views/Event/EventShow' +import EventEdit from './views/Event/EventEdit' Vue.use(VueRouter) @@ -66,6 +70,20 @@ export default new VueRouter({ meta: {title: 'Details of List'} }, + { + path: '/events', component: EventIndex, + meta: {title: 'Events List'} + }, { + path: '/events/create', component: EventCreate, + meta: {title: 'Add New Event'} + }, { + path: '/events/:id', component: EventShow, + meta: {title: 'Detail for Event'} + }, { + path: '/events/:id/edit', component: EventEdit, + meta: {title: 'Edit Event'} + }, + { path: '/bookmarks', component: BookmarkIndex, meta: {title: 'Bookmark Lists'} diff --git a/resources/js/views/Event/EventCreate.vue b/resources/js/views/Event/EventCreate.vue index 230edcc..7762f1e 100644 --- a/resources/js/views/Event/EventCreate.vue +++ b/resources/js/views/Event/EventCreate.vue @@ -1,13 +1,113 @@ - - diff --git a/resources/js/views/Event/EventEdit.vue b/resources/js/views/Event/EventEdit.vue new file mode 100644 index 0000000..572187c --- /dev/null +++ b/resources/js/views/Event/EventEdit.vue @@ -0,0 +1,136 @@ + + + + diff --git a/resources/js/views/Event/EventIndex.vue b/resources/js/views/Event/EventIndex.vue index b45125d..c82ab4a 100644 --- a/resources/js/views/Event/EventIndex.vue +++ b/resources/js/views/Event/EventIndex.vue @@ -1,13 +1,58 @@ - - diff --git a/resources/js/views/Event/EventShow.vue b/resources/js/views/Event/EventShow.vue new file mode 100644 index 0000000..4efa9a7 --- /dev/null +++ b/resources/js/views/Event/EventShow.vue @@ -0,0 +1,75 @@ + + + + diff --git a/resources/sass/components/_base.scss b/resources/sass/components/_base.scss index e5daee9..c1c9cb3 100644 --- a/resources/sass/components/_base.scss +++ b/resources/sass/components/_base.scss @@ -35,6 +35,14 @@ textarea { @apply ; } +select { + @apply border py-2 px-4 rounded bg-white; + + option { + @apply bg-white; + } +} + .text-shadow { text-shadow: 1px 1px 2px #000; } diff --git a/resources/svg/calendar.svg b/resources/svg/calendar.svg new file mode 100644 index 0000000..d0039a9 --- /dev/null +++ b/resources/svg/calendar.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/tests/Feature/EventsTest.php b/tests/Feature/EventsTest.php index 0796ed4..f33ce59 100644 --- a/tests/Feature/EventsTest.php +++ b/tests/Feature/EventsTest.php @@ -172,7 +172,7 @@ class EventsTest extends TestCase } /** @test */ - public function only_the_admin_can_patch_the_memo() + public function only_the_admin_can_patch_the_event_category() { $this->actingAs($user = factory(User::class)->create(), 'api'); $category = EventCategory::create(['name' => 'Test category', 'description' => 'Test description']); @@ -305,6 +305,19 @@ class EventsTest extends TestCase ]); } + /** @test */ + public function all_event_can_be_retrieved() + { + $this->actingAs($user = factory(User::class)->create(), 'api'); + $events = factory(Event::class, 10)->create(['user_id' => $user->id]); + + $response = $this->get('/api/events'); + + $response->assertStatus(200); + + $this->assertCount(10, Event::all()); + } + /** @test */ public function a_to_event_can_be_patch() {