Files
morethantext/src/document/session.rs

69 lines
2.3 KiB
Rust
Raw Normal View History

2026-01-26 14:18:40 -05:00
use crate::{
2026-02-16 09:53:04 -05:00
action::{Action, CalcValue, Calculation, Delete, FieldType, Operand, Query, Update},
2026-01-26 14:18:40 -05:00
document::{
2026-02-04 08:49:03 -05:00
clock::Clock,
2026-01-26 14:18:40 -05:00
create::IndexType,
definition::{DocDef, DocFuncType},
},
2026-02-16 09:53:04 -05:00
message::wrapper::Message,
2026-01-26 14:18:40 -05:00
name::{Name, NameType},
2026-01-30 13:58:55 -05:00
queue::{
data_director::{Include, Path, RegMsg, Register},
router::Queue,
},
2026-01-26 14:18:40 -05:00
};
use std::{sync::mpsc::channel, time::Duration};
pub struct Session;
impl Session {
2026-02-09 19:28:22 -05:00
pub fn doc_names() -> Vec<Name> {
2026-01-26 14:18:40 -05:00
let mut names = Vec::new();
names.push(Name::english("session"));
names
}
2026-02-19 14:26:29 -05:00
pub fn document_definition() -> DocDef {
2026-01-26 14:18:40 -05:00
let mut docdef = DocDef::with_names(Self::doc_names());
let mut calc = Calculation::new(Operand::Add);
calc.add_value(FieldType::DateTime).unwrap();
calc.add_value(Duration::from_hours(1)).unwrap();
let name_id = Name::english("id");
docdef.add_field(name_id.clone(), FieldType::Uuid);
docdef.set_default(&name_id, FieldType::Uuid).unwrap();
docdef.add_index(&name_id, IndexType::Unique).unwrap();
let name_expire = Name::english("expire");
docdef.add_field(name_expire.clone(), FieldType::DateTime);
docdef.set_default(&name_expire, calc.clone()).unwrap();
2026-02-04 08:49:03 -05:00
docdef.add_index(&name_expire, IndexType::Index).unwrap();
2026-01-26 14:18:40 -05:00
2026-02-16 09:53:04 -05:00
let mut update = Update::new(Session::doc_names()[0].clone());
2026-01-26 14:18:40 -05:00
update
.get_values_mut()
.add_field(name_expire.clone(), calc.clone());
let path = Path::new(
Include::All,
Include::Just(Session::doc_names()[0].clone().into()),
Include::Just(Action::OnQuery),
);
let query_action = DocFuncType::ExistingQuery(update.into());
docdef.add_route(path, query_action);
2026-02-16 08:28:59 -05:00
let mut delete = Delete::new(Session::doc_names()[0].clone());
let delete_qry = delete.get_query_mut();
2026-01-26 14:18:40 -05:00
let mut delete_calc = Calculation::new(Operand::LessThan);
delete_calc.add_value(FieldType::DateTime).unwrap();
delete_calc
.add_value(CalcValue::Existing(FieldType::DateTime))
.unwrap();
delete_qry.add(name_expire.clone(), delete_calc);
let delete_func = DocFuncType::Trigger(delete.into());
2026-02-04 08:49:03 -05:00
docdef.add_route(Clock::get_path(), delete_func);
2026-01-26 14:18:40 -05:00
2026-02-19 14:26:29 -05:00
docdef
2026-01-26 14:18:40 -05:00
}
}