Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
jayar95 committed Mar 26, 2018
1 parent e588f8c commit 9d58dfd
Show file tree
Hide file tree
Showing 17 changed files with 172 additions and 24 deletions.
8 changes: 7 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\User;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;

Expand Down Expand Up @@ -28,7 +29,11 @@ public function login(Request $request): JsonResponse {
'password' => $request->get('password'),
];

if (!$token = auth()->attempt($credentials))
$userType = ($user = User::where('email', $credentials['email'])->where('staff', false)->first()) ? 'user' : 'staff';
if ($user && !$user->approved && $userType !== 'staff')
$userType = 'unapproved';

if (!$token = auth()->claims(['aud' => $userType])->attempt($credentials))
return response()->json(['error' => 'Unauthorized'], 401);

return $this->respondWithToken($token);
Expand Down Expand Up @@ -69,6 +74,7 @@ protected function respondWithToken($token): JsonResponse {
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth()->factory()->getTTL() * 60,
'me' => auth()->user(),
]);
}
}
10 changes: 7 additions & 3 deletions app/Http/Controllers/RegisterController.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ protected function validator(array $data) {
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6',
'company_name' => 'required',
'address_line_one' => 'required',
'city' => 'required',
'state' => 'required',
'zip_code' => 'required|min:5|max:5'
]);
}

