55 lines
1.8 KiB
Rust
55 lines
1.8 KiB
Rust
use heromodels::db::postgres::{Config, Postgres};
|
|
use heromodels::db::{Collection, Db};
|
|
use heromodels::models::heroledger::user::user_index::username;
|
|
use heromodels::models::heroledger::user::{SecretBox, User};
|
|
|
|
fn main() {
|
|
let db = Postgres::new(
|
|
Config::new()
|
|
.user(Some("postgres".into()))
|
|
.password(Some("test123".into()))
|
|
.host(Some("localhost".into()))
|
|
.port(Some(5432)),
|
|
)
|
|
.expect("Can connect to Postgres");
|
|
|
|
println!("Heroledger User - Postgres Example");
|
|
println!("==================================");
|
|
|
|
let users = db.collection::<User>().expect("open user collection");
|
|
|
|
// Clean
|
|
if let Ok(existing) = users.get_all() {
|
|
for u in existing {
|
|
let _ = users.delete_by_id(u.get_id());
|
|
}
|
|
}
|
|
|
|
let sb = SecretBox::new().data(vec![1, 2, 3]).nonce(vec![9, 9, 9]).build();
|
|
|
|
let u = User::new(0)
|
|
.username("alice")
|
|
.pubkey("PUBKEY_A")
|
|
.add_email("alice@example.com")
|
|
.add_userprofile(sb)
|
|
.build();
|
|
|
|
let (id, stored) = users.set(&u).expect("store user");
|
|
println!("Stored user id={id} username={} pubkey={}", stored.username, stored.pubkey);
|
|
|
|
let by_idx = users.get::<username, _>("alice").expect("by username");
|
|
println!("Found {} user(s) with username=alice", by_idx.len());
|
|
|
|
let fetched = users.get_by_id(id).expect("get by id").expect("exists");
|
|
println!("Fetched by id={} username={} emails={:?}", id, fetched.username, fetched.email);
|
|
|
|
// Update
|
|
let updated = fetched.clone().add_email("work@alice.example");
|
|
let (_, back) = users.set(&updated).expect("update user");
|
|
println!("Updated emails = {:?}", back.email);
|
|
|
|
// Delete
|
|
users.delete_by_id(id).expect("delete user");
|
|
println!("Deleted user id={id}");
|
|
}
|