aboutsummaryrefslogtreecommitdiffstats
path: root/src/models/screening.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/models/screening.rs')
-rw-r--r--src/models/screening.rs37
1 files changed, 32 insertions, 5 deletions
diff --git a/src/models/screening.rs b/src/models/screening.rs
index 5058d65..4ae42a2 100644
--- a/src/models/screening.rs
+++ b/src/models/screening.rs
@@ -16,15 +16,16 @@
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
+use crate::models::{Film, Room};
use crate::schema::*;
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,
+#[derive(Deserialize, Insertable)]
+#[table_name = "screenings"]
+pub struct NewScreening {
pub film_id: i32,
pub room_id: i32,
pub date: chrono::NaiveDate,
@@ -32,12 +33,38 @@ pub struct Screening {
pub end_time: chrono::NaiveTime,
}
-#[derive(Deserialize, Insertable)]
+#[derive(Deserialize, Identifiable, PartialEq, Serialize, Queryable)]
#[table_name = "screenings"]
-pub struct NewScreening {
+pub struct ScreeningRecord {
+ 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, Serialize)]
+pub struct Screening {
+ pub id: i32,
+ pub film: Film,
+ pub room: Room,
+ pub date: chrono::NaiveDate,
+ pub start_time: chrono::NaiveTime,
+ pub end_time: chrono::NaiveTime,
+}
+
+impl Screening {
+ pub fn from_query(s: Vec<(ScreeningRecord, Option<Film>, Option<Room>)>) -> Vec<Screening> {
+ s.iter().map(|(s, f, r)| {
+ Screening {
+ id: s.id,
+ film: f.as_ref().unwrap().clone().to_owned(),
+ room: r.as_ref().unwrap().clone().to_owned(),
+ date: s.date,
+ start_time: s.start_time,
+ end_time: s.end_time,
+ }
+ }).collect()
+ }
+}