diff --git a/crates/collab/migrations.sqlite/20221109000000_test_schema.sql b/crates/collab/migrations.sqlite/20221109000000_test_schema.sql index 95237b22f1..0467610608 100644 --- a/crates/collab/migrations.sqlite/20221109000000_test_schema.sql +++ b/crates/collab/migrations.sqlite/20221109000000_test_schema.sql @@ -7,7 +7,7 @@ CREATE TABLE "users" ( "invite_count" INTEGER NOT NULL DEFAULT 0, "inviter_id" INTEGER REFERENCES users (id), "connected_once" BOOLEAN NOT NULL DEFAULT false, - "created_at" TIMESTAMP NOT NULL DEFAULT now, + "created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, "metrics_id" TEXT, "github_user_id" INTEGER ); diff --git a/crates/collab/src/db/queries/contributors.rs b/crates/collab/src/db/queries/contributors.rs index 418e5dd1e1..0972779ce9 100644 --- a/crates/collab/src/db/queries/contributors.rs +++ b/crates/collab/src/db/queries/contributors.rs @@ -42,14 +42,19 @@ impl Database { } }; - let Some(user) = user::Entity::find().filter(condition).one(&*tx).await? else { - return Ok(None); - }; - let Some(contributor) = contributor::Entity::find_by_id(user.id).one(&*tx).await? - else { - return Ok(None); - }; - Ok(Some(contributor.signed_at)) + if let Some(user) = user::Entity::find().filter(condition).one(&*tx).await? { + if user.admin { + return Ok(Some(user.created_at)); + } + + if let Some(contributor) = + contributor::Entity::find_by_id(user.id).one(&*tx).await? + { + return Ok(Some(contributor.signed_at)); + } + } + + Ok(None) }) .await } diff --git a/crates/collab/src/db/tables/user.rs b/crates/collab/src/db/tables/user.rs index 5ab7f17a01..5c9166adab 100644 --- a/crates/collab/src/db/tables/user.rs +++ b/crates/collab/src/db/tables/user.rs @@ -17,6 +17,7 @@ pub struct Model { pub inviter_id: Option, pub connected_once: bool, pub metrics_id: Uuid, + pub created_at: DateTime, } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] diff --git a/crates/collab/src/db/tests/db_tests.rs b/crates/collab/src/db/tests/db_tests.rs index adba6526c1..a76e33402a 100644 --- a/crates/collab/src/db/tests/db_tests.rs +++ b/crates/collab/src/db/tests/db_tests.rs @@ -31,44 +31,42 @@ async fn test_get_users(db: &Arc) { } assert_eq!( - db.get_users_by_ids(user_ids.clone()).await.unwrap(), + db.get_users_by_ids(user_ids.clone()) + .await + .unwrap() + .into_iter() + .map(|user| ( + user.id, + user.github_login, + user.github_user_id, + user.email_address + )) + .collect::>(), vec![ - User { - id: user_ids[0], - github_login: "user1".to_string(), - github_user_id: Some(1), - email_address: Some("user1@example.com".to_string()), - admin: false, - metrics_id: user_metric_ids[0].parse().unwrap(), - ..Default::default() - }, - User { - id: user_ids[1], - github_login: "user2".to_string(), - github_user_id: Some(2), - email_address: Some("user2@example.com".to_string()), - admin: false, - metrics_id: user_metric_ids[1].parse().unwrap(), - ..Default::default() - }, - User { - id: user_ids[2], - github_login: "user3".to_string(), - github_user_id: Some(3), - email_address: Some("user3@example.com".to_string()), - admin: false, - metrics_id: user_metric_ids[2].parse().unwrap(), - ..Default::default() - }, - User { - id: user_ids[3], - github_login: "user4".to_string(), - github_user_id: Some(4), - email_address: Some("user4@example.com".to_string()), - admin: false, - metrics_id: user_metric_ids[3].parse().unwrap(), - ..Default::default() - } + ( + user_ids[0], + "user1".to_string(), + Some(1), + Some("user1@example.com".to_string()), + ), + ( + user_ids[1], + "user2".to_string(), + Some(2), + Some("user2@example.com".to_string()), + ), + ( + user_ids[2], + "user3".to_string(), + Some(3), + Some("user3@example.com".to_string()), + ), + ( + user_ids[3], + "user4".to_string(), + Some(4), + Some("user4@example.com".to_string()), + ) ] ); }