12. En la API se guardan los votos
Hace 2 o 3 días hablaba sobre el local storage
y la necesidad de no contar con él para almacenar los datos en el cliente.
Queremos tener votaciones de cada Quote
y lo primero, según mi forma de entender el desarrollo, es crear el armazón con la lógica de negocio y el almacenamiento.
Con artisan
es muy sencillo crear nuevos modelos a partir de snippets de código prefabricados por el propio Laravel.
De esta forma:
php artisan make:model Vote -mfc
Creará:
- Modelo
Vote
- Controlador
VoteController
- Factoría
VoteFactory
- Migración para las tablas del modelo.
Los datos que queremos almacenar de cada voto son:
- Identificador del voto
- Estado. Por defecto a
true
. Así podríamos "cancelar" el voto pero dejarlo almacenado. - Usuario que lo ha ejecutado (de momento le asignaremos siempre el usuario 1)
- Modelo contra el que se vota.
- Valor del voto:
up
ydown
No voy ahora a controlar el usuario que crea el voto ni a autenticarlo. Queremos "correr" para centrarnos en el trabajo en el frontend que es lo que más verde tengo.
Por otra parte el modelo que se vota es Quote
pero quiero dejar preparado el modelo para que acepte votar contra Author
o cualquier otra cosa.
Hacemos uso de las relaciones polímórficas y el resultado del "corazón" del voto es:
class Vote extends BaseModel{public function user(){return $this->belongsTo(User::class);}public function voteable(){return $this->morphTo();}}
Por su parte en Quote
añadimos:
public function votes(){return $this->morphMany(Vote::class, 'voteable')->where('status', 1);}
Todo sobre ruedas creando las rutas de endpoint para añadir el voto y la modificación. Deberíamos crear también el del borrado.