Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,4 +80,4 @@ jobs:
working-directory: backend/database-seeding
run: |
cargo build
cargo run
cargo run -- --email me@example.com
123 changes: 122 additions & 1 deletion backend/database-seeding/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions backend/database-seeding/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ server = { path = "../server" }
tokio = { version = "1.34", features = ["macros"]}
chrono = { version = "0.4", features = ["serde"] }


dotenvy = "0.15"
dotenvy = "0.15"
clap = { version = "4.5", features = ["derive"] }
13 changes: 12 additions & 1 deletion backend/database-seeding/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
use clap::Parser;
use crate::seeder::*;
pub mod seeder;

/// Seed data for development use
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
/// Your Google account email - will be used to provide Organisation Admin & SuperUser privileges
#[arg(short, long)]
pub email: String,
}

#[tokio::main]
async fn main() {
dotenvy::dotenv().expect("Failed to load .env");
let args = Args::parse();

let seeder = init().await;

seed_database(seeder).await;
seed_database(args.email.to_lowercase(), seeder).await;
}
48 changes: 38 additions & 10 deletions backend/database-seeding/src/seeder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,20 @@ pub async fn init() -> Seeder {
seeder
}

pub async fn seed_database(mut seeder: Seeder) {
pub async fn seed_database(dev_email: String, mut seeder: Seeder) {
let mut tx = seeder.app_state.db.begin().await.expect("Error beginning DB transaction");

// Super User
let users = vec![
User {
id: 1,
email: "example.superuser@chaos.devsoc.app".to_string(),
zid: Some("z5555555".to_string()),
name: "Francis Urquhart".to_string(),
pronouns: Some("Ze/Za".to_string()),
gender: Some("Otter".to_string()),
degree_name: Some("Bachelor of Arts".to_string()),
degree_starting_year: Some(1900),
email: dev_email,
zid: Some("z5555558".to_string()),
name: "Chaos Developer".to_string(),
pronouns: None,
gender: None,
degree_name: Some("Bachelor of Chaos Development (Honours)".to_string()),
degree_starting_year: Some(2024),
role: UserRole::SuperUser,
},
User {
Expand All @@ -61,16 +61,30 @@ pub async fn seed_database(mut seeder: Seeder) {
degree_name: Some("Bachelor of Social Work (Honours)".to_string()),
degree_starting_year: Some(2024),
role: UserRole::User,
}
},
User {
id: 4,
email: "example.superuser@chaos.devsoc.app".to_string(),
zid: Some("z5555555".to_string()),
name: "Francis Urquhart".to_string(),
pronouns: Some("Ze/Za".to_string()),
gender: Some("Otter".to_string()),
degree_name: Some("Bachelor of Arts".to_string()),
degree_starting_year: Some(1900),
role: UserRole::SuperUser,
},
];

for user in users {
User::create_user(user, &mut tx).await.expect("Failed seeding Root User");
}

let org_id = Organisation::create(1,
let org_id = Organisation::create(
1, // User number 1, i.e. Developer
"devsoc".to_string(),
"UNSW DevSoc".to_string(),
"contact@devsoc.app".to_string(),
Some("https://devsoc.app".to_string()),
&mut seeder.app_state.snowflake_generator,
&mut tx).await.expect("Failed seeding Organisation");

Expand All @@ -92,6 +106,20 @@ pub async fn seed_database(mut seeder: Seeder) {
chrono::NaiveDate::from_ymd_opt(2040, 1, 1).unwrap().and_hms_milli_opt(0, 0, 0, 0).unwrap(),
Utc,
),
Some(DateTime::<Utc>::from_naive_utc_and_offset(
chrono::NaiveDate::from_ymd_opt(2041, 1, 1).unwrap().and_hms_milli_opt(0, 0, 0, 0).unwrap(),
Utc,
)),
Some(DateTime::<Utc>::from_naive_utc_and_offset(
chrono::NaiveDate::from_ymd_opt(2042, 1, 1).unwrap().and_hms_milli_opt(0, 0, 0, 0).unwrap(),
Utc,
)),
Some("in-person".to_string()),
Some(DateTime::<Utc>::from_naive_utc_and_offset(
chrono::NaiveDate::from_ymd_opt(2043, 1, 1).unwrap().and_hms_milli_opt(0, 0, 0, 0).unwrap(),
Utc,
)),
Some("Resume required".to_string()),
&mut tx,
&mut seeder.app_state.snowflake_generator,
)
Expand Down
7 changes: 7 additions & 0 deletions backend/migrations/20251206074151_new_campaign_fields.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- Add migration script here
ALTER TABLE campaigns
ADD COLUMN interview_period_starts_at TIMESTAMPTZ,
ADD COLUMN interview_period_ends_at TIMESTAMPTZ,
ADD COLUMN interview_format TEXT,
ADD COLUMN outcomes_released_at TIMESTAMPTZ,
ADD COLUMN application_requirements TEXT;
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
-- Add migration script here
ALTER TABLE organisations
ADD COLUMN contact_email TEXT NOT NULL,
ADD COLUMN website_url TEXT;
7 changes: 7 additions & 0 deletions backend/server/src/handler/organisation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ impl OrganisationHandler {
data.admin,
data.slug,
data.name,
data.contact_email,
data.website_url,
&mut state.snowflake_generator,
&mut transaction.tx,
)
Expand Down Expand Up @@ -444,6 +446,11 @@ impl OrganisationHandler {
request_body.description,
request_body.starts_at,
request_body.ends_at,
request_body.interview_period_starts_at,
request_body.interview_period_ends_at,
request_body.interview_format,
request_body.outcomes_released_at,
request_body.application_requirements,
&mut transaction.tx,
&mut state.snowflake_generator,
)
Expand Down
Loading
Loading