/* Social program for Ramaskrik. Copyright (C) 2019 Harald Eilertsen This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ use crate::{ db::Connection, models::{film::Film, room::Room}, schema::*, }; use diesel::prelude::*; use serde_derive::{Deserialize, Serialize}; joinable!(screenings -> rooms (room_id)); joinable!(screenings -> films (film_id)); #[derive(Deserialize, Identifiable, PartialEq, Serialize, Queryable)] pub struct Screening { pub id: i32, pub film_id: i32, pub room_id: i32, pub date: chrono::NaiveDate, pub start_time: chrono::NaiveTime, pub end_time: chrono::NaiveTime, } #[derive(Deserialize, Insertable)] #[table_name = "screenings"] pub struct NewScreening { pub film_id: i32, pub room_id: i32, pub date: chrono::NaiveDate, pub start_time: chrono::NaiveTime, pub end_time: chrono::NaiveTime, } pub fn get_all(db: &Connection) -> QueryResult, Option)>> { use crate::schema::screenings::dsl::*; screenings .left_join(films::table) .left_join(rooms::table) .get_results::<(Screening, Option, Option)>(&**db) } pub fn create( room: &Room, film: &Film, date: chrono::NaiveDate, start_time: chrono::NaiveTime, end_time: chrono::NaiveTime, db: &Connection) -> QueryResult { let s = NewScreening { room_id: room.id, film_id: film.id, date: date, start_time: start_time, end_time: end_time, }; diesel::insert_into(screenings::table) .values(&s) .execute(&**db) }