Skip to content

Commit

Permalink
Fix adding speakers
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexVanderbist committed Apr 2, 2019
1 parent 18afb2c commit e229778
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public function execute(Slot $slot)
return $speaker->hasBeenSentInvitation();
})
->reject(function (Speaker $speaker) {
return $speaker->user;
return $speaker->hasUserAccount();
})
->each(function (Speaker $speaker) use ($slot) {
$speaker->notify(new SpeakerInvitationNotification($slot));
Expand Down
52 changes: 23 additions & 29 deletions app/Domain/Slot/Actions/UpdateSpeakersAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,44 +22,43 @@ protected function deleteAllSpeakersNotPresent(Slot $slot, array $speakerPropert
$remainingSpeakerIds = collect($speakerProperties)->pluck('id')->filter()->toArray();
$remainingSpeakerEmails = collect($speakerProperties)->pluck('email')->filter()->toArray();

$slot->speakers
$speakersToRemove = $slot->speakers
->reject(function (Speaker $speaker) use ($remainingSpeakerIds) {
return in_array($speaker->id, $remainingSpeakerIds);
})
->reject(function (Speaker $speaker) use ($remainingSpeakerEmails) {
if (! $speaker->user) {
if (! $speaker->hasUserAccount()) {
return false;
}

return in_array($speaker->user->email, $remainingSpeakerEmails);
})
->each(function (Speaker $speaker) use ($slot, $speakerProperties) {
$speaker->delete();

activity()
->performedOn($speaker)
->log("Speaker `{$speaker->name}` removed from slot `{$slot->name}`.");
});

$speakersToRemove->each(function (Speaker $speaker) use ($slot, $speakerProperties) {
$speaker->delete();

activity()
->performedOn($speaker)
->log("Speaker `{$speaker->name}` removed from slot `{$slot->name}`.");
});

return $this;
}

protected function addNewSpeakers(Slot $slot, array $speakerProperties)
{
collect($speakerProperties)
->filter(function (array $speakerProperties) {
return empty($speakerProperties['id']);
})
->where('id', null)
->reject(function (array $speakerProperties) use ($slot) {
$exists = $slot->speakers()
$speakerExists = $slot->speakers()
->whereHas('user', function (Builder $query) use ($speakerProperties) {
return $query->where('email', $speakerProperties['email']);
})
->exists();

return $exists;
return $speakerExists;
})
->each(function (array $newSpeakerProperties, int $index) use ($slot) {
->each(function (array $newSpeakerProperties) use ($slot) {
Speaker::create([
'name' => $newSpeakerProperties['name'],
'email' => $newSpeakerProperties['email'] ?? null,
Expand All @@ -70,34 +69,29 @@ protected function addNewSpeakers(Slot $slot, array $speakerProperties)
->performedOn($slot)
->log("Speaker `{$newSpeakerProperties['name']}` added to slot `{$slot}`.");
});

return $this;
}

protected function updateExistingSpeakers(Slot $slot, array $speakerProperties)
{
collect($speakerProperties)
->filter(function (array $speakerProperties) {
return !empty($speakerProperties['id']);
})
->each(function (array $speakerProperties, int $index) use ($slot) {
->where('id', '!=', null)
->each(function (array $speakerProperties) use ($slot) {
$speaker = Speaker::find($speakerProperties['id']);

if (!$speaker) {
if (! $speaker) {
throw CouldNotUpdateSpeaker::speakerDoesNotExist($speakerProperties['id']);
}

if ($speaker->slot->id !== $slot->id) {
throw CouldNotUpdateSpeaker::speakerDoesNotBelongToSlot(
$speaker,
$slot,
);
throw CouldNotUpdateSpeaker::speakerDoesNotBelongToSlot($speaker, $slot);
}

$speaker->name = $speakerProperties['name'];
$speaker->email = $speakerProperties['email'];

$speaker->save();
$speaker->update([
'name' => $speakerProperties['name'],
'email' => $speakerProperties['email'],
]);

activity()
->performedOn($speaker)
Expand Down
2 changes: 1 addition & 1 deletion app/Domain/Slot/Models/Speaker.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,6 @@ public function markAsInvitationSent()

public function hasUserAccount(): bool
{
return ! is_null($this->user);
return ! is_null($this->user_id);
}
}
2 changes: 2 additions & 0 deletions config/app.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@

'name' => env('APP_NAME', 'Laravel'),

'editor' => 'phpstorm',

/*
|--------------------------------------------------------------------------
| Application Environment
Expand Down
1 change: 1 addition & 0 deletions resources/js/lib/components/Repeater.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export default function Repeater({ initial, blueprint, addNewLabel, children })
<span {...draggableHandleProps}>DRAG ME</span>
{children({
item,
index,
update: newItem => update(newItem, index),
remove: () => remove(index),
})}
Expand Down

0 comments on commit e229778

Please sign in to comment.