Add background color to sales person
This commit is contained in:
parent
b4b926a8e4
commit
eb54665596
6 changed files with 68 additions and 6 deletions
|
|
@ -10,6 +10,7 @@ use crate::DaoError;
|
||||||
pub struct SalesPersonEntity {
|
pub struct SalesPersonEntity {
|
||||||
pub id: Uuid,
|
pub id: Uuid,
|
||||||
pub name: Arc<str>,
|
pub name: Arc<str>,
|
||||||
|
pub background_color: Arc<str>,
|
||||||
pub deleted: Option<time::PrimitiveDateTime>,
|
pub deleted: Option<time::PrimitiveDateTime>,
|
||||||
pub inactive: bool,
|
pub inactive: bool,
|
||||||
pub version: Uuid,
|
pub version: Uuid,
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ impl SalesPersonDaoImpl {
|
||||||
struct SalesPersonDb {
|
struct SalesPersonDb {
|
||||||
id: Vec<u8>,
|
id: Vec<u8>,
|
||||||
name: String,
|
name: String,
|
||||||
|
background_color: String,
|
||||||
inactive: bool,
|
inactive: bool,
|
||||||
deleted: Option<String>,
|
deleted: Option<String>,
|
||||||
update_version: Vec<u8>,
|
update_version: Vec<u8>,
|
||||||
|
|
@ -32,6 +33,7 @@ impl TryFrom<&SalesPersonDb> for SalesPersonEntity {
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
id: Uuid::from_slice(sales_person.id.as_ref()).unwrap(),
|
id: Uuid::from_slice(sales_person.id.as_ref()).unwrap(),
|
||||||
name: sales_person.name.as_str().into(),
|
name: sales_person.name.as_str().into(),
|
||||||
|
background_color: sales_person.background_color.as_str().into(),
|
||||||
inactive: sales_person.inactive,
|
inactive: sales_person.inactive,
|
||||||
deleted: sales_person
|
deleted: sales_person
|
||||||
.deleted
|
.deleted
|
||||||
|
|
@ -48,7 +50,7 @@ impl SalesPersonDao for SalesPersonDaoImpl {
|
||||||
async fn all(&self) -> Result<Arc<[SalesPersonEntity]>, DaoError> {
|
async fn all(&self) -> Result<Arc<[SalesPersonEntity]>, DaoError> {
|
||||||
Ok(query_as!(
|
Ok(query_as!(
|
||||||
SalesPersonDb,
|
SalesPersonDb,
|
||||||
"SELECT id, name, inactive, deleted, update_version FROM sales_person WHERE deleted IS NULL"
|
"SELECT id, name, background_color, inactive, deleted, update_version FROM sales_person WHERE deleted IS NULL"
|
||||||
)
|
)
|
||||||
.fetch_all(self.pool.as_ref())
|
.fetch_all(self.pool.as_ref())
|
||||||
.await
|
.await
|
||||||
|
|
@ -62,7 +64,7 @@ impl SalesPersonDao for SalesPersonDaoImpl {
|
||||||
let id_vec = id.as_bytes().to_vec();
|
let id_vec = id.as_bytes().to_vec();
|
||||||
Ok(query_as!(
|
Ok(query_as!(
|
||||||
SalesPersonDb,
|
SalesPersonDb,
|
||||||
"SELECT id, name, inactive, deleted, update_version FROM sales_person WHERE id = ?",
|
"SELECT id, name, background_color, inactive, deleted, update_version FROM sales_person WHERE id = ?",
|
||||||
id_vec
|
id_vec
|
||||||
)
|
)
|
||||||
.fetch_optional(self.pool.as_ref())
|
.fetch_optional(self.pool.as_ref())
|
||||||
|
|
@ -76,7 +78,7 @@ impl SalesPersonDao for SalesPersonDaoImpl {
|
||||||
async fn find_by_user(&self, user_id: &str) -> Result<Option<SalesPersonEntity>, DaoError> {
|
async fn find_by_user(&self, user_id: &str) -> Result<Option<SalesPersonEntity>, DaoError> {
|
||||||
Ok(query_as!(
|
Ok(query_as!(
|
||||||
SalesPersonDb,
|
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 = ?",
|
"SELECT sp.id, sp.name, sp.background_color, 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
|
user_id
|
||||||
)
|
)
|
||||||
.fetch_optional(self.pool.as_ref())
|
.fetch_optional(self.pool.as_ref())
|
||||||
|
|
@ -91,9 +93,10 @@ impl SalesPersonDao for SalesPersonDaoImpl {
|
||||||
let id = entity.id.as_bytes().to_vec();
|
let id = entity.id.as_bytes().to_vec();
|
||||||
let version = entity.version.as_bytes().to_vec();
|
let version = entity.version.as_bytes().to_vec();
|
||||||
let name = entity.name.as_ref();
|
let name = entity.name.as_ref();
|
||||||
|
let background_color = entity.background_color.as_ref();
|
||||||
let inactive = entity.inactive;
|
let inactive = entity.inactive;
|
||||||
let deleted = entity.deleted.as_ref().map(|deleted| deleted.to_string());
|
let deleted = entity.deleted.as_ref().map(|deleted| deleted.to_string());
|
||||||
query!("INSERT INTO sales_person (id, name, inactive, deleted, update_version, update_process) VALUES (?, ?, ?, ?, ?, ?)", id, name, inactive, deleted, version, process)
|
query!("INSERT INTO sales_person (id, name, background_color, inactive, deleted, update_version, update_process) VALUES (?, ?, ?, ?, ?, ?, ?)", id, name, background_color, inactive, deleted, version, process)
|
||||||
.execute(self.pool.as_ref())
|
.execute(self.pool.as_ref())
|
||||||
.await
|
.await
|
||||||
.map_db_error()?;
|
.map_db_error()?;
|
||||||
|
|
@ -103,9 +106,10 @@ impl SalesPersonDao for SalesPersonDaoImpl {
|
||||||
let id = entity.id.as_bytes().to_vec();
|
let id = entity.id.as_bytes().to_vec();
|
||||||
let version = entity.version.as_bytes().to_vec();
|
let version = entity.version.as_bytes().to_vec();
|
||||||
let name = entity.name.as_ref();
|
let name = entity.name.as_ref();
|
||||||
|
let background_color = entity.name.as_ref();
|
||||||
let inactive = entity.inactive;
|
let inactive = entity.inactive;
|
||||||
let deleted = entity.deleted.as_ref().map(|deleted| deleted.to_string());
|
let deleted = entity.deleted.as_ref().map(|deleted| deleted.to_string());
|
||||||
query!("UPDATE sales_person SET name = ?, inactive = ?, deleted = ?, update_version = ?, update_process = ? WHERE id = ?", name, inactive, deleted, version, process, id)
|
query!("UPDATE sales_person SET name = ?, background_color = ?, inactive = ?, deleted = ?, update_version = ?, update_process = ? WHERE id = ?", name, background_color, inactive, deleted, version, process, id)
|
||||||
.execute(self.pool.as_ref())
|
.execute(self.pool.as_ref())
|
||||||
.await
|
.await
|
||||||
.map_db_error()?;
|
.map_db_error()?;
|
||||||
|
|
@ -156,7 +160,7 @@ impl SalesPersonDao for SalesPersonDaoImpl {
|
||||||
) -> Result<Option<SalesPersonEntity>, DaoError> {
|
) -> Result<Option<SalesPersonEntity>, DaoError> {
|
||||||
Ok(query_as!(
|
Ok(query_as!(
|
||||||
SalesPersonDb,
|
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 = ?",
|
"SELECT sp.id, sp.name, sp.background_color, 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
|
user_id
|
||||||
)
|
)
|
||||||
.fetch_optional(self.pool.as_ref())
|
.fetch_optional(self.pool.as_ref())
|
||||||
|
|
|
||||||
3
migrations/20240618035521_sales-person-color.sql
Normal file
3
migrations/20240618035521_sales-person-color.sql
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
-- Add migration script here
|
||||||
|
ALTER TABLE sales_person
|
||||||
|
ADD COLUMN background_color TEXT DEFAULT "#FFF" NOT NULL;
|
||||||
|
|
@ -103,6 +103,7 @@ pub struct SalesPersonTO {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub id: Uuid,
|
pub id: Uuid,
|
||||||
pub name: Arc<str>,
|
pub name: Arc<str>,
|
||||||
|
pub background_color: Arc<str>,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub inactive: bool,
|
pub inactive: bool,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
|
|
@ -116,6 +117,7 @@ impl From<&SalesPerson> for SalesPersonTO {
|
||||||
Self {
|
Self {
|
||||||
id: sales_person.id,
|
id: sales_person.id,
|
||||||
name: sales_person.name.clone(),
|
name: sales_person.name.clone(),
|
||||||
|
background_color: sales_person.background_color.clone(),
|
||||||
inactive: sales_person.inactive,
|
inactive: sales_person.inactive,
|
||||||
deleted: sales_person.deleted,
|
deleted: sales_person.deleted,
|
||||||
version: sales_person.version,
|
version: sales_person.version,
|
||||||
|
|
@ -127,6 +129,7 @@ impl From<&SalesPersonTO> for SalesPerson {
|
||||||
Self {
|
Self {
|
||||||
id: sales_person.id,
|
id: sales_person.id,
|
||||||
name: sales_person.name.clone(),
|
name: sales_person.name.clone(),
|
||||||
|
background_color: sales_person.background_color.clone(),
|
||||||
inactive: sales_person.inactive,
|
inactive: sales_person.inactive,
|
||||||
deleted: sales_person.deleted,
|
deleted: sales_person.deleted,
|
||||||
version: sales_person.version,
|
version: sales_person.version,
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ use crate::ServiceError;
|
||||||
pub struct SalesPerson {
|
pub struct SalesPerson {
|
||||||
pub id: Uuid,
|
pub id: Uuid,
|
||||||
pub name: Arc<str>,
|
pub name: Arc<str>,
|
||||||
|
pub background_color: Arc<str>,
|
||||||
pub inactive: bool,
|
pub inactive: bool,
|
||||||
pub deleted: Option<time::PrimitiveDateTime>,
|
pub deleted: Option<time::PrimitiveDateTime>,
|
||||||
pub version: Uuid,
|
pub version: Uuid,
|
||||||
|
|
@ -21,6 +22,7 @@ impl From<&dao::sales_person::SalesPersonEntity> for SalesPerson {
|
||||||
Self {
|
Self {
|
||||||
id: sales_person.id,
|
id: sales_person.id,
|
||||||
name: sales_person.name.clone(),
|
name: sales_person.name.clone(),
|
||||||
|
background_color: sales_person.background_color.clone(),
|
||||||
inactive: sales_person.inactive,
|
inactive: sales_person.inactive,
|
||||||
deleted: sales_person.deleted,
|
deleted: sales_person.deleted,
|
||||||
version: sales_person.version,
|
version: sales_person.version,
|
||||||
|
|
@ -32,6 +34,7 @@ impl From<&SalesPerson> for dao::sales_person::SalesPersonEntity {
|
||||||
Self {
|
Self {
|
||||||
id: sales_person.id,
|
id: sales_person.id,
|
||||||
name: sales_person.name.clone(),
|
name: sales_person.name.clone(),
|
||||||
|
background_color: sales_person.background_color.clone(),
|
||||||
inactive: sales_person.inactive,
|
inactive: sales_person.inactive,
|
||||||
deleted: sales_person.deleted,
|
deleted: sales_person.deleted,
|
||||||
version: sales_person.version,
|
version: sales_person.version,
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,7 @@ pub fn default_sales_person_entity() -> dao::sales_person::SalesPersonEntity {
|
||||||
dao::sales_person::SalesPersonEntity {
|
dao::sales_person::SalesPersonEntity {
|
||||||
id: default_id(),
|
id: default_id(),
|
||||||
name: "John Doe".into(),
|
name: "John Doe".into(),
|
||||||
|
background_color: "#FFF".into(),
|
||||||
deleted: None,
|
deleted: None,
|
||||||
inactive: false,
|
inactive: false,
|
||||||
version: default_version(),
|
version: default_version(),
|
||||||
|
|
@ -104,6 +105,7 @@ pub fn default_sales_person() -> service::sales_person::SalesPerson {
|
||||||
service::sales_person::SalesPerson {
|
service::sales_person::SalesPerson {
|
||||||
id: default_id(),
|
id: default_id(),
|
||||||
name: "John Doe".into(),
|
name: "John Doe".into(),
|
||||||
|
background_color: "#FFF".into(),
|
||||||
inactive: false,
|
inactive: false,
|
||||||
deleted: None,
|
deleted: None,
|
||||||
version: default_version(),
|
version: default_version(),
|
||||||
|
|
@ -515,6 +517,52 @@ async fn test_update_name() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_update_background_color() {
|
||||||
|
let mut dependencies = build_dependencies(true, "hr");
|
||||||
|
dependencies
|
||||||
|
.sales_person_dao
|
||||||
|
.expect_find_by_id()
|
||||||
|
.with(eq(default_id()))
|
||||||
|
.returning(|_| Ok(Some(default_sales_person_entity())));
|
||||||
|
dependencies
|
||||||
|
.sales_person_dao
|
||||||
|
.expect_update()
|
||||||
|
.with(
|
||||||
|
eq(SalesPersonEntity {
|
||||||
|
background_color: "#000".into(),
|
||||||
|
version: alternate_version(),
|
||||||
|
..default_sales_person_entity()
|
||||||
|
}),
|
||||||
|
eq("sales-person-service"),
|
||||||
|
)
|
||||||
|
.returning(|_, _| Ok(()));
|
||||||
|
dependencies
|
||||||
|
.uuid_service
|
||||||
|
.expect_new_uuid()
|
||||||
|
.with(eq("sales-person-version"))
|
||||||
|
.returning(|_| alternate_version());
|
||||||
|
let sales_person_service = dependencies.build_service();
|
||||||
|
let result = sales_person_service
|
||||||
|
.update(
|
||||||
|
&SalesPerson {
|
||||||
|
background_color: "#000".into(),
|
||||||
|
..default_sales_person()
|
||||||
|
},
|
||||||
|
().auth(),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
result,
|
||||||
|
SalesPerson {
|
||||||
|
background_color: "#000".into(),
|
||||||
|
version: alternate_version(),
|
||||||
|
..default_sales_person()
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_delete() {
|
async fn test_delete() {
|
||||||
let mut dependencies = build_dependencies(true, "hr");
|
let mut dependencies = build_dependencies(true, "hr");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue