use crate::{ models::{AutoIssuedTicket, IssuedTicket, NewTicket, Ticket}, schema::{drivers, issued_tickets, tickets}, }; use common::CommonTicket; use diesel::prelude::*; pub fn create_ticket(connection: &mut PgConnection, ticket: NewTicket) { use crate::schema::tickets::dsl::*; diesel::insert_into(tickets) .values(&ticket) .execute(connection) .expect("Didn't save ticket AAAAAA"); } pub fn get_tickets(connection: &mut PgConnection, driver_id: i32) -> Vec { //Chonky join function for the sake of my life :)) let join = tickets::table .left_join(issued_tickets::table.on(issued_tickets::driver.eq(driver_id))) .select(( tickets::id, tickets::category, tickets::description, tickets::issue_date, )); let tickets_by_driver = join.load::(connection).expect("oh no!"); let common_ticket_output = tickets_by_driver .iter() .map(|ticket| CommonTicket { id: ticket.id, category: String::from(&ticket.category), description: String::from(&ticket.description), }) .collect(); return common_ticket_output; } pub fn get_ticket(connection: &mut PgConnection, tickid: i32) -> CommonTicket { use crate::schema::tickets::dsl::*; let ticket = &mut tickets .filter(id.eq(tickid)) .limit(1) .load::(connection) .expect("no tickets :(")[0]; return CommonTicket { id: ticket.id, category: String::from(&ticket.category), description: String::from(&ticket.description), }; } pub fn issue_ticket(connection: &mut PgConnection, issued_ticket: IssuedTicket) { use crate::schema::issued_tickets::dsl::*; diesel::insert_into(issued_tickets) .values(issued_ticket) .execute(connection) .expect("PAINNNN IT NO WORKEY (issued tickets)"); } pub fn auto_issue_ticket(connection: &mut PgConnection, issued_ticket: AutoIssuedTicket) { use crate::schema::auto_issued_tickets::dsl::*; diesel::insert_into(auto_issued_tickets) .values(issued_ticket) .execute(connection) .expect("PAINNNN IT NO WORKEY (issued tickets)"); }