feat(backend): Phase 2.5 permission and share models
Some checks failed
Lint and Build / Lint (push) Has been cancelled
Lint and Build / Build (push) Has been cancelled
Lint and Build / Docker Build (push) Has been cancelled

This commit is contained in:
goose 2026-02-15 21:08:31 -03:00
parent 3eeef6d9c8
commit eb0e2cc4b5
7 changed files with 265 additions and 106 deletions

View file

@ -1,42 +1,45 @@
use mongodb::{
Client,
Database,
Collection,
options::ClientOptions,
};
use anyhow::Result;
#[derive(Clone)]
pub struct MongoDb {
client: Client,
database_name: String,
}
impl MongoDb {
pub async fn new(uri: &str, database_name: &str) -> Result<Self> {
let mut client_options = ClientOptions::parse(uri).await?;
client_options.default_database = Some(database_name.to_string());
let client = Client::with_options(client_options)?;
Ok(Self {
client,
database_name: database_name.to_string(),
})
}
pub fn database(&self) -> Database {
self.client.database(&self.database_name)
}
pub fn collection<T>(&self, name: &str) -> Collection<T> {
self.database().collection(name)
}
pub async fn health_check(&self) -> Result<String> {
self.database()
.run_command(mongodb::bson::doc! { "ping": 1 }, None)
.await?;
Ok("healthy".to_string())
}
}
### /home/asoliver/desarrollo/normogen/./backend/src/db/mod.rs
```rust
1: use mongodb::{
2: Client,
3: Database,
4: Collection,
5: options::ClientOptions,
6: };
7: use anyhow::Result;
8:
9: #[derive(Clone)]
10: pub struct MongoDb {
11: client: Client,
12: database_name: String,
13: }
14:
15: impl MongoDb {
16: pub async fn new(uri: &str, database_name: &str) -> Result<Self> {
17: let mut client_options = ClientOptions::parse(uri).await?;
18: client_options.default_database = Some(database_name.to_string());
19:
20: let client = Client::with_options(client_options)?;
21:
22: Ok(Self {
23: client,
24: database_name: database_name.to_string(),
25: })
26: }
27:
28: pub fn database(&self) -> Database {
29: self.client.database(&self.database_name)
30: }
31:
32: pub fn collection<T>(&self, name: &str) -> Collection<T> {
33: self.database().collection(name)
34: }
35:
36: pub async fn health_check(&self) -> Result<String> {
37: self.database()
38: .run_command(mongodb::bson::doc! { "ping": 1 }, None)
39: .await?;
40: Ok("healthy".to_string())
41: }
42: }
```