From fbc0ebc4c7a6eb3f3345abe6eca102b0aca79aed Mon Sep 17 00:00:00 2001 From: Immanuel Onyeka Date: Mon, 31 May 2021 16:30:34 -0400 Subject: [PATCH] Insert new orders into the database --- app/Http/Controllers/Transaction.php | 10 ---- .../Controllers/TransactionController.php | 24 ++++++++ app/Http/Controllers/UserController.php | 2 +- ...021_05_18_184617_create_services_table.php | 2 + resources/js/panel/panel.vue | 32 +++++++++-- resources/js/panel/services.vue | 57 +++++++++++++++---- resources/js/panel/settings.vue | 2 +- resources/scss/main.scss | 11 ++++ routes/web.php | 5 ++ 9 files changed, 118 insertions(+), 27 deletions(-) delete mode 100644 app/Http/Controllers/Transaction.php create mode 100644 app/Http/Controllers/TransactionController.php diff --git a/app/Http/Controllers/Transaction.php b/app/Http/Controllers/Transaction.php deleted file mode 100644 index a408a23..0000000 --- a/app/Http/Controllers/Transaction.php +++ /dev/null @@ -1,10 +0,0 @@ -service_id = $request->service; + $order->user_id = Auth::user()->id; + $order->quantity = $request->quantity; + $order->url = $request->url; + $order->note = $request->note ?: ''; + $order->status = 'processing'; + $order->save(); + } +} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 804edca..ed77c55 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -87,7 +87,7 @@ class UserController extends Controller public function getOrders(Request $request) { /* Log::debug(Auth::user()->orders()->service_name); */ return Auth::user()->orders()->with('service')->withCasts(['updated_at' - => 'datetime:d-m-Y'])->get(); + => 'datetime:d-m-Y'])->latest()->get(); } public function changeName(Request $request) { diff --git a/database/migrations/2021_05_18_184617_create_services_table.php b/database/migrations/2021_05_18_184617_create_services_table.php index 36aa3d3..869c82d 100644 --- a/database/migrations/2021_05_18_184617_create_services_table.php +++ b/database/migrations/2021_05_18_184617_create_services_table.php @@ -20,6 +20,8 @@ class CreateServicesTable extends Migration $table->string('name'); $table->string('type')->nullable(); $table->string('site'); + $table->string('supplier')->nullable(); + $table->string('supplier_link')->nullable(); $table->string('modifier')->default(''); $table->integer('maximum'); $table->integer('minimum'); diff --git a/resources/js/panel/panel.vue b/resources/js/panel/panel.vue index 4f23209..a22e518 100644 --- a/resources/js/panel/panel.vue +++ b/resources/js/panel/panel.vue @@ -28,7 +28,8 @@ - +
@@ -61,15 +62,28 @@ import NewOrder from './services.vue' /* }) */ /* } */ +function updateUser() { + fetch("/panel/user", { + method: 'GET', + headers: {'Content-Type': 'application/json', + 'Accept': 'application/json', + 'X-XSRF-TOKEN': this.token}, + }).then(response => { + return response.json() + }).then(data => { + this.user = data + }) +} + export default { components: { Sidebar, Settings, PastOrders, NewOrder }, data() { - return {active: window.location.hash, user: '', - token: '', orders: '', loading: true} + return {active: window.location.hash, user: null, + token: null, orders: null, loading: true} }, - methods: {}, + methods: {updateUser}, created() { fetch("/panel/services", { method: 'GET', @@ -78,7 +92,15 @@ export default { 'X-XSRF-TOKEN': this.token} }).then(response => { response.json().then(data => {this.services = data; this.loading = false}) - }) + }).then( + fetch("/panel/services", { + method: 'GET', + headers: {'Content-Type': 'application/json', + 'Accept': 'application/json', + 'X-XSRF-TOKEN': this.token} + }).then(response => { + response.json().then(data => {this.services = data; this.loading = false}) + })) } } diff --git a/resources/js/panel/services.vue b/resources/js/panel/services.vue index eedd657..18e4225 100644 --- a/resources/js/panel/services.vue +++ b/resources/js/panel/services.vue @@ -3,9 +3,9 @@
- +
+

Credits: {{credits}}

Name
Credits per 1000
Min Qt.
Max Qt.
@@ -13,8 +13,8 @@
-
- +
+ @@ -34,9 +34,14 @@

URL

-
+
-

+

+
+
+ + +

Success!

@@ -47,6 +52,7 @@ import ServicePane from './service-pane.vue' import Loading from '../icons/loading.vue' function select(service) { + this.completed = false this.selected = service } @@ -55,17 +61,47 @@ function cost() { } function buyService() { + if (!this.url) { + document.getElementById('overlay-error').textContent = "You must provide a URL." + return + } this.paying = true - return + let note = '' + let country = document.getElementById('country') + + if (country) { + note = JSON.stringify({'location': country.value}) + } + + fetch('/panel/orders', { + method: 'POST', + headers: {'Content-Type': 'application/json', + 'Accept': 'application/json', + 'X-XSRF-TOKEN': this.token}, + body: JSON.stringify({'service': this.selected.id, + 'quantity': this.amount, 'url': this.url, 'note': note}), }).then( + response => { + if (response.ok) { + document.getElementById('overlay-error').textContent = `Success!` + this.completed = true + this.$emit('updateUser') + } else { + document.getElementById('overlay-error').textContent = `Error + ${response.status}: ${response.statusText}` + } + this.paying = false + } + ) + } export default { data() { return {servicePane: true, services: null, selected: null, amount: 0, - paying: false } + paying: false, url: '', completed: false} }, components: {ServicePane, Loading}, - props: ['token'], + props: ['token', 'credits'], created() { fetch("/panel/services", { method: 'GET', @@ -77,6 +113,7 @@ export default { }) }, methods: {select, buyService}, - computed: {cost} + computed: {cost}, + emits: ['updateUser'] } diff --git a/resources/js/panel/settings.vue b/resources/js/panel/settings.vue index ddcbc6d..4c97711 100644 --- a/resources/js/panel/settings.vue +++ b/resources/js/panel/settings.vue @@ -16,7 +16,7 @@

Change Password

Current Password
-
New Password
+
New Password
Confirm Password
diff --git a/resources/scss/main.scss b/resources/scss/main.scss index 4f43d8e..322e844 100644 --- a/resources/scss/main.scss +++ b/resources/scss/main.scss @@ -1132,9 +1132,20 @@ main.panel { width: 100%; } + p { + margin-top: 2em; + text-align: center; + } + } button .loading-icon { display: inline; height: 1.5em; } + +#panel #main .credits-display { + text-align: center; + margin: 1em; + color: vars.getColor('brand-orange'); +} diff --git a/routes/web.php b/routes/web.php index b3495f9..74c370c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -3,6 +3,7 @@ use Illuminate\Support\Facades\Route; use App\Http\Controllers\UserController; use App\Http\Controllers\ServiceController; +use App\Http\Controllers\TransactionController; use Illuminate\Foundation\Auth\EmailVerificationRequest; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; @@ -81,3 +82,7 @@ Route::post('/panel/change-password', [UserController::class, Route::get('/reset-email', [UserController::class, 'resetEmail'])->name('reset-email'); + +Route::post('/panel/orders', [TransactionController::class, + 'newOrder'])->middleware([ 'auth', 'verified' ]); +