Skip to main content

max / makenotwork

1.4 KB · 41 lines History Blame Raw
1 //! Seed follows between the example accounts (Phase 4) so follower counts render
2 //! on profile and project pages.
3 //!
4 //! `db::follows::follow` is idempotent (`ON CONFLICT DO NOTHING`) and follow rows
5 //! cascade when the follower is deleted, so this is re-runnable and cleaned up by
6 //! the seed reset. There is no server-side review/comment surface, so engagement
7 //! is limited to follows.
8
9 use super::SeedError;
10 use super::projects::SeededProject;
11 use crate::db::{self, FollowTargetType};
12
13 /// Seed a small follow graph: every creator follows every other creator (User)
14 /// and every project except their own (Project). Each account ends with four
15 /// followers, enough for non-trivial counts on every profile and project page.
16 pub async fn seed_social(pool: &sqlx::PgPool, projects: &[SeededProject]) -> Result<(), SeedError> {
17 for a in projects {
18 for b in projects {
19 if a.user_id == b.user_id {
20 continue;
21 }
22 db::follows::follow(
23 pool,
24 a.user_id,
25 FollowTargetType::User,
26 *b.user_id.as_uuid(),
27 )
28 .await?;
29 db::follows::follow(
30 pool,
31 a.user_id,
32 FollowTargetType::Project,
33 *b.project.id.as_uuid(),
34 )
35 .await?;
36 }
37 }
38 tracing::info!("example seed: seeded follows between example accounts");
39 Ok(())
40 }
41