diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..a72a71c --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": false +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..0a77011 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.tabSize": 2 +} \ No newline at end of file diff --git a/docs/toast_notification.md b/docs/toast_notification.md new file mode 100644 index 0000000..94915b8 --- /dev/null +++ b/docs/toast_notification.md @@ -0,0 +1,25 @@ +# Create a toast notification + +we're using [vue-toastification](https://github.com/Maronato/vue-toastification) to create toast notifications. + +``component.vue`` +```html + + + + +``` diff --git a/src/app/Enums/ModifiedEnum.php b/src/app/Enums/ModifiedEnum.php new file mode 100644 index 0000000..a886364 --- /dev/null +++ b/src/app/Enums/ModifiedEnum.php @@ -0,0 +1,10 @@ + 200, + static::created => 201, static::error => 400, static::unauthorized => 401, static::forbidden => 403, @@ -30,6 +32,7 @@ public function label(): string return match ($this) { static::success => 'Success', static::error => 'Error', + static::created => 'Created', static::unauthorized => 'Unauthorized', static::forbidden => 'Forbidden', static::notFound => 'Not Found', diff --git a/src/app/Http/Controllers/FineController.php b/src/app/Http/Controllers/FineController.php index cbfbf79..70204d7 100644 --- a/src/app/Http/Controllers/FineController.php +++ b/src/app/Http/Controllers/FineController.php @@ -2,11 +2,16 @@ namespace App\Http\Controllers; +use App\Enums\ModifiedEnum; +use App\Enums\ResponseStatus; +use App\Http\Requests\FineRequest; use App\Models\Fine; use Illuminate\Http\Request; +use App\Traits\CommonTrait; class FineController extends Controller { + use CommonTrait; /** * Display a listing of the resource. */ @@ -26,9 +31,21 @@ public function create() /** * Store a newly created resource in storage. */ - public function store(Request $request) + public function store(FineRequest $request) { - // + $validated = $request->validated(); + $fine = Fine::create([ + 'grant_id' => $validated['grant_id'], + 'amount' => $validated['amount'], + 'modified_kind' => ModifiedEnum::inserted, + 'modified_user' => Auth()->id(), + ]); + + return $this->CommonResponse( + ResponseStatus::created, + 'Fine created successfully', + ['fine' => $fine], + ); } /** @@ -52,7 +69,20 @@ public function edit(Fine $fine) */ public function update(Request $request, Fine $fine) { - // + $validated = $request->validated(); + + //TODO: Check: do we want to update the grant_id? + $fine->update([ + 'amount' => $validated['amount'], + 'modified_kind' => ModifiedEnum::modified, + 'modified_user' => Auth()->id(), + ]); + + return $this->CommonResponse( + ResponseStatus::success, + 'Fine updated successfully', + ['fine' => $fine], + ); } /** @@ -60,6 +90,12 @@ public function update(Request $request, Fine $fine) */ public function destroy(Fine $fine) { - // + $fine->delete(); + + return $this->CommonResponse( + ResponseStatus::success, + 'Fine deleted successfully', + null, + ); } } diff --git a/src/app/Http/Controllers/GrantController.php b/src/app/Http/Controllers/GrantController.php index 58d0395..a7ce175 100644 --- a/src/app/Http/Controllers/GrantController.php +++ b/src/app/Http/Controllers/GrantController.php @@ -2,11 +2,16 @@ namespace App\Http\Controllers; +use App\Enums\ModifiedEnum; +use App\Enums\ResponseStatus; +use App\Http\Requests\GrantRequest; use App\Models\Grant; use Illuminate\Http\Request; +use App\Traits\CommonTrait; class GrantController extends Controller { + use CommonTrait; /** * Display a listing of the resource. */ @@ -26,9 +31,21 @@ public function create() /** * Store a newly created resource in storage. */ - public function store(Request $request) + public function store(GrantRequest $request) { - // + $validated = $request->validated(); + $grant = Grant::create([ + 'user_id' => $validated['user_id'], + 'item_id' => $validated['item_id'], + 'borrowed_date' => $validated['borrowed_date'], + 'return_date' => $validated['return_date'], + 'modified_kind' => ModifiedEnum::inserted, + 'modified_user' => Auth()->id(), + ]); + return $this->CommonResponse( + ResponseStatus::created, + 'Grant created successfully', + $grant); } /** @@ -50,9 +67,23 @@ public function edit(Grant $grant) /** * Update the specified resource in storage. */ - public function update(Request $request, Grant $grant) + public function update(GrantRequest $request, Grant $grant) { - // + $validated = $request->validated(); + + $grant->update([ + 'user_id' => $validated['user_id'], + 'item_id' => $validated['item_id'], + 'borrowed_date' => $validated['borrowed_date'], + 'return_date' => $validated['return_date'], + 'modified_kind' => ModifiedEnum::modified, + 'modified_user' => Auth()->id(), + ]); + + return $this->CommonResponse( + ResponseStatus::success, + 'Grant updated successfully', + ['grant' => $grant]); } /** @@ -60,6 +91,10 @@ public function update(Request $request, Grant $grant) */ public function destroy(Grant $grant) { - // + $grant->delete(); + return $this->CommonResponse( + ResponseStatus::success, + 'Grant deleted successfully', + null); } } diff --git a/src/app/Http/Controllers/ItemController.php b/src/app/Http/Controllers/ItemController.php index 6b049c9..5994b9d 100644 --- a/src/app/Http/Controllers/ItemController.php +++ b/src/app/Http/Controllers/ItemController.php @@ -2,17 +2,21 @@ namespace App\Http\Controllers; +use App\Enums\ModifiedEnum; +use App\Enums\ResponseStatus; +use App\Http\Requests\ItemRequest; use App\Models\Item; -use Illuminate\Http\Request; +use App\Traits\CommonTrait; class ItemController extends Controller { + use CommonTrait; /** * Display a listing of the resource. */ public function index() { - // + // render page } /** @@ -20,15 +24,28 @@ public function index() */ public function create() { - // + // render page } /** * Store a newly created resource in storage. */ - public function store(Request $request) + public function store(ItemRequest $request) { - // + $validated = $request->validated(); + + $item = Item::create([ + 'Identifier' => '', //TODO: Use trait to generate valid identifier + 'type' => $validated['type'], + 'name' => $validated['name'], + 'description' => $validated['description'], + 'category' => $validated['category'], + 'ISBN' => $validated['ISBN'], + 'rating' => $validated['rating'], + 'borrowing_time' => $validated['borrowing_time'], + 'modified_kind' => 'I', + 'modified_user' => auth()->user()->id, + ]); } /** @@ -36,23 +53,34 @@ public function store(Request $request) */ public function show(Item $item) { - // - } - - /** - * Show the form for editing the specified resource. - */ - public function edit(Item $item) - { - // + // render page } /** * Update the specified resource in storage. */ - public function update(Request $request, Item $item) + public function update(ItemRequest $request, Item $item) { - // + $validated = $request->validated(); + + // update the items with the new data + $item->update([ + 'type' => $validated['type'], + 'name' => $validated['name'], + 'description' => $validated['description'], + 'category' => $validated['category'], + 'ISBN' => $validated['ISBN'], + 'rating' => $validated['rating'], + 'borrowing_time' => $validated['borrowing_time'], + 'modified_kind' => ModifiedEnum::modified, + 'modified_user' => auth()->id(), + ]); + + return $this->CommonResponse( + ResponseStatus::success, + 'Item updated', + $item + ); } /** @@ -60,6 +88,11 @@ public function update(Request $request, Item $item) */ public function destroy(Item $item) { - // + $item->delete(); + return $this->CommonResponse( + ResponseStatus::success, + 'Item deleted', + null, + ); } } diff --git a/src/app/Http/Controllers/LibraryPassController.php b/src/app/Http/Controllers/LibraryPassController.php index 8c0c576..4e34d25 100644 --- a/src/app/Http/Controllers/LibraryPassController.php +++ b/src/app/Http/Controllers/LibraryPassController.php @@ -2,17 +2,22 @@ namespace App\Http\Controllers; +use App\Enums\ModifiedEnum; +use App\Enums\ResponseStatus; +use App\Http\Requests\LibraryPassRequest; use App\Models\LibraryPass; use Illuminate\Http\Request; +use App\Traits\CommonTrait; class LibraryPassController extends Controller { + use CommonTrait; /** * Display a listing of the resource. */ public function index() { - // + $passes = LibraryPass::all(); } /** @@ -26,9 +31,22 @@ public function create() /** * Store a newly created resource in storage. */ - public function store(Request $request) + public function store(LibraryPassRequest $request) { - // + $validated = $request->validated(); + + $libraryPass = LibraryPass::create([ + 'user_id' => $validated['user_id'], + 'barcode' => $validated['barcode'], + 'is_active' => $validated['is_active'], + 'modified_kind' => ModifiedEnum::inserted, + 'modified_user' => auth()->id(), + ]); + + return $this->CommonResponse(ResponseStatus::created, + 'Library pass created successfully', + $libraryPass, + ); } /** @@ -50,9 +68,22 @@ public function edit(LibraryPass $libraryPass) /** * Update the specified resource in storage. */ - public function update(Request $request, LibraryPass $libraryPass) + public function update(LibraryPassRequest $request, LibraryPass $libraryPass) { - // + $validated = $request->validated(); + + $libraryPass->update([ + 'user_id' => $validated['user_id'], + 'barcode' => $validated['barcode'], + 'is_active' => $validated['is_active'], + 'modified_kind' => ModifiedEnum::modified, + 'modified_user' => auth()->user()->id, + ]); + + return $this->CommonResponse(ResponseStatus::success, + 'Library pass updated successfully', + null, + ); } /** @@ -60,6 +91,10 @@ public function update(Request $request, LibraryPass $libraryPass) */ public function destroy(LibraryPass $libraryPass) { - // + $libraryPass->delete(); + return $this->CommonResponse(ResponseStatus::success, + 'Library pass deleted successfully', + null, + ); } } diff --git a/src/app/Http/Controllers/PaymentTransactionController.php b/src/app/Http/Controllers/PaymentTransactionController.php index 30c7862..6c90dc1 100644 --- a/src/app/Http/Controllers/PaymentTransactionController.php +++ b/src/app/Http/Controllers/PaymentTransactionController.php @@ -2,11 +2,16 @@ namespace App\Http\Controllers; +use App\Enums\ModifiedEnum; +use App\Enums\ResponseStatus; +use App\Http\Requests\PaymentTransactionRequest; use App\Models\PaymentTransaction; use Illuminate\Http\Request; +use App\Traits\CommonTrait; class PaymentTransactionController extends Controller { + use CommonTrait; /** * Display a listing of the resource. */ @@ -26,9 +31,21 @@ public function create() /** * Store a newly created resource in storage. */ - public function store(Request $request) + public function store(PaymentTransactionRequest $request) { - // + $validated = $request->validated(); + $paymentTransaction = PaymentTransaction::create([ + 'fine_id' => $validated['fine_id'], + 'amount' => $validated['amount'], + 'modified_kind' => ModifiedEnum::inserted, + 'modified_user' => Auth()->id(), + ]); + + return $this->CommonResponse( + ResponseStatus::created, + 'Payment transaction created successfully', + ['paymentTransaction' => $paymentTransaction], + ); } /** @@ -36,7 +53,7 @@ public function store(Request $request) */ public function show(PaymentTransaction $paymentTransaction) { - // + } /** @@ -50,9 +67,20 @@ public function edit(PaymentTransaction $paymentTransaction) /** * Update the specified resource in storage. */ - public function update(Request $request, PaymentTransaction $paymentTransaction) + public function update(PaymentTransactionRequest $request, PaymentTransaction $paymentTransaction) { - // + $validated = $request->validated(); + $paymentTransaction->update([ + 'amount' => $validated['amount'], + 'modified_kind' => ModifiedEnum::modified, + 'modified_user' => Auth()->id(), + ]); + + return $this->CommonResponse( + ResponseStatus::success, + 'Payment transaction updated successfully', + ['paymentTransaction' => $paymentTransaction], + ); } /** @@ -60,6 +88,11 @@ public function update(Request $request, PaymentTransaction $paymentTransaction) */ public function destroy(PaymentTransaction $paymentTransaction) { - // + $paymentTransaction->delete(); + return $this->CommonResponse( + ResponseStatus::success, + 'Payment transaction deleted successfully', + null, + ); } } diff --git a/src/app/Http/Controllers/ReservationController.php b/src/app/Http/Controllers/ReservationController.php index 9c19d90..ea464ff 100644 --- a/src/app/Http/Controllers/ReservationController.php +++ b/src/app/Http/Controllers/ReservationController.php @@ -2,11 +2,16 @@ namespace App\Http\Controllers; +use App\Enums\ModifiedEnum; +use App\Enums\ResponseStatus; +use App\Http\Requests\ReserveRequest; use App\Models\Reservation; +use App\Traits\CommonTrait; use Illuminate\Http\Request; class ReservationController extends Controller { + use CommonTrait; /** * Display a listing of the resource. */ @@ -26,9 +31,22 @@ public function create() /** * Store a newly created resource in storage. */ - public function store(Request $request) + public function store(ReserveRequest $request) { - // + $validated = $request->validated(); + + $reservation = Reservation::create([ + 'user_id' => $validated['user_id'], + 'item_id' => $validated['item_id'], + 'status' => $validated['status'], + 'modified_kind' => ModifiedEnum::inserted, + 'modified_user' => auth()->id(), + ]); + + return $this->CommonResponse(ResponseStatus::created, + 'Reservation created successfully', + $reservation, + ); } /** @@ -50,9 +68,22 @@ public function edit(Reservation $reservation) /** * Update the specified resource in storage. */ - public function update(Request $request, Reservation $reservation) + public function update(ReserveRequest $request, Reservation $reservation) { - // + $validated = $request->validated(); + + $reservation->update([ + 'user_id' => $validated['user_id'], + 'item_id' => $validated['item_id'], + 'status' => $validated['status'], + 'modified_kind' => ModifiedEnum::modified, + 'modified_user' => auth()->id(), + ]); + + return $this->CommonResponse(ResponseStatus::success, + 'Reservation updated successfully', + ["reservation" => $reservation], + ); } /** @@ -60,6 +91,11 @@ public function update(Request $request, Reservation $reservation) */ public function destroy(Reservation $reservation) { - // + $reservation->delete(); + + return $this->CommonResponse(ResponseStatus::success, + 'Reservation deleted successfully', + null, + ); } } diff --git a/src/app/Http/Controllers/SessionController.php b/src/app/Http/Controllers/SessionController.php index 440b3ed..ab9532d 100644 --- a/src/app/Http/Controllers/SessionController.php +++ b/src/app/Http/Controllers/SessionController.php @@ -3,7 +3,7 @@ namespace App\Http\Controllers; use App\Enums\ResponseStatus; -use App\Http\Requests\LibraryPassReadRequest; +use App\Http\Requests\LibraryPassRequest; use App\Models\LibraryPass; use App\Models\User; use App\Traits\CommonTrait; @@ -11,7 +11,7 @@ class SessionController extends Controller { use CommonTrait; - public function auth(LibraryPassReadRequest $request) + public function auth(LibraryPassRequest $request) { $code = $request->validated()['code']; @@ -20,7 +20,6 @@ public function auth(LibraryPassReadRequest $request) ResponseStatus::validationError, 'Code is required', null, - ResponseStatus::validationError->getStatusCode() ); } @@ -31,7 +30,6 @@ public function auth(LibraryPassReadRequest $request) ResponseStatus::unauthorized, 'Incorrect code', null, - ResponseStatus::unauthorized->getStatusCode() ); } @@ -42,7 +40,6 @@ public function auth(LibraryPassReadRequest $request) ResponseStatus::unauthorized, 'Incorrect code', null, - ResponseStatus::unauthorized->getStatusCode() ); } @@ -52,7 +49,6 @@ public function auth(LibraryPassReadRequest $request) ResponseStatus::success, 'User logged in current session', ['user' => $user], - ResponseStatus::success->getStatusCode() ); } } diff --git a/src/app/Http/Requests/LibraryPassReadRequest.php b/src/app/Http/Requests/AuthorizePassRequest.php similarity index 92% rename from src/app/Http/Requests/LibraryPassReadRequest.php rename to src/app/Http/Requests/AuthorizePassRequest.php index 8551b41..521bb70 100644 --- a/src/app/Http/Requests/LibraryPassReadRequest.php +++ b/src/app/Http/Requests/AuthorizePassRequest.php @@ -5,7 +5,7 @@ use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Foundation\Http\FormRequest; -class LibraryPassReadRequest extends FormRequest +class AuthorizePassRequest extends FormRequest { /** * Determine if the user is authorized to make this request. diff --git a/src/app/Http/Requests/FineRequest.php b/src/app/Http/Requests/FineRequest.php new file mode 100644 index 0000000..6875b34 --- /dev/null +++ b/src/app/Http/Requests/FineRequest.php @@ -0,0 +1,29 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array|string> + */ + public function rules(): array + { + return [ + 'grant_id' => 'required|integer|exists:grants,id', + 'amount' => 'required|decimal:1,2', + ]; + } +} diff --git a/src/app/Http/Requests/GrantRequest.php b/src/app/Http/Requests/GrantRequest.php new file mode 100644 index 0000000..28115d3 --- /dev/null +++ b/src/app/Http/Requests/GrantRequest.php @@ -0,0 +1,31 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array|string> + */ + public function rules(): array + { + return [ + 'user_id' => 'required|integer|exists:users,id', + 'item_id' => 'required|integer|exists:items,id', + 'borrowed_date' => 'required|date', + 'return_date' => 'nullable|date', + ]; + } +} diff --git a/src/app/Http/Requests/ItemRequest.php b/src/app/Http/Requests/ItemRequest.php new file mode 100644 index 0000000..79ee120 --- /dev/null +++ b/src/app/Http/Requests/ItemRequest.php @@ -0,0 +1,35 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array|string> + */ + public function rules(): array + { + return [ + 'type' => 'required|string', + 'name' => 'required|string', + 'description' => 'required|string', + 'category' => 'required|integer|exists:item_categories,id', + 'rating' => 'required|integer|exists:item_age_ratings,id', + 'borrowing_time' => 'nullable|integer', + 'ISBN' => 'nullable|string|unique:items,ISBN', + ]; + } +} diff --git a/src/app/Http/Requests/LibraryPassRequest.php b/src/app/Http/Requests/LibraryPassRequest.php new file mode 100644 index 0000000..4b816da --- /dev/null +++ b/src/app/Http/Requests/LibraryPassRequest.php @@ -0,0 +1,31 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules(): array + { + return [ + 'user_id' => 'integer|exists:users,id', + 'barcode' => 'required|string|max:255', + 'is_active' => 'required|boolean', + ]; + } +} diff --git a/src/app/Http/Requests/PaymentTransactionRequest.php b/src/app/Http/Requests/PaymentTransactionRequest.php new file mode 100644 index 0000000..ab85bc4 --- /dev/null +++ b/src/app/Http/Requests/PaymentTransactionRequest.php @@ -0,0 +1,28 @@ +|string> + */ + public function rules(): array + { + return [ + // + ]; + } +} diff --git a/src/app/Http/Requests/ReserveRequest.php b/src/app/Http/Requests/ReserveRequest.php new file mode 100644 index 0000000..d8289cd --- /dev/null +++ b/src/app/Http/Requests/ReserveRequest.php @@ -0,0 +1,31 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array|string> + */ + public function rules(): array + { + return [ + 'user_id' => 'required|integer|exists:users,id', + 'item_id' => 'required|integer|exists:items,id', + 'expired_at' => 'required|date', + 'status' => 'required|integer|exists:reservation_statuses,id', + ]; + } +} diff --git a/src/app/Traits/CommonTrait.php b/src/app/Traits/CommonTrait.php index b788571..35f198d 100644 --- a/src/app/Traits/CommonTrait.php +++ b/src/app/Traits/CommonTrait.php @@ -17,12 +17,12 @@ trait CommonTrait { * @param int $code http status code * @return JsonResponse response formatted in json */ - public function CommonResponse(ResponseStatus $status, string $message, array|null $data, int $code): JsonResponse + public function CommonResponse(ResponseStatus $status, string $message, array|null $data): JsonResponse { return response()->json([ - 'status' => $status, + 'status' => $status->label(), 'message' => $message, 'data' => $data - ], $code); + ], $status->getStatusCode()); } } diff --git a/src/composer.lock b/src/composer.lock index 32b7ec2..43c8f5a 100644 --- a/src/composer.lock +++ b/src/composer.lock @@ -1044,16 +1044,16 @@ }, { "name": "laravel/framework", - "version": "v10.32.1", + "version": "v10.34.2", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "b30e44f20d244f7ba125283e14a8bbac167f4e5b" + "reference": "c581caa233e380610b34cc491490bfa147a3b62b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/b30e44f20d244f7ba125283e14a8bbac167f4e5b", - "reference": "b30e44f20d244f7ba125283e14a8bbac167f4e5b", + "url": "https://api.github.com/repos/laravel/framework/zipball/c581caa233e380610b34cc491490bfa147a3b62b", + "reference": "c581caa233e380610b34cc491490bfa147a3b62b", "shasum": "" }, "require": { @@ -1242,7 +1242,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-11-14T22:57:08+00:00" + "time": "2023-11-28T19:06:27+00:00" }, { "name": "laravel/prompts", @@ -3263,16 +3263,16 @@ }, { "name": "symfony/console", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0d14a9f6d04d4ac38a8cea1171f4554e325dae92" + "reference": "cd9864b47c367450e14ab32f78fdbf98c44c26b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0d14a9f6d04d4ac38a8cea1171f4554e325dae92", - "reference": "0d14a9f6d04d4ac38a8cea1171f4554e325dae92", + "url": "https://api.github.com/repos/symfony/console/zipball/cd9864b47c367450e14ab32f78fdbf98c44c26b6", + "reference": "cd9864b47c367450e14ab32f78fdbf98c44c26b6", "shasum": "" }, "require": { @@ -3280,7 +3280,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { "symfony/dependency-injection": "<5.4", @@ -3294,12 +3294,16 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -3333,7 +3337,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.8" + "source": "https://github.com/symfony/console/tree/v6.4.0" }, "funding": [ { @@ -3349,20 +3353,20 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:09:35+00:00" + "time": "2023-11-20T16:41:16+00:00" }, { "name": "symfony/css-selector", - "version": "v6.3.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "883d961421ab1709877c10ac99451632a3d6fa57" + "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/883d961421ab1709877c10ac99451632a3d6fa57", - "reference": "883d961421ab1709877c10ac99451632a3d6fa57", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/d036c6c0d0b09e24a14a35f8292146a658f986e4", + "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4", "shasum": "" }, "require": { @@ -3398,7 +3402,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.3.2" + "source": "https://github.com/symfony/css-selector/tree/v6.4.0" }, "funding": [ { @@ -3414,7 +3418,7 @@ "type": "tidelift" } ], - "time": "2023-07-12T16:00:22+00:00" + "time": "2023-10-31T08:40:20+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3485,30 +3489,31 @@ }, { "name": "symfony/error-handler", - "version": "v6.3.5", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "1f69476b64fb47105c06beef757766c376b548c4" + "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/1f69476b64fb47105c06beef757766c376b548c4", - "reference": "1f69476b64fb47105c06beef757766c376b548c4", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c873490a1c97b3a0a4838afc36ff36c112d02788", + "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "conflict": { - "symfony/deprecation-contracts": "<2.5" + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, "require-dev": { "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -3539,7 +3544,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.3.5" + "source": "https://github.com/symfony/error-handler/tree/v6.4.0" }, "funding": [ { @@ -3555,20 +3560,20 @@ "type": "tidelift" } ], - "time": "2023-09-12T06:57:20+00:00" + "time": "2023-10-18T09:43:34+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.3.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" + "reference": "d76d2632cfc2206eecb5ad2b26cd5934082941b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d76d2632cfc2206eecb5ad2b26cd5934082941b6", + "reference": "d76d2632cfc2206eecb5ad2b26cd5934082941b6", "shasum": "" }, "require": { @@ -3585,13 +3590,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0" + "symfony/stopwatch": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -3619,7 +3624,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.0" }, "funding": [ { @@ -3635,7 +3640,7 @@ "type": "tidelift" } ], - "time": "2023-07-06T06:56:43+00:00" + "time": "2023-07-27T06:52:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -3715,23 +3720,23 @@ }, { "name": "symfony/finder", - "version": "v6.3.5", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4" + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a1b31d88c0e998168ca7792f222cbecee47428c4", - "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4", + "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { - "symfony/filesystem": "^6.0" + "symfony/filesystem": "^6.0|^7.0" }, "type": "library", "autoload": { @@ -3759,7 +3764,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.3.5" + "source": "https://github.com/symfony/finder/tree/v6.4.0" }, "funding": [ { @@ -3775,20 +3780,20 @@ "type": "tidelift" } ], - "time": "2023-09-26T12:56:25+00:00" + "time": "2023-10-31T17:30:12+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ce332676de1912c4389222987193c3ef38033df6" + "reference": "44a6d39a9cc11e154547d882d5aac1e014440771" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ce332676de1912c4389222987193c3ef38033df6", - "reference": "ce332676de1912c4389222987193c3ef38033df6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/44a6d39a9cc11e154547d882d5aac1e014440771", + "reference": "44a6d39a9cc11e154547d882d5aac1e014440771", "shasum": "" }, "require": { @@ -3803,12 +3808,12 @@ "require-dev": { "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^5.4|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" + "symfony/cache": "^6.3|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -3836,7 +3841,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.8" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.0" }, "funding": [ { @@ -3852,29 +3857,29 @@ "type": "tidelift" } ], - "time": "2023-11-07T10:17:15+00:00" + "time": "2023-11-20T16:41:16+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "929202375ccf44a309c34aeca8305408442ebcc1" + "reference": "16a29c453966f29466ad34444ce97970a336f3c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/929202375ccf44a309c34aeca8305408442ebcc1", - "reference": "929202375ccf44a309c34aeca8305408442ebcc1", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/16a29c453966f29466ad34444ce97970a336f3c8", + "reference": "16a29c453966f29466ad34444ce97970a336f3c8", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^6.3.4", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -3882,7 +3887,7 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.3.4", + "symfony/dependency-injection": "<6.4", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", @@ -3892,7 +3897,7 @@ "symfony/translation": "<5.4", "symfony/translation-contracts": "<2.5", "symfony/twig-bridge": "<5.4", - "symfony/validator": "<5.4", + "symfony/validator": "<6.4", "symfony/var-dumper": "<6.3", "twig/twig": "<2.13" }, @@ -3901,26 +3906,26 @@ }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/clock": "^6.2", - "symfony/config": "^6.1", - "symfony/console": "^5.4|^6.0", - "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.3.4", - "symfony/dom-crawler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^5.4|^6.0", - "symfony/property-access": "^5.4.5|^6.0.5", - "symfony/routing": "^5.4|^6.0", - "symfony/serializer": "^6.3", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4.5|^6.0.5|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.3|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0", - "symfony/validator": "^6.3", - "symfony/var-exporter": "^6.2", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-exporter": "^6.2|^7.0", "twig/twig": "^2.13|^3.0.4" }, "type": "library", @@ -3949,7 +3954,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.3.8" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.0" }, "funding": [ { @@ -3965,20 +3970,20 @@ "type": "tidelift" } ], - "time": "2023-11-10T13:47:32+00:00" + "time": "2023-11-29T10:40:15+00:00" }, { "name": "symfony/mailer", - "version": "v6.3.5", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "d89611a7830d51b5e118bca38e390dea92f9ea06" + "reference": "ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/d89611a7830d51b5e118bca38e390dea92f9ea06", - "reference": "d89611a7830d51b5e118bca38e390dea92f9ea06", + "url": "https://api.github.com/repos/symfony/mailer/zipball/ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba", + "reference": "ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba", "shasum": "" }, "require": { @@ -3986,8 +3991,8 @@ "php": ">=8.1", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/mime": "^6.2", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/mime": "^6.2|^7.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -3998,10 +4003,10 @@ "symfony/twig-bridge": "<6.2.1" }, "require-dev": { - "symfony/console": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/messenger": "^6.2", - "symfony/twig-bridge": "^6.2" + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/messenger": "^6.2|^7.0", + "symfony/twig-bridge": "^6.2|^7.0" }, "type": "library", "autoload": { @@ -4029,7 +4034,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.3.5" + "source": "https://github.com/symfony/mailer/tree/v6.4.0" }, "funding": [ { @@ -4045,20 +4050,20 @@ "type": "tidelift" } ], - "time": "2023-09-06T09:47:15+00:00" + "time": "2023-11-12T18:02:22+00:00" }, { "name": "symfony/mime", - "version": "v6.3.5", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e" + "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/d5179eedf1cb2946dbd760475ebf05c251ef6a6e", - "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e", + "url": "https://api.github.com/repos/symfony/mime/zipball/ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", + "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", "shasum": "" }, "require": { @@ -4072,16 +4077,16 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<5.4", - "symfony/serializer": "<6.2.13|>=6.3,<6.3.2" + "symfony/serializer": "<6.3.2" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "~6.2.13|^6.3.2" + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.3.2|^7.0" }, "type": "library", "autoload": { @@ -4113,7 +4118,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.3.5" + "source": "https://github.com/symfony/mime/tree/v6.4.0" }, "funding": [ { @@ -4129,7 +4134,7 @@ "type": "tidelift" } ], - "time": "2023-09-29T06:59:36+00:00" + "time": "2023-10-17T11:49:05+00:00" }, { "name": "symfony/polyfill-ctype", @@ -4871,16 +4876,16 @@ }, { "name": "symfony/process", - "version": "v6.3.4", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" + "reference": "191703b1566d97a5425dc969e4350d32b8ef17aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", + "url": "https://api.github.com/repos/symfony/process/zipball/191703b1566d97a5425dc969e4350d32b8ef17aa", + "reference": "191703b1566d97a5425dc969e4350d32b8ef17aa", "shasum": "" }, "require": { @@ -4912,7 +4917,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.3.4" + "source": "https://github.com/symfony/process/tree/v6.4.0" }, "funding": [ { @@ -4928,20 +4933,20 @@ "type": "tidelift" } ], - "time": "2023-08-07T10:39:22+00:00" + "time": "2023-11-17T21:06:49+00:00" }, { "name": "symfony/routing", - "version": "v6.3.5", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "82616e59acd3e3d9c916bba798326cb7796d7d31" + "reference": "ae014d60d7c8e80be5c3b644a286e91249a3e8f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/82616e59acd3e3d9c916bba798326cb7796d7d31", - "reference": "82616e59acd3e3d9c916bba798326cb7796d7d31", + "url": "https://api.github.com/repos/symfony/routing/zipball/ae014d60d7c8e80be5c3b644a286e91249a3e8f4", + "reference": "ae014d60d7c8e80be5c3b644a286e91249a3e8f4", "shasum": "" }, "require": { @@ -4957,11 +4962,11 @@ "require-dev": { "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "symfony/config": "^6.2|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -4995,7 +5000,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.3.5" + "source": "https://github.com/symfony/routing/tree/v6.4.0" }, "funding": [ { @@ -5011,7 +5016,7 @@ "type": "tidelift" } ], - "time": "2023-09-20T16:05:51+00:00" + "time": "2023-11-29T08:04:54+00:00" }, { "name": "symfony/service-contracts", @@ -5097,16 +5102,16 @@ }, { "name": "symfony/string", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "13880a87790c76ef994c91e87efb96134522577a" + "reference": "b45fcf399ea9c3af543a92edf7172ba21174d809" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/13880a87790c76ef994c91e87efb96134522577a", - "reference": "13880a87790c76ef994c91e87efb96134522577a", + "url": "https://api.github.com/repos/symfony/string/zipball/b45fcf399ea9c3af543a92edf7172ba21174d809", + "reference": "b45fcf399ea9c3af543a92edf7172ba21174d809", "shasum": "" }, "require": { @@ -5120,11 +5125,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -5163,7 +5168,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.8" + "source": "https://github.com/symfony/string/tree/v6.4.0" }, "funding": [ { @@ -5179,20 +5184,20 @@ "type": "tidelift" } ], - "time": "2023-11-09T08:28:21+00:00" + "time": "2023-11-28T20:41:49+00:00" }, { "name": "symfony/translation", - "version": "v6.3.7", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "30212e7c87dcb79c83f6362b00bde0e0b1213499" + "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/30212e7c87dcb79c83f6362b00bde0e0b1213499", - "reference": "30212e7c87dcb79c83f6362b00bde0e0b1213499", + "url": "https://api.github.com/repos/symfony/translation/zipball/b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37", + "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37", "shasum": "" }, "require": { @@ -5217,17 +5222,17 @@ "require-dev": { "nikic/php-parser": "^4.13", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0" + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -5258,7 +5263,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.3.7" + "source": "https://github.com/symfony/translation/tree/v6.4.0" }, "funding": [ { @@ -5274,7 +5279,7 @@ "type": "tidelift" } ], - "time": "2023-10-28T23:11:45+00:00" + "time": "2023-11-29T08:14:36+00:00" }, { "name": "symfony/translation-contracts", @@ -5356,16 +5361,16 @@ }, { "name": "symfony/uid", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "819fa5ac210fb7ddda4752b91a82f50be7493dd9" + "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/819fa5ac210fb7ddda4752b91a82f50be7493dd9", - "reference": "819fa5ac210fb7ddda4752b91a82f50be7493dd9", + "url": "https://api.github.com/repos/symfony/uid/zipball/8092dd1b1a41372110d06374f99ee62f7f0b9a92", + "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92", "shasum": "" }, "require": { @@ -5373,7 +5378,7 @@ "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0" + "symfony/console": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -5410,7 +5415,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.3.8" + "source": "https://github.com/symfony/uid/tree/v6.4.0" }, "funding": [ { @@ -5426,20 +5431,20 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:07:48+00:00" + "time": "2023-10-31T08:18:17+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "81acabba9046550e89634876ca64bfcd3c06aa0a" + "reference": "c40f7d17e91d8b407582ed51a2bbf83c52c367f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/81acabba9046550e89634876ca64bfcd3c06aa0a", - "reference": "81acabba9046550e89634876ca64bfcd3c06aa0a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c40f7d17e91d8b407582ed51a2bbf83c52c367f6", + "reference": "c40f7d17e91d8b407582ed51a2bbf83c52c367f6", "shasum": "" }, "require": { @@ -5452,10 +5457,11 @@ }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^6.3|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.0", "twig/twig": "^2.13|^3.0.4" }, "bin": [ @@ -5494,7 +5500,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.3.8" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.0" }, "funding": [ { @@ -5510,7 +5516,7 @@ "type": "tidelift" } ], - "time": "2023-11-08T10:42:36+00:00" + "time": "2023-11-09T08:28:32+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -6041,16 +6047,16 @@ }, { "name": "laravel/sail", - "version": "v1.26.0", + "version": "v1.26.2", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "c60fe037004e272efd0d81f416ed2bfc623d70b4" + "reference": "c0177786b1cd05b687b0fa11364aeeecb42cd3d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/c60fe037004e272efd0d81f416ed2bfc623d70b4", - "reference": "c60fe037004e272efd0d81f416ed2bfc623d70b4", + "url": "https://api.github.com/repos/laravel/sail/zipball/c0177786b1cd05b687b0fa11364aeeecb42cd3d8", + "reference": "c0177786b1cd05b687b0fa11364aeeecb42cd3d8", "shasum": "" }, "require": { @@ -6102,7 +6108,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2023-10-18T13:57:15+00:00" + "time": "2023-11-27T14:46:06+00:00" }, { "name": "mockery/mockery", @@ -6457,16 +6463,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "10.1.8", + "version": "10.1.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "84838eed9ded511f61dc3e8b5944a52d9017b297" + "reference": "a56a9ab2f680246adcf3db43f38ddf1765774735" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/84838eed9ded511f61dc3e8b5944a52d9017b297", - "reference": "84838eed9ded511f61dc3e8b5944a52d9017b297", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/a56a9ab2f680246adcf3db43f38ddf1765774735", + "reference": "a56a9ab2f680246adcf3db43f38ddf1765774735", "shasum": "" }, "require": { @@ -6523,7 +6529,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.8" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.9" }, "funding": [ { @@ -6531,7 +6537,7 @@ "type": "github" } ], - "time": "2023-11-15T13:31:15+00:00" + "time": "2023-11-23T12:23:20+00:00" }, { "name": "phpunit/php-file-iterator", @@ -8101,16 +8107,16 @@ }, { "name": "symfony/yaml", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "3493af8a8dad7fa91c77fa473ba23ecd95334a92" + "reference": "4f9237a1bb42455d609e6687d2613dde5b41a587" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/3493af8a8dad7fa91c77fa473ba23ecd95334a92", - "reference": "3493af8a8dad7fa91c77fa473ba23ecd95334a92", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4f9237a1bb42455d609e6687d2613dde5b41a587", + "reference": "4f9237a1bb42455d609e6687d2613dde5b41a587", "shasum": "" }, "require": { @@ -8122,7 +8128,7 @@ "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0" + "symfony/console": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -8153,7 +8159,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.3.8" + "source": "https://github.com/symfony/yaml/tree/v6.4.0" }, "funding": [ { @@ -8169,7 +8175,7 @@ "type": "tidelift" } ], - "time": "2023-11-06T10:58:05+00:00" + "time": "2023-11-06T11:00:25+00:00" }, { "name": "theseer/tokenizer", diff --git a/src/database/migrations/2023_12_04_125056_create_fines_table.php b/src/database/migrations/2023_12_04_125056_create_fines_table.php index 0527ad9..fd73bb4 100644 --- a/src/database/migrations/2023_12_04_125056_create_fines_table.php +++ b/src/database/migrations/2023_12_04_125056_create_fines_table.php @@ -13,10 +13,10 @@ public function up(): void { Schema::create('fines', function (Blueprint $table) { $table->id(); - $table->char('modified_kind' ,1)->default('I'); $table->unsignedBigInteger('grant_id'); $table->foreign('grant_id')->references('id')->on('grants')->onDelete("cascade"); $table->double('amount'); + $table->char('modified_kind' ,1)->default('I'); $table->unsignedBigInteger('modified_user'); $table->foreign('modified_user')->references('id')->on('users')->onDelete("cascade"); $table->timestamps(); diff --git a/src/package-lock.json b/src/package-lock.json index 1893add..d7c127b 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -8,7 +8,8 @@ "@inertiajs/vue3": "^1.0.14", "@vitejs/plugin-vue": "^4.5.0", "pinia": "^2.1.7", - "vue": "^3.3.8" + "vue": "^3.3.8", + "vue-toastification": "^2.0.0-rc.5" }, "devDependencies": { "axios": "^1.6.1", @@ -1257,6 +1258,14 @@ "optional": true } } + }, + "node_modules/vue-toastification": { + "version": "2.0.0-rc.5", + "resolved": "https://registry.npmjs.org/vue-toastification/-/vue-toastification-2.0.0-rc.5.tgz", + "integrity": "sha512-q73e5jy6gucEO/U+P48hqX+/qyXDozAGmaGgLFm5tXX4wJBcVsnGp4e/iJqlm9xzHETYOilUuwOUje2Qg1JdwA==", + "peerDependencies": { + "vue": "^3.0.2" + } } } } diff --git a/src/package.json b/src/package.json index 786b6a8..3e16a40 100644 --- a/src/package.json +++ b/src/package.json @@ -15,6 +15,7 @@ "@inertiajs/vue3": "^1.0.14", "@vitejs/plugin-vue": "^4.5.0", "pinia": "^2.1.7", - "vue": "^3.3.8" + "vue": "^3.3.8", + "vue-toastification": "^2.0.0-rc.5" } } diff --git a/src/resources/js/app.js b/src/resources/js/app.js index a76ba50..559286d 100644 --- a/src/resources/js/app.js +++ b/src/resources/js/app.js @@ -2,18 +2,21 @@ import './bootstrap'; import { createApp, h } from 'vue' import { createPinia } from 'pinia' import { createInertiaApp } from '@inertiajs/vue3' +import ToastPlugin from "vue-toastification"; +import "vue-toastification/dist/index.css"; import '../vue/scss/global.scss' import '../vue/scss/variables.scss' createInertiaApp({ - resolve: name => { - const pages = import.meta.glob('../vue/pages/**/*.vue', { eager: true }) - return pages[`../vue/pages/${name}.vue`] - }, - setup({ el, App, props, plugin }) { - createApp({ render: () => h(App, props) }) - .use(plugin) - .use(createPinia()) - .mount(el) - }, + resolve: name => { + const pages = import.meta.glob('../vue/pages/**/*.vue', { eager: true }) + return pages[`../vue/pages/${name}.vue`] + }, + setup({ el, App, props, plugin }) { + createApp({ render: () => h(App, props) }) + .use(plugin) + .use(createPinia()) + .use(ToastPlugin) + .mount(el) + }, }) diff --git a/src/resources/vue/Icons/scan-item.svg b/src/resources/vue/Icons/scan-item.svg new file mode 100644 index 0000000..d5480a8 --- /dev/null +++ b/src/resources/vue/Icons/scan-item.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/resources/vue/components/Box.vue b/src/resources/vue/components/Box.vue new file mode 100644 index 0000000..f69ed97 --- /dev/null +++ b/src/resources/vue/components/Box.vue @@ -0,0 +1,27 @@ + + + \ No newline at end of file diff --git a/src/resources/vue/components/Button.vue b/src/resources/vue/components/Button.vue new file mode 100644 index 0000000..8ddbbbd --- /dev/null +++ b/src/resources/vue/components/Button.vue @@ -0,0 +1,57 @@ + + + + + \ No newline at end of file diff --git a/src/resources/vue/components/Input.vue b/src/resources/vue/components/Input.vue new file mode 100644 index 0000000..257c8db --- /dev/null +++ b/src/resources/vue/components/Input.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/src/resources/vue/components/ItemCard.vue b/src/resources/vue/components/ItemCard.vue new file mode 100644 index 0000000..bfa62da --- /dev/null +++ b/src/resources/vue/components/ItemCard.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/src/resources/vue/components/icon.vue b/src/resources/vue/components/icon.vue new file mode 100644 index 0000000..b20a4b1 --- /dev/null +++ b/src/resources/vue/components/icon.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/src/resources/vue/components/rating.vue b/src/resources/vue/components/rating.vue new file mode 100644 index 0000000..51db3d3 --- /dev/null +++ b/src/resources/vue/components/rating.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/src/resources/vue/components/terminal-scan.vue b/src/resources/vue/components/terminal-scan.vue new file mode 100644 index 0000000..1edfbce --- /dev/null +++ b/src/resources/vue/components/terminal-scan.vue @@ -0,0 +1,61 @@ + + + \ No newline at end of file diff --git a/src/resources/vue/pages/index.vue b/src/resources/vue/pages/index.vue index 187f504..505b780 100644 --- a/src/resources/vue/pages/index.vue +++ b/src/resources/vue/pages/index.vue @@ -1,32 +1,8 @@ - - - + \ No newline at end of file diff --git a/src/resources/vue/scss/global.scss b/src/resources/vue/scss/global.scss index 2779aea..ab61050 100644 --- a/src/resources/vue/scss/global.scss +++ b/src/resources/vue/scss/global.scss @@ -1,3 +1,4 @@ +@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@100;200;300;400;500;600;700;800;900&display=swap'); @import './variables.scss'; html, @@ -14,4 +15,9 @@ h4, h5, h6 { font-weight: bold; -} \ No newline at end of file + margin: 0; +} + +p { + margin: 0; +} diff --git a/src/routes/api.php b/src/routes/api.php index 889937e..35f3522 100644 --- a/src/routes/api.php +++ b/src/routes/api.php @@ -16,4 +16,4 @@ Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); -}); +}); \ No newline at end of file