This commit is contained in:
FelipeCN
2026-03-03 13:51:26 -03:00
parent a5605de6a3
commit 2c96e99ccc
7 changed files with 166 additions and 27 deletions
+13 -4
View File
@@ -7,17 +7,26 @@ use rusqlite::Connection;
/// Salva um layout no banco de dados.
/// Se o layout já tem um id, atualiza. Caso contrário, insere.
pub fn salvar_layout(conn: &Connection, layout: &Layout) -> Result<i64, String> {
/// Retorna `ErroLayout::NomeConflitante` se já existir um layout com o mesmo nome.
pub fn salvar_layout(conn: &Connection, layout: &Layout) -> Result<i64, ErroLayout> {
// Validar campos obrigatórios
if layout.nome().trim().is_empty() {
return Err("Nome do layout não pode ser vazio".to_string());
return Err(ErroLayout::CampoObrigatorioAusente("nome".to_string()));
}
if let Some(id) = layout.id() {
layout_repository::atualizar(conn, layout).map_err(|e| e.to_string())?;
layout_repository::atualizar(conn, layout)
.map_err(|e| ErroLayout::JsonMalformado(e.to_string()))?;
Ok(id)
} else {
layout_repository::salvar(conn, layout).map_err(|e| e.to_string())
let nome = layout.nome().to_string();
let existe = layout_repository::existe_nome(conn, &nome)
.map_err(|e| ErroLayout::JsonMalformado(e.to_string()))?;
if existe {
return Err(ErroLayout::NomeConflitante(nome));
}
layout_repository::salvar(conn, layout)
.map_err(|e| ErroLayout::JsonMalformado(e.to_string()))
}
}