Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
jayar95 committed Mar 29, 2018
1 parent 0172b73 commit fb0cb63
Show file tree
Hide file tree
Showing 21 changed files with 608 additions and 48 deletions.
6 changes: 6 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,9 @@ PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

SQS_KEY=
SQS_SECRET=
SQS_PREFIX=
SQS_QUEUE=
SQS_REGION=
8 changes: 6 additions & 2 deletions app/Events/SuccessfulRiddleSubmission.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<?php

namespace App\Events;

use App\Riddle;
Expand All @@ -17,15 +16,20 @@ class SuccessfulRiddleSubmission {
/** @var User $winner */
public $winner;

public $answer;

/**
* SuccessfulRiddleSubmission constructor.
*
* @param Riddle $riddle
* @param User $winner
* @param string $answer
*/
public function __construct(Riddle $riddle, User $winner) {
public function __construct(Riddle $riddle, User $winner, $answer) {
$this->riddle = $riddle;

$this->winner = $winner;

$this->answer = $answer;
}
}
3 changes: 2 additions & 1 deletion app/Http/Controllers/AuthController.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php
namespace App\Http\Controllers;

use App\Http\Resources\UserResource;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
Expand Down Expand Up @@ -43,7 +44,7 @@ public function login(Request $request): JsonResponse {
* @return JsonResponse
*/
public function me(): JsonResponse {
return response()->json(auth()->user());
return response()->json(new UserResource(auth()->user()));
}

/**
Expand Down
6 changes: 5 additions & 1 deletion app/Http/Controllers/RiddleController.php
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ public function createSubmission(Request $request, Riddle $riddle): JsonResponse
if ($answers = $riddle->answers)
foreach ($answers as $riddleAnswer)
if ($riddleAnswer->answer === $submission->answer) {
event(new SuccessfulRiddleSubmission($riddle, auth()->user()));
event(new SuccessfulRiddleSubmission($riddle, auth()->user(), $submission->answer));

$answerCorrect = true;

Expand Down Expand Up @@ -193,4 +193,8 @@ public function current(Request $request): JsonResponse {

return response()->json($response);
}

public function winners(): JsonResponse {

}
}
9 changes: 9 additions & 0 deletions app/Http/Controllers/UserController.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<?php
namespace App\Http\Controllers;

use App\Exceptions\PermissionDeniedException;
use App\Http\Resources\SubmissionResource;
use App\Http\Resources\UserResource;
use App\Mail\RegistrationApproved;
use App\User;
Expand Down Expand Up @@ -70,4 +72,11 @@ public function update(Request $request, User $user) {

return response()->json($user->toArray(), 200);
}

public function submissions(User $user) {
if ($user->id !== auth()->user()->id || !auth()->user()->staff)
throw new PermissionDeniedException();

return SubmissionResource::collection($user->submissions);
}
}
2 changes: 1 addition & 1 deletion app/Http/Resources/RiddleResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public function toArray($request) {
'max_submission_count' => $this->max_submission_count,
'title' => $this->title,
'updated_at' => $this->updated_at,
'winner' => $this->winner,
'winner' => new UserResource($this->winner),
'submission_count' => $this->getSubmissionCount()
];
}
Expand Down
35 changes: 20 additions & 15 deletions app/Http/Resources/SubmissionResource.php
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
<?php

namespace App\Http\Resources;
namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Http\Resources\Json\JsonResource;

class SubmissionResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return parent::toArray($request);
}
}
class SubmissionResource extends JsonResource {
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
*
* @return array
*/
public function toArray($request) {
return [
'id' => $this->id,
'user_id' => $this->user,
'riddle' => $this->riddle,
'answer' => $this->answer,
'created_at' => $this->created_at,
];
}
}
29 changes: 14 additions & 15 deletions app/Http/Resources/UserResource.php
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
<?php

namespace App\Http\Resources;
namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return parent::toArray($request);
}
}
class UserResource extends JsonResource {
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
*
* @return array
*/
public function toArray($request) {
return parent::toArray($request);
}
}
1 change: 0 additions & 1 deletion app/Listeners/CompleteRiddle.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<?php

