1
0
mirror of https://github.com/robonen/education-project.git synced 2026-03-20 02:44:31 +00:00

Модуль журнала

This commit is contained in:
2020-12-16 05:22:28 +07:00
parent 2e2942e42c
commit be8af67c61
21 changed files with 868 additions and 22 deletions

View File

@@ -0,0 +1,38 @@
<?php
namespace App\Filters;
use Carbon\Carbon;
class JournalFilter extends QueryFilter
{
protected function student($value)
{
$this->builder = $this->builder->where('student_id', $value);
}
protected function teacher($value)
{
$this->builder = $this->builder->where('teacher_id', $value);
}
protected function subject($value)
{
$this->builder = $this->builder->where('subject_id', $value);
}
protected function date($value)
{
$value = Carbon::createFromTimestamp($value/1000)->floorDays();
$this->builder = $this->builder->where('updated_at', $value);
}
protected function last($value)
{
$date = Carbon::now()->subDays($value);
$this->builder = $this->builder->where('updated_at', '>=', $date);
}
}

View File

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use Carbon\Carbon;
class LoginController extends Controller
{
@@ -11,10 +12,14 @@ class LoginController extends Controller
{
$credentials = $request->only('login', 'password');
if (auth()->attempt($credentials))
if (!auth()->attempt($credentials))
return response()->json('You cannot sign with those credentials!', 401);
$token = auth()->user()->makeToken($request->get('remember_me'));
$remember = (bool)$request->get('remember_me');
$token = auth()->user()->createToken(config('app.name'));
$token->token->expires_at = $remember ? Carbon::now()->addMonth() : Carbon::now()->addDay();
$token->token->save();
return response()->json([
'token_type' => 'Bearer',

View File

@@ -18,7 +18,7 @@ class RegisterController extends Controller
{
$role = Role::where('name', $request->get('role'));
if ($role->isEmpty())
if ($role->get()->isEmpty())
return response()->json('Role not found', 404);
$user = User::create(array_merge(

View File

@@ -0,0 +1,111 @@
<?php
namespace App\Http\Controllers;
use App\Filters\JournalFilter;
use App\Http\Requests\JournalRequest;
use App\Models\Journal;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Response;
class JournalController extends Controller
{
/**
* Display a listing of the resource.
*
* @param Request $request
* @return JsonResponse
*/
public function index(Request $request)
{
$journal = (new JournalFilter(Journal::all(), $request))->apply()->values();
return response()->json($journal, 200);
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
// public function create()
// {
// //
// }
/**
* Store a newly created resource in storage.
*
* @param JournalRequest $request
* @return JsonResponse
*/
public function store(JournalRequest $request)
{
if ($request->has('date'))
$date = Carbon::createFromTimestamp($request->get('date')/1000)->floorDays();
else
$date = Carbon::now()->floorDays();
$exist = Journal::where('updated_at', $date)
->where('student_id', $request->get('student_id'))
->where('subject_id', $request->get('subject_id'))
->get();
if ($exist->isNotEmpty())
return response()->json('Оценка на эту дату уже выставлена', 200);
$data = array_merge(['updated_at' => $date], $request->all());
$journal = Journal::create($data);
return response()->json(['id' => $journal->id], 200);
}
/**
* Display the specified resource.
*
* @param int $journal
* @return JsonResponse
*/
public function show(int $journal)
{
return response()->json(Journal::find($journal), 200);
}
/**
* Show the form for editing the specified resource.
*
* @param Journal $journal
* @return Response
*/
// public function edit(Journal $journal)
// {
// //
// }
/**
* Update the specified resource in storage.
*
* @param JournalRequest $request
* @param Journal $journal
* @return JsonResponse
*/
public function update(JournalRequest $request, Journal $journal)
{
$journal->update($request->all());
return response()->json(['id' => $journal->id], 200);
}
/**
* Remove the specified resource from storage.
*
* @param Journal $journal
* @return JsonResponse
*/
public function destroy(Journal $journal)
{
$journal->delete();
return response()->json(null, 200);
}
}

View File

@@ -2,9 +2,11 @@
namespace App\Http\Controllers;
use App\Filters\JournalFilter;
use App\Http\Requests\SchoolClassRequest;
use App\Models\SchoolClass;
use App\Models\Teacher;
use Carbon\Carbon;
use Illuminate\Database\QueryException;
use Illuminate\Http\Request;
@@ -65,11 +67,26 @@ class SchoolClassController extends Controller
$students = $class->students;
$studentsOnlyFIO = [];
foreach ($students as $student) {
array_push($studentsOnlyFIO, $student->only('id', 'name', 'surname', 'patronymic'));
array_push($studentsOnlyFIO, $student->only('id', 'name', 'surname', 'patronymic'));
}
return response()->json($studentsOnlyFIO, 200);
}
public function getStudentsJournal(SchoolClass $class, Request $request)
{
$students = $class->students;
$allStudents = [];
foreach ($students as $student)
{
$cpys = clone $student;
$cpys->scores = (new JournalFilter($student->scores, $request))->apply()->values();
$allStudents[] = $cpys;
}
return response()->json($allStudents, 200);
}
//получение всех предметов для класса
public function getSubjects(SchoolClass $class)
{

View File

@@ -14,6 +14,8 @@ class LoginRequest extends UserRequest
*/
public function specific()
{
return [];
return [
'remember_me' => 'integer'
];
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class JournalRequest extends ApiFormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'student_id' => 'required|integer',
'teacher_id' => 'required|integer',
'subject_id' => 'required|integer',
'score' => 'required|integer',
'comment' => 'string',
'date' => 'integer',
];
}
}

View File

@@ -9,7 +9,7 @@ class HeadTeacher extends Model
{
use HasFactory;
protected $guarded = [
protected $fillable = [
'user_id',
];

22
app/Models/Journal.php Normal file
View File

@@ -0,0 +1,22 @@
<?php
namespace App\Models;
use App\Filters\QueryFilter;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Journal extends Model
{
use HasFactory;
protected $fillable = [
'teacher_id',
'student_id',
'subject_id',
'score',
'comment',
'updated_at',
];
}

View File

@@ -10,7 +10,7 @@ class Parentt extends Model
{
use HasFactory;
protected $guarded = [
protected $fillable = [
'user_id',
];

View File

@@ -25,5 +25,4 @@ class SchoolClass extends Model
return $this->belongsToMany(Subject::class, 'academic_plans', 'class_id')
->withPivot('hours_per_week', 'hours_per_year');
}
}

View File

@@ -2,6 +2,7 @@
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Validator;
@@ -10,14 +11,21 @@ class Student extends Model
{
use HasFactory;
protected $guarded = [
protected $fillable = [
'user_id',
];
protected $guarded = [
'updated_at',
];
public function schoolClass()
{
return $this->belongsTo(SchoolClass::class, 'class_id');
return $this->belongsTo(SchoolClass::class, 'class_id')->where('');
}
public function scores()
{
return $this->hasMany(Journal::class, 'student_id');
}
}

View File

@@ -10,7 +10,7 @@ class Teacher extends Model
{
use HasFactory;
protected $guarded = [
protected $fillable = [
'user_id',
];

View File

@@ -5,7 +5,6 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Carbon\Carbon;
class User extends Authenticatable
{
@@ -58,11 +57,11 @@ class User extends Authenticatable
return $this->hasOne(HeadTeacher::class);
}
public function makeToken(bool $remember)
{
$token = $this->createToken(config('app.name'));
$token->token->expires_at = $remember ? Carbon::now()->addMonth() : Carbon::now()->addDay();
$token->token->save();
return $token;
}
// public function makeToken(bool $remember)
// {
// $token = $this->createToken(config('app.name'));
// $token->token->expires_at = $remember ? Carbon::now()->addMonth() : Carbon::now()->addDay();
// $token->token->save();
// return $token;
// }
}

View File

@@ -26,6 +26,6 @@ class AuthServiceProvider extends ServiceProvider
{
$this->registerPolicies();
Passport::routes();
// Passport::routes();
}
}

View File

@@ -38,7 +38,7 @@ class RouteServiceProvider extends ServiceProvider
$this->configureRateLimiting();
$this->routes(function () {
Route::prefix('/api')
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));