use std::process::exit; use chrono::Utc; use crate::{ Cli, InitArgs, data::{Event, Snapshot, User}, osu, redis, }; pub fn init(cli: &Cli, args: &InitArgs) { let Ok(rosu) = osu::Client::open(&cli.osu) else { exit(1) }; let Ok(redis) = redis::Client::open(&cli.redis_url) else { exit(1) }; let Ok(osu_users) = rosu.get_users(&args.user_ids) else { exit(1) }; let users: Vec = osu_users.iter().map(|x| x.into()).collect(); let mut event = Event { users, end_date: args.duration.map(|x| Utc::now() + *x), ..Default::default() }; let Ok(snapshot) = Snapshot::create(&event.users, &osu_users) else { exit(1) }; match redis.set_snapshot(&args.event_name, &snapshot) { Ok(_) => (), Err(_) => exit(1), }; match event.add_snapshot(snapshot) { Ok(_) => (), Err(_) => exit(1), }; redis.set_event(&args.event_name, event).unwrap() }