Basic rest implementation for connecting user to sales-person

This commit is contained in:
Simon Goller 2024-05-09 14:16:47 +02:00
parent e3ec694876
commit bf94ec33de
10 changed files with 181 additions and 1 deletions

View file

@ -91,6 +91,18 @@ impl dao::PermissionDao for PermissionDaoImpl {
.map_db_error()?;
Ok(())
}
async fn find_user(&self, username: &str) -> Result<Option<dao::UserEntity>, DaoError> {
let result = query!(
r"SELECT name FROM user WHERE name = ?",
username
)
.fetch_optional(self.pool.as_ref())
.await
.map_db_error()?;
Ok(result.map(|row| dao::UserEntity {
name: row.name.clone().into(),
}))
}
async fn create_role(&self, role: &dao::RoleEntity, process: &str) -> Result<(), DaoError> {
let name = role.name.as_ref();

View file

@ -72,6 +72,21 @@ impl SalesPersonDao for SalesPersonDaoImpl {
.map(SalesPersonEntity::try_from)
.transpose()?)
}
async fn find_by_user(&self, user_id: &str) -> Result<Option<SalesPersonEntity>, DaoError> {
Ok(query_as!(
SalesPersonDb,
"SELECT sp.id, sp.name, sp.inactive, sp.deleted, sp.update_version FROM sales_person sp JOIN sales_person_user spu ON sp.id = spu.sales_person_id WHERE spu.user_id = ?",
user_id
)
.fetch_optional(self.pool.as_ref())
.await
.map_db_error()?
.as_ref()
.map(SalesPersonEntity::try_from)
.transpose()?)
}
async fn create(&self, entity: &SalesPersonEntity, process: &str) -> Result<(), DaoError> {
let id = entity.id.as_bytes().to_vec();
let version = entity.version.as_bytes().to_vec();
@ -96,4 +111,34 @@ impl SalesPersonDao for SalesPersonDaoImpl {
.map_db_error()?;
Ok(())
}
async fn assign_to_user(&self, sales_person_id: Uuid, user_id: &str, process: &str) -> Result<(), DaoError> {
let sales_person_id = sales_person_id.as_bytes().to_vec();
query!("INSERT INTO sales_person_user (user_id, sales_person_id, update_process) VALUES (?, ?, ?)", user_id, sales_person_id, process)
.execute(self.pool.as_ref())
.await
.map_db_error()?;
Ok(())
}
async fn discard_assigned_user(&self, sales_person_id: Uuid) -> Result<(), DaoError> {
let sales_person_id = sales_person_id.as_bytes().to_vec();
query!("DELETE FROM sales_person_user WHERE sales_person_id = ?", sales_person_id)
.execute(self.pool.as_ref())
.await
.map_db_error()?;
Ok(())
}
async fn get_assigned_user(&self, sales_person_id: Uuid) -> Result<Option<Arc<str>>, DaoError> {
let sales_person_id = sales_person_id.as_bytes().to_vec();
Ok(query!(
"SELECT user_id FROM sales_person_user WHERE sales_person_id = ?",
sales_person_id
)
.fetch_optional(self.pool.as_ref())
.await
.map_db_error()?
.map(|result| result.user_id.into()))
}
}