Implementado update_object_conditions() pero non actualiza. Cambio comando de 'abrir' a 'cerrar' por comodidade cos exemplos

This commit is contained in:
serxoz 2022-09-24 22:02:22 +02:00
parent f8bc805dce
commit 952acda755
3 changed files with 29 additions and 15 deletions

View File

@ -42,6 +42,15 @@ pub fn update_object_location(pegatina: String, new_location: String) -> Result<
.execute(conn) .execute(conn)
} }
// actualiza as condiciós de un obxeto, devolve o número de rows afectados
pub fn update_object_conditions(pegatina: String, cond: Vec<Option<String>>) -> Result<usize, diesel::result::Error> {
use crate::schema::object::dsl::*;
let conn = &mut establish_connection();
diesel::update(object.filter(tag.eq(pegatina)))
.set(condiciones.eq(cond))
.execute(conn)
}
// get_salidas trae da base de datos todos os obxetos salida de unha localización // get_salidas trae da base de datos todos os obxetos salida de unha localización
pub fn get_salidas(pegatina: String) -> Result<Vec<RObject>, diesel::result::Error> { pub fn get_salidas(pegatina: String) -> Result<Vec<RObject>, diesel::result::Error> {
use crate::schema::object::dsl::*; use crate::schema::object::dsl::*;

View File

@ -1,4 +1,4 @@
use crate::objects::{get_objects, get_object_here, update_object_location}; use crate::objects::{get_objects, get_object_here, update_object_location, update_object_conditions};
use crate::models::Player; use crate::models::Player;
use crate::database::establish_connection; use crate::database::establish_connection;
use diesel::prelude::*; use diesel::prelude::*;
@ -175,29 +175,34 @@ pub fn execute_kill(player: &mut Player, nombre: &str) -> String {
} }
//execute_open cambia a condición 'close' a 'open' de un obxeto nesta sala polo nome //execute_open cambia a condición 'close' a 'open' de un obxeto nesta sala polo nome
pub fn execute_open(player: &mut Player, nombre: &str) -> String { pub fn execute_close(player: &mut Player, nombre: &str) -> String {
let mut output = String::from(""); let mut output = String::from("");
let location = &player.location; let location = &player.location;
let objeto = get_object_here(location.to_string(), nombre.to_string()); let objeto = get_object_here(location.to_string(), nombre.to_string());
if objeto.is_ok() { if objeto.is_ok() {
let obj = objeto.unwrap(); let mut obj = objeto.unwrap();
// println!("{:?}", obj); println!("{:?}", obj);
if obj.tipo == "salida" { if obj.tipo == "salida" {
for condicion in obj.condiciones { for (pos, condicion) in obj.condiciones.iter().enumerate() {
if condicion.as_ref().unwrap() == "open" { if condicion.as_ref().unwrap() == "open" {
output = String::from("Ya está abierta."); output = String::from("Está abierta.");
// actualizar a salida en sentido contrario
// implementar get_salida_opuesta() para actualizar o sentido contario tamén
obj.condiciones[pos] = Some("closed".to_string());
let res = update_object_conditions(location.to_string(), obj.condiciones);
// non actualiza, da ok pero actualiza 0 rows
match res {
Ok(n) => println!("actualizados {} rows", n),
Err(error) => println!("Error actualizando: {:?}", error),
};
break; break;
} else if condicion.as_ref().unwrap() == "closed" { } else if condicion.as_ref().unwrap() == "closed" {
// está cerrada, actualizar a open output = String::from("Ya está cerrada.");
// e actualizar a salida en sentido contrario
// implementar actualizar_condiciones()
// implementar get_salida_opuesta()
output = String::from("Está cerrada.");
break; break;
} else { } else {
output = String::from(""); output = String::from("");

View File

@ -106,7 +106,7 @@ pub fn update_state(player: &mut Player, command: &Command) -> String {
"coger" => output = execute_pick(player, command.noun.as_str()), "coger" => output = execute_pick(player, command.noun.as_str()),
"tirar" => output = execute_drop(player, command.noun.as_str()), "tirar" => output = execute_drop(player, command.noun.as_str()),
"matar" => output = execute_kill(player, command.noun.as_str()), "matar" => output = execute_kill(player, command.noun.as_str()),
"abrir" => output = execute_open(player, command.noun.as_str()), "cerrar" => output = execute_close(player, command.noun.as_str()),
_ => output = format!("No se como hacer eso."), _ => output = format!("No se como hacer eso."),
} }