namespace App\Listeners;

use App\Events\SuccessfulRiddleSubmission;
Expand Down
29 changes: 29 additions & 0 deletions app/Listeners/RegistrationNotification.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php
namespace App\Listeners;

use App\User;
use Illuminate\Auth\Events\Registered;
use Illuminate\Support\Facades\Mail;
use App\Mail\RegistrationNotificationMailable;

class RegistrationNotification {
/**
* NewRegistration constructor.
* @return void
*/
public function __construct() {
}

/**
* @param Registered $event
*/
public function handle(Registered $event) {
$staffGroup = User::where('staff', true)->get();

if ($staffGroup)
/** @var User $staff */
foreach ($staffGroup as $staff)
Mail::to($staff)
->queue(new RegistrationNotificationMailable($event->user));
}
}
28 changes: 28 additions & 0 deletions app/Listeners/WinnerNotification.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php
namespace App\Listeners;

use App\Events\SuccessfulRiddleSubmission;
use App\User;
use Illuminate\Support\Facades\Mail;

class WinnerNotification {
/**
* WinnerNotification constructor.
* @return void
*/
public function __construct() {
}

/**
* @param SuccessfulRiddleSubmission $event
*/
public function handle(SuccessfulRiddleSubmission $event) {
$staffGroup = User::where('staff', true)->get();

if ($staffGroup)
/** @var User $staff */
foreach ($staffGroup as $staff)
Mail::to($staff)
->queue(new WinnerNotificationMailable($event->winner, $event->riddle, $event->answer));
}
}
37 changes: 37 additions & 0 deletions app/Mail/RegistrationNotificationMailable.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

namespace App\Mail;

use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class RegistrationNotificationMailable extends Mailable {
use Queueable, SerializesModels;

/**
* @var User
*/
protected $user;

/**
* Create a new message instance.
* @param User $user
*
* @return void
*/
public function __construct(User $user) {
$this->user = $user;
}

/**
* Build the message.
*
* @return $this
*/
public function build() {
return $this->subject('New User Registration ' . $this->user->name)
->view('emails.registration-notification');
}
}
47 changes: 47 additions & 0 deletions app/Mail/WinnerNotificationMailable.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php

namespace App\Mail;

use App\Riddle;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class WinnerNotificationMailable extends Mailable {
use Queueable, SerializesModels;

/**
* @var User
*/
protected $user;

/**
* @var Riddle
*/
protected $riddle;

protected $answer;

/**
* Create a new message instance.
* @param User $user
*
* @return void
*/
public function __construct(User $user, Riddle $riddle, $answer) {
$this->user = $user;
$this->riddle = $riddle;
$this->answer = $answer;
}

/**
* Build the message.
*
* @return $this
*/
public function build() {
return $this->subject('New Riddle winner: ' . $this->user->name)
->view('emails.winner-notification');
}
}
4 changes: 4 additions & 0 deletions app/Providers/EventServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ class EventServiceProvider extends ServiceProvider {
protected $listen = [
'App\Events\SuccessfulRiddleSubmission' => [
'App\Listeners\CompleteRiddle',
'App\Listeners\WinnerNotification'
],
'Illuminate\Auth\Events\Registered' => [
'App\Listeners\RegistrationNotification'
],
];

Expand Down
5 changes: 1 addition & 4 deletions app/Riddle.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,8 @@ class Riddle extends Model {
*/
protected $dates = ['deleted_at'];

/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function winner() {
return $this->hasOne('App\User', 'winner');
return $this->hasOne('App\User', 'winner', 'id');
}

public function answers() {
Expand Down
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"type": "project",
"require": {
"php": ">=7.1.3",
"aws/aws-sdk-php": "^3.52",
"barryvdh/laravel-cors": "^0.11.0",
"fideloper/proxy": "~4.0",
"laravel/framework": "5.6.*",
Expand Down
Loading

0 comments on commit fb0cb63

Please sign in to comment.