Agregada store de vuex para guardar información de la sesión tras login + ruta y controller + resource reducido de grupo de compra para pedidos

This commit is contained in:
Alejandro Tasistro 2025-05-18 17:34:14 -03:00
parent 6d3173cd1f
commit a485994a72
7 changed files with 115 additions and 0 deletions

View file

@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api;
use App\GrupoDeCompra;
use App\Http\Controllers\Controller;
use App\Http\Resources\GrupoDeCompraReducidoResource;
use App\Http\Resources\GrupoDeCompraResource;
class GrupoDeCompraController extends Controller
@ -16,4 +17,8 @@ class GrupoDeCompraController extends Controller
{
return new GrupoDeCompraResource($grupoDeCompra);
}
public function reducido(GrupoDeCompra $grupoDeCompra)
{
return new GrupoDeCompraReducidoResource($grupoDeCompra);
}
}

View file

@ -0,0 +1,39 @@
<?php
namespace App\Http\Controllers;
use App\GrupoDeCompra;
use App\Http\Resources\GrupoDeCompraReducidoResource;
use App\Http\Resources\GrupoDeCompraResource;
use App\UserRole;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\User;
use Illuminate\Support\Facades\Log;
class UserController extends Controller
{
public function session(Request $request)
{
$user = Auth::user();
$role = UserRole::find($user->role_id);
$grupo_de_compra = GrupoDeCompra::find($user->grupo_de_compra_id);
$result = [
'role_id' => $user->role_id,
'grupo_de_compra' => null,
];
switch ($role->nombre ?? 'error') {
case 'barrio':
$result['grupo_de_compra'] = new GrupoDeCompraReducidoResource($grupo_de_compra);
break;
case 'admin_barrio':
$result['grupo_de_compra'] = new GrupoDeCompraResource($grupo_de_compra);
break;
case 'comision':
break;
default:
abort(400, 'Rol invalido');
}
return $result;
}
}

View file

@ -0,0 +1,22 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class GrupoDeCompraReducidoResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request): array {
return [
'id' => $this->id,
'nombre' => $this->nombre,
'devoluciones_habilitadas' => $this->devoluciones_habilitadas,
];
}
}

2
resources/js/app.js vendored
View file

@ -18,6 +18,7 @@ window.bulmaToast = require('bulma-toast');
* Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
*/
import './components';
import store from "./store";
/**
* Constants
@ -78,6 +79,7 @@ const app = new Vue({
}
},
mounted() {
store.dispatch('session/fetchSession');
Event.$on('obtener-sesion', () => {
axios.get('/subpedidos/obtener_sesion')
.then(response => {

11
resources/js/store/index.js vendored Normal file
View file

@ -0,0 +1,11 @@
import Vue from 'vue';
import Vuex from 'vuex';
import session from './modules/session';
Vue.use(Vuex);
export default new Vuex.Store({
modules: {
session,
},
});

32
resources/js/store/modules/session.js vendored Normal file
View file

@ -0,0 +1,32 @@
const state = {
role_id: null,
grupo_de_compra_id: null,
};
const mutations = {
SET_SESSION(state, { role_id, grupo_de_compra_id }) {
state.role_id = role_id;
state.grupo_de_compra_id = grupo_de_compra_id;
},
};
const actions = {
async fetchSession({ commit }) {
const response = await axios.get('/session');
console.log(response.data);
commit('SET_SESSION', {
role_id: response.data.role_id,
grupo_de_compra_id: response.data.grupo_de_compra_id,
});
},
};
const getters = {};
export default {
namespaced: true,
state,
mutations,
actions,
getters,
};

View file

@ -24,6 +24,10 @@ Auth::routes(['register' => false]);
Route::get('/', 'RouteController@home')->name('home');
Route::middleware('auth')->group(function () {
Route::get('/session', 'UserController@session')->name('session');
});
Route::middleware(['auth', 'role:barrio'])->group( function() {
Route::get('/productos', 'ProductoController@index')->name('productos.index');