Мутим бэк и фронт по тихой

This commit is contained in:
Dhaverd 2024-10-27 21:50:34 +08:00
parent 77ca442f2e
commit b02f61fac5
8 changed files with 154 additions and 14 deletions

View File

@ -0,0 +1,45 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Wish;
class WishesController extends Controller
{
public function getUserWishes(Request $request, string $user_id)
{
return Wish::where('user_id', '=', $user_id)->get();
}
public function create(Request $request)
{
$request->validate([
'user_id' => 'required|exists:users,id',
'name' => 'required|string|max:256',
'price' => 'nullable|numeric',
'url' => 'nullable|url',
]);
$wish = Wish::create($request->all());
return response()->json($wish, 201);
}
public function update(Request $request, Wish $wish)
{
$request->validate([
'name' => 'required|string|max:256',
'price' => 'nullable|numeric',
'url' => 'nullable|url',
]);
$wish->update($request->all());
return response()->json($wish);
}
public function destroy(Wish $wish)
{
$wish->delete();
return response()->json(null, 204);
}
}

16
app/Models/Wish.php Normal file
View File

@ -0,0 +1,16 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Wish extends Model
{
use HasFactory;
protected $fillable = ['user_id', 'name', 'price', 'url'];
public function user(){
return $this->belongsTo(User::class);
}
}

View File

@ -0,0 +1,9 @@
.link-no-decor {
color: white;
text-decoration: none;
cursor: pointer;
}
.link-no-decor:hover {
color: #093160;
}

View File

@ -6,8 +6,6 @@ export const useUserStore = defineStore('user', {
user: null,
token: localStorage.getItem('auth_token') || null,
}),
// could also be defined as
// state: () => ({ count: 0 })
actions: {
setUser(user) {
this.user = user;

47
resources/store/wish.js Normal file
View File

@ -0,0 +1,47 @@
import {defineStore} from 'pinia';
import axios from "axios";
export const useWishStore = defineStore('wish', {
state: () => ({
wishesList: []
}),
actions: {
pushWish(wish){
this.wishesList.push(wish);
},
async getUserWishes(user_id, token){
let result = null;
await axios.get(`/api/wish/user_wishes/${user_id.toString()}`,
{
headers: {
Authorization: `Bearer ${token}`,
token: token
}
}
).then((response)=>{
result = response.data;
});
return result;
},
async create(user_id, name, price, url, token){
let newWish = null;
await axios.post(`/api/wish/create`,
{
user_id: user_id,
name: name,
price: price,
url: url
},
{
headers: {
Authorization: `Bearer ${token}`,
token: token
},
}
).then((response)=>{
newWish = {status: response.status, statusText: response.statusText, data: response.data};
});
return newWish;
}
},
})

View File

@ -68,14 +68,4 @@ export default {
color: white;
}
.link-no-decor {
color: white;
text-decoration: none;
cursor: pointer;
}
.link-no-decor:hover {
color: #093160;
}
</style>

View File

@ -1,11 +1,36 @@
<script>
import {useUserStore} from "../../store/user.js";
import {useWishStore} from "../../store/wish.js";
import axios from "axios";
export default {
name: "Wishlist"
name: "Wishlist",
data: () => ({
userStore: useUserStore(),
wishStore: useWishStore()
}),
methods: {
tryWishes(){
let token = this.userStore.token;
let user_id = this.userStore.user['id'];
// get wish list
this.wishStore.getUserWishes(user_id, token).then((result)=>{
console.log(result);
// push new wish
this.wishStore.create(user_id, 'Google', 42000, 'http://google.com/', token).then((response)=>{
console.log(response);
// get wish list
this.wishStore.getUserWishes(user_id, token).then((resultOfResponse)=>{
console.log(resultOfResponse);
});
});
});
}
}
}
</script>
<template>
<v-label>Hello world!</v-label>
<v-label class="link-no-decor" @click="this.tryWishes">Hello world!</v-label>
</template>
<style scoped>

View File

@ -3,6 +3,7 @@
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AuthController;
use \App\Http\Controllers\WishesController;
/*
|--------------------------------------------------------------------------
@ -28,3 +29,12 @@ Route::group(['prefix' => 'auth'], function () {
Route::get('user', [AuthController::class, 'user']);
});
});
Route::group(['prefix' => 'wish'], function () {
Route::get('user_wishes/{user_id}', [WishesController::class, 'getUserWishes']);
Route::group(['middleware' => 'auth:sanctum'], function() {
Route::post('create', [WishesController::class, 'create']);
Route::post('update', [WishesController::class, 'update']);
Route::post('destroy', [WishesController::class, 'destroy']);
});
});