Expand All @@ -56,9 +61,8 @@ protected function validator(array $data) {
*/
protected function create(array $data) {
$company = Company::create([
'name' => $data['company_name'],
'company_name' => $data['company_name'],
'address_line_one' => $data['address_line_one'],
'address_line_two' => $data['address_line_two'],
'city' => $data['city'],
'state' => $data['state'],
'zip_code' => $data['zip_code']
Expand All @@ -68,7 +72,7 @@ protected function create(array $data) {
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'company' => $company->id,
'company_id' => $company->id,
]);
}
}
34 changes: 29 additions & 5 deletions app/Http/Controllers/RiddleController.php
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,22 @@ public function update(Request $request, Riddle $riddle): JsonResponse {
return response()->json($riddle->toArray(), 200);
}

public function setActive(Request $request, Riddle $riddle): JsonResponse {
$oldRiddle = Riddle::where('active', true)->first();

if ($oldRiddle) {
$oldRiddle->active = false;

$oldRiddle->save();
}

$riddle->active = true;

$riddle->save();

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

/**
* @param Request $request
* @param Riddle $riddle
Expand Down Expand Up @@ -152,12 +168,20 @@ public function createAnswer(Request $request, Riddle $riddle): JsonResponse {
*/
public function current(Request $request): JsonResponse {
/** @var Riddle $riddle */
$riddle = Riddle::where('active', 1)
$riddle = Riddle::where('active', true)
->first();

return response()->json([
'riddle' => $riddle->toArray(),
'tries_made' => $riddle->getSubmissionCountByUser(auth()->user()),
]);
$user = auth()->user();

if ($riddle)
$response = [
'riddle' => $riddle->toArray(),
'attempts_made' => $riddle->getSubmissionCountByUser($user),
'submit_today' => $riddle->submittedToday($user)
];
else
$response = ['message' => 'No current riddles'];

return response()->json($response);
}
}
17 changes: 14 additions & 3 deletions app/Http/Controllers/UserController.php
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
<?php
namespace App\Http\Controllers;

use App\Http\Resources\UserResource;
use App\User;
use Illuminate\Http\Request;

class UserController extends Controller {
public function list() {
$users = User::where('active', 1)
$users = User::where('approved', false)
->where('staff', false)
->with('company')
->get();

return response()->json($users->toArray(), 200);
return response()->json(UserResource::collection($users), 200);
}

public function read(Request $request, User $user) {
Expand All @@ -25,7 +28,7 @@ public function delete(Request $request, User $user) {
}

public function registrations() {
$users = User::where('active', 0)
$users = User::where('approved', false)
->get();

return response()->json($users->toArray(), 200);
Expand All @@ -38,6 +41,14 @@ public function approve(Request $request, User $user) {
return response()->json($user->toArray(), 200);
}

public function setStaff(Request $request, User $user) {
$user->staff = true;
$user->active = true;
$user->save();

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

public function update(Request $request, User $user) {
$this->validate($request, [
'name' => 'required',
Expand Down
18 changes: 18 additions & 0 deletions app/Http/Resources/CompanyResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

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

namespace App\Http\Resources;

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);
}
}
27 changes: 27 additions & 0 deletions app/Riddle.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class Riddle extends Model {
'content',
'title',
'winner',
'active'
];

/**
Expand All @@ -32,6 +33,10 @@ public function answers() {
return $this->hasMany('App\RiddleAnswer');
}

public function submissions() {
return $this->hasMany('App\Submission');
}

/**
* @param User $user
*
Expand All @@ -42,4 +47,26 @@ public function getSubmissionCountByUser(User $user): int {
->where('user_id', $user->id)
->count();
}

/**
* @param User $user
*
* @return bool
*/
public function submittedToday(User $user): bool {
$submission = Submission::where('riddle_id', $this->id)
->where('user_id', $user->id)
->orderBy('id', 'desc')
->first();

if (!$submission)
return false;

$lastSubmit = (new \DateTime($submission->created_at))->format('Y-m-d');

$tz = new \DateTimeZone(config('app.timezone'));
$today = (new \DateTime())->setTimezone($tz)->format('Y-m-d');

return ($lastSubmit === $today);
}
}
9 changes: 8 additions & 1 deletion app/Submission.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class Submission extends Model {
protected $fillable = [
'user_id',
'answer',
'riddle_id'
'riddle_id',
];

/**
Expand All @@ -20,4 +20,11 @@ class Submission extends Model {
public function user(): BelongsTo {
return $this->belongsTo('App\User');
}

/**
* @return BelongsTo
*/
public function riddle(): BelongsTo {
return $this->belongsTo('App\Riddle');
}
}
5 changes: 3 additions & 2 deletions app/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ class User extends Authenticatable implements JWTSubject {
'name',
'email',
'password',
'company'
'company_id',
'staff'
];

/**
Expand Down Expand Up @@ -56,6 +57,6 @@ public function getJWTCustomClaims() {
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function company() {
return $this->hasOne('App\Company', 'company');
return $this->hasOne('App\Company', 'id');
}
}
2 changes: 1 addition & 1 deletion config/app.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
|
*/

'timezone' => 'UTC',
'timezone' => 'America/New_York',

/*
|--------------------------------------------------------------------------
Expand Down
4 changes: 2 additions & 2 deletions database/migrations/2014_10_12_000000_create_users_table.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ public function up() {
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->boolean('staff')->default(0);
$table->boolean('approved')->default(0);
$table->boolean('staff')->default(false);
$table->boolean('approved')->default(false);
$table->rememberToken();
$table->timestamps();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public function up() {
$table->string('title', 255)->nullable(false);
$table->integer('winner')->unsigned()->nullable(true);
$table->integer('max_submission_count')->unsigned();
$table->boolean('active')->default(false)->nullable(false);
$table->softDeletes();
$table->timestamps();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@ public function up() {
//structure
$table->increments('id');
$table->integer('user_id')->unsigned()->nullable(false);
$table->integer('riddle_id')->unsigned()->nullable(false);
$table->text('answer', 255)->nullable(false);
$table->timestamps();

//relationships
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('riddle_id')->references('id')->on('riddles');
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public function up() {
$table->increments('id');
$table->text('company_name');
$table->text('address_line_one');
$table->text('address_line_two');
$table->text('address_line_two')->nullable();
$table->text('city');
$table->text('zip_code');
$table->text('state');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class AddCompaniesToUsers extends Migration {
public function up() {
Schema::table('users', function(Blueprint $table) {
$table->integer('company_id')->unsigned()->nullable();
$table->text('position', 255);
$table->text('position', 255)->nullable();

//relationships'
$table->foreign('company_id')->references('id')->on('companies');
Expand All @@ -26,9 +26,6 @@ public function up() {
* @return void
*/
public function down() {
Schema::table('users', function(Blueprint $table) {
$table->dropForeign('company_id');
$table->dropColumn(['company_id', 'position']);
});

}
}
30 changes: 30 additions & 0 deletions database/seeds/UsersTableSeeder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class UsersTableSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run() {
$company = DB::table('companies')->insertGetId([
'company_name' => str_random(10),
'address_line_one' => str_random(10),
'address_line_two' => str_random(10),
'city' => str_random(10),
'state' => str_random(5),
'zip_code' => str_random(5)
]);

DB::table('users')->insert([
'name' => str_random(10),
'email' => 'text@example.com',
'password' => bcrypt('password'),
'company_id' => $company,
'staff' => 0,
]);
}
}
1 change: 1 addition & 0 deletions routes/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
Route::get('user/list', 'UserController@list');
Route::get('user/registrations', 'UserController@registrations');
Route::put('user/{user}/approve', 'UserController@approve');
Route::put('user/{user}/set-staff', 'UserController@setStaff');
Route::get('user/{user}', 'UserController@read');
Route::delete('user/{user}', 'UserController@delete');
Route::put('user/{user}/update', 'UserController@update');
Expand Down

0 comments on commit 9d58dfd

Please sign in to comment.