diff --git a/CineSync/films/models.py b/CineSync/films/models.py index e470b32..f30710a 100644 --- a/CineSync/films/models.py +++ b/CineSync/films/models.py @@ -82,6 +82,9 @@ class Director(Model): max_length=100, ) + def __str__(self): + return f'{self.last_name} {self.first_name}' + class Meta: db_table = 'films_directors' verbose_name = 'Режиссер' @@ -101,6 +104,9 @@ class Actor(Model): max_length=100, ) + def __str__(self): + return f'{self.last_name} {self.first_name}' + class Meta: db_table = 'films_actors' verbose_name = 'Актер' @@ -114,6 +120,9 @@ class Country(Model): max_length=500, ) + def __str__(self): + return self.name + class Meta: db_table = 'films_countries' verbose_name = 'Страна' @@ -189,7 +198,7 @@ class Film(Model): ) countries = ManyToManyField( - Director, + Country, related_name='country_films', related_query_name='country_films', ) diff --git a/Документы/Заполнение Кинотеатр.sql b/Документы/Заполнение Кинотеатр.sql new file mode 100644 index 0000000..6f5f6b9 --- /dev/null +++ b/Документы/Заполнение Кинотеатр.sql @@ -0,0 +1,348 @@ +INSERT INTO films_genres (name) VALUES + ('Боевик'), + ('Комедия'), + ('Драма'), + ('Фантастика'), + ('Ужасы'), + ('Триллер'), + ('Мелодрама'), + ('Приключения'), + ('Фэнтези'), + ('Мистика'), + ('Детектив'), + ('Анимация'), + ('Документальный'), + ('Исторический'), + ('Вестерн'); + + +INSERT INTO films_films (name, duration, release_date) VALUES + ('Звёздные войны: Эпизод IV – Новая надежда', 121, '1977-05-25'), + ('Властелин колец: Братство Кольца', 178, '2001-12-19'), + ('Зеленая миля', 189, '1999-12-10'), + ('Форрест Гамп', 142, '1994-06-23'), + ('Побег из Шоушенка', 142, '1994-09-10'), + ('Начало', 148, '2010-07-16'), + ('Матрица', 136, '1999-03-31'), + ('Властелин колец: Возвращение Короля', 201, '2003-12-17'), + ('Интерстеллар', 169, '2014-11-06'), + ('1+1', 112, '2011-11-02'), + ('Криминальное чтиво', 154, '1994-09-10'), + ('Король Лев', 88, '1994-06-15'), + ('Бойцовский клуб', 139, '1999-10-15'), + ('Темный рыцарь', 152, '2008-07-18'), + ('Гладиатор', 155, '2000-05-01'), + ('Пираты Карибского моря: Проклятие Черной жемчужины', 143, '2003-07-09'), + ('Хороший, плохой, злой', 161, '1966-12-23'), + ('Леон', 110, '1994-09-14'), + ('Терминатор 2: Судный день', 137, '1991-07-03'), + ('ВАЛЛ·И', 98, '2008-06-27'), + ('Джанго освобожденный', 165, '2012-12-25'), + ('Исчезнувшая', 145, '2014-10-02'), + ('Храброе сердце', 177, '1995-09-08'), + ('Гарри Поттер и Философский камень', 152, '2001-11-16'), + ('Индиана Джонс: В поисках утраченного ковчега', 115, '1981-06-12'), + ('Красота по-американски', 122, '1999-09-08'), + ('Трасса 60', 92, '2001-02-09'), + ('Храбрая сердцем', 93, '2012-06-22'), + ('Кунг-фу Панда', 92, '2008-06-05'), + ('Рататуй', 111, '2007-06-28'), + ('Голодные игры', 142, '2012-03-12'), + ('Мадагаскар', 86, '2005-05-25'), + ('Человек-паук', 121, '2002-05-03'), + ('Кунг-фу Панда 2', 91, '2011-05-26'), + ('Мечтатели', 127, '2003-11-19'), + ('Гарри Поттер и узник Азкабана', 142, '2004-05-31'), + ('Люди Икс', 104, '2000-07-13'), + ('Хранители', 162, '2009-03-06'), + ('Трансформеры', 144, '2007-06-27'), + ('Темный рыцарь: Возрождение легенды', 164, '2012-07-16'); + + +INSERT INTO films_films_genres (film_id, genre_id) VALUES + (1, 4), -- Звёздные войны: Эпизод IV – Новая надежда - Фантастика + (1, 7), -- Звёздные войны: Эпизод IV – Новая надежда - Приключения + (2, 4), -- Властелин колец: Братство Кольца - Фантастика + (2, 7), -- Властелин колец: Братство Кольца - Приключения + (3, 3), -- Зеленая миля - Драма + (4, 3), -- Форрест Гамп - Драма + (5, 3), -- Побег из Шоушенка - Драма + (6, 4), -- Начало - Фантастика + (6, 5), -- Начало - Триллер + (7, 4), -- Матрица - Фантастика + (8, 4), -- Властелин колец: Возвращение Короля - Фантастика + (8, 7), -- Властелин колец: Возвращение Короля - Приключения + (9, 4), -- Интерстеллар - Фантастика + (9, 3), -- Интерстеллар - Драма + (10, 3), -- 1+1 - Драма + (10, 8), -- 1+1 - Мелодрама + (11, 5), -- Криминальное чтиво - Ужасы + (12, 7), -- Король Лев - Приключения + (13, 6), -- Бойцовский клуб - Триллер + (13, 5), -- Бойцовский клуб - Ужасы + (14, 6), -- Темный рыцарь - Триллер + (14, 5), -- Темный рыцарь - Ужасы + (15, 6), -- Гладиатор - Триллер + (16, 7), -- Пираты Карибского моря: Проклятие Черной жемчужины - Приключения + (17, 8), -- Хороший, плохой, злой - Мелодрама + (17, 2), -- Хороший, плохой, злой - Комедия + (18, 9), -- Леон - Фэнтези + (18, 6), -- Леон - Триллер + (19, 9), -- Терминатор 2: Судный день - Фэнтези + (19, 4), -- Терминатор 2: Судный день - Фантастика + (20, 1), -- ВАЛЛ·И - Боевик + (20, 4), -- ВАЛЛ·И - Фантастика + (21, 6), -- Джанго освобожденный - Триллер + (22, 6), -- Исчезнувшая - Триллер + (23, 6), -- Храброе сердце - Триллер + (24, 7), -- Гарри Поттер и Философский камень - Приключения + (24, 9), -- Гарри Поттер и Философский камень - Фэнтези + (25, 6), -- Индиана Джонс: В поисках утраченного ковчега - Триллер + (25, 7), -- Индиана Джонс: В поисках утраченного ковчега - Приключения + (26, 8), -- Красота по-американски - Мелодрама + (26, 2), -- Красота по-американски - Комедия + (27, 1), -- Трасса 60 - Боевик + (28, 9), -- Храбрая сердцем - Фэнтези + (28, 6), -- Храбрая сердцем - Триллер + (29, 10), -- Кунг-фу Панда - Мистика + (29, 11), -- Кунг-фу Панда - Детектив + (30, 10), -- Рататуй - Мистика + (30, 11), -- Рататуй - Детектив + (31, 11), -- Голодные игры - Детектив + (31, 6), -- Голодные игры - Триллер + (32, 10), -- Мадагаскар - Мистика + (32, 11), -- Мадагаскар - Детектив + (33, 12), -- Человек-паук - Анимация + (33, 1), -- Человек-паук - Боевик + (34, 10), -- Кунг-фу Панда 2 - Мистика + (34, 11), -- Кунг-фу Панда 2 - Детектив + (35, 3), -- Мечтатели - Драма + (36, 4), -- Гарри Поттер и узник Азкабана - Фантастика + (36, 7), -- Гарри Поттер и узник Азкабана - Приключения + (37, 1), -- Люди Икс - Боевик + (37, 4), -- Люди Икс - Фантастика + (38, 7), -- Хранители - Приключения + (38, 4), -- Хранители - Фантастика + (39, 1), -- Трансформеры - Боевик + (39, 4), -- Трансформеры - Фантастика + (40, 6), -- Темный рыцарь: Возрождение легенды - Триллер + (40, 7); -- Темный рыцарь: Возрождение легенды - Приключения + +UPDATE films_films +SET description = + CASE + WHEN name = 'Звёздные войны: Эпизод IV – Новая надежда' THEN 'Описание Звёздные войны: Эпизод IV – Новая надежда' + WHEN name = 'Властелин колец: Братство Кольца' THEN 'Описание Властелин колец: Братство Кольца' + WHEN name = 'Зеленая миля' THEN 'Описание Зеленая миля' + WHEN name = 'Форрест Гамп' THEN 'Описание Форрест Гамп' + WHEN name = 'Побег из Шоушенка' THEN 'Описание Побег из Шоушенка' + WHEN name = 'Начало' THEN 'Описание Начало' + WHEN name = 'Матрица' THEN 'Описание Матрица' + WHEN name = 'Властелин колец: Возвращение Короля' THEN 'Описание Властелин колец: Возвращение Короля' + WHEN name = 'Интерстеллар' THEN 'Описание Интерстеллар' + WHEN name = '1+1' THEN 'Описание 1+1' + WHEN name = 'Криминальное чтиво' THEN 'Описание Криминальное чтиво' + WHEN name = 'Король Лев' THEN 'Описание Король Лев' + WHEN name = 'Бойцовский клуб' THEN 'Описание Бойцовский клуб' + WHEN name = 'Темный рыцарь' THEN 'Описание Темный рыцарь' + WHEN name = 'Гладиатор' THEN 'Описание Гладиатор' + WHEN name = 'Пираты Карибского моря: Проклятие Черной жемчужины' THEN 'Описание Пираты Карибского моря: Проклятие Черной жемчужины' + WHEN name = 'Хороший, плохой, злой' THEN 'Описание Хороший, плохой, злой' + WHEN name = 'Леон' THEN 'Описание Леон' + WHEN name = 'Терминатор 2: Судный день' THEN 'Описание Терминатор 2: Судный день' + WHEN name = 'ВАЛЛ·И' THEN 'Описание ВАЛЛ·И' + WHEN name = 'Джанго освобожденный' THEN 'Описание Джанго освобожденный' + WHEN name = 'Исчезнувшая' THEN 'Описание Исчезнувшая' + WHEN name = 'Храброе сердце' THEN 'Описание Храброе сердце' + WHEN name = 'Гарри Поттер и Философский камень' THEN 'Описание Гарри Поттер и Философский камень' + WHEN name = 'Индиана Джонс: В поисках утраченного ковчега' THEN 'Описание Индиана Джонс: В поисках утраченного ковчега' + WHEN name = 'Красота по-американски' THEN 'Описание Красота по-американски' + WHEN name = 'Трасса 60' THEN 'Описание Трасса 60' + WHEN name = 'Храбрая сердцем' THEN 'Описание Храбрая сердцем' + WHEN name = 'Кунг-фу Панда' THEN 'Описание Кунг-фу Панда' + WHEN name = 'Рататуй' THEN 'Описание Рататуй' + WHEN name = 'Голодные игры' THEN 'Описание Голодные игры' + WHEN name = 'Мадагаскар' THEN 'Описание Мадагаскар' + WHEN name = 'Человек-паук' THEN 'Описание Человек-паук' + WHEN name = 'Кунг-фу Панда 2' THEN 'Описание Кунг-фу Панда 2' + WHEN name = 'Мечтатели' THEN 'Описание Мечтатели' + WHEN name = 'Гарри Поттер и узник Азкабана' THEN 'Описание Гарри Поттер и узник Азкабана' + WHEN name = 'Люди Икс' THEN 'Описание Люди Икс' + WHEN name = 'Хранители' THEN 'Описание Хранители' + WHEN name = 'Трансформеры' THEN 'Описание Трансформеры' + WHEN name = 'Темный рыцарь: Возрождение легенды' THEN 'Описание Темный рыцарь: Возрождение легенды' + END; + + +-- Заполнение таблицы timetable_auditoriums +INSERT INTO timetable_auditoriums (number, row_count) VALUES + ('Зал 1', 10), -- Зал 1, 10 рядов + ('Зал 2', 8), -- Зал 2, 8 рядов + ('Зал 3', 12), -- Зал 3, 12 рядов + ('Зал 4', 9), -- Зал 4, 9 рядов + ('Зал 5', 11), -- Зал 5, 11 рядов + ('Зал 6', 7), -- Зал 6, 7 рядов + ('Зал 7', 10); -- Зал 7, 10 рядов + + + +-- Предполагается, что в каждом зале 10 рядов и в каждом ряду 10 кресел. +-- Создаем вспомогательную таблицу numbers с числами от 1 до 10 +CREATE TABLE numbers (n INTEGER PRIMARY KEY); + +INSERT INTO numbers (n) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); + +-- Вставляем данные в таблицу timetable_rows для каждого зала +-- Предполагается, что в каждом зале 10 рядов и в каждом ряду 10 кресел. + +-- Для Зала 1 +INSERT INTO timetable_rows (row_number, column_count, auditorium_id) +SELECT + n AS row_number, + 10 AS column_count, -- Количество кресел в ряду + 1 AS auditorium_id -- ID Зала 1 +FROM + numbers; + +-- Для Зала 2 +INSERT INTO timetable_rows (row_number, column_count, auditorium_id) +SELECT + n AS row_number, + 10 AS column_count, -- Количество кресел в ряду + 2 AS auditorium_id -- ID Зала 2 +FROM + numbers; + +-- Для Зала 3 +INSERT INTO timetable_rows (row_number, column_count, auditorium_id) +SELECT + n AS row_number, + 10 AS column_count, -- Количество кресел в ряду + 3 AS auditorium_id -- ID Зала 3 +FROM + numbers; + +-- Для Зала 4 +INSERT INTO timetable_rows (row_number, column_count, auditorium_id) +SELECT + n AS row_number, + 10 AS column_count, -- Количество кресел в ряду + 4 AS auditorium_id -- ID Зала 4 +FROM + numbers; + +-- Для Зала 5 +INSERT INTO timetable_rows (row_number, column_count, auditorium_id) +SELECT + n AS row_number, + 10 AS column_count, -- Количество кресел в ряду + 5 AS auditorium_id -- ID Зала 5 +FROM + numbers; + +-- Для Зала 6 +INSERT INTO timetable_rows (row_number, column_count, auditorium_id) +SELECT + n AS row_number, + 10 AS column_count, -- Количество кресел в ряду + 6 AS auditorium_id -- ID Зала 6 +FROM + numbers; + +-- Для Зала 7 +INSERT INTO timetable_rows (row_number, column_count, auditorium_id) +SELECT + n AS row_number, + 10 AS column_count, -- Количество кресел в ряду + 7 AS auditorium_id -- ID Зала 7 +FROM + numbers; + + + +-- Определим временной промежуток в рамках рабочего времени кинотеатра (8:00 - 22:00) +WITH RECURSIVE session_times AS ( + SELECT strftime('%Y-%m-%d %H:%M', 'now', 'start of day', '+8 hours') AS start_time + UNION ALL + SELECT strftime('%Y-%m-%d %H:%M', start_time, '+2 hours') FROM session_times + WHERE start_time < strftime('%Y-%m-%d %H:%M', 'now', 'start of day', '+22 hours') +) + + +--INSERT INTO timetable_film_sessions (start_datetime, price, auditorium_id, film_id) +SELECT + CASE + WHEN MAX(end_datetime) IS NULL THEN start_datetime + ELSE MAX(end_datetime) + END AS start_time, + 500.00 AS price, + auditoriums.id AS auditorium_id, + films.id AS film_id +FROM + session_times +CROSS JOIN + films_films AS films +CROSS JOIN + timetable_auditoriums AS auditoriums +LEFT JOIN + timetable_film_sessions AS prev_sessions +ON + auditoriums.id = prev_sessions.auditorium_id +AND + prev_sessions.start_datetime <= start_datetime +AND + prev_sessions.start_datetime + (films.duration || ' MINUTES') >= start_datetime +GROUP BY + start_time, auditoriums.id, films.id +ORDER BY + start_time, film_id; + + + +-- Заполнение таблицы Режиссеров (Directors) +INSERT INTO films_directors (first_name, last_name) VALUES + ('Кристофер', 'Нолан'), + ('Стивен', 'Спилберг'), + ('Квентин', 'Тарантино'), + ('Мартин', 'Скорсезе'), + ('Дэвид', 'Финчер'), + ('Питер', 'Джексон'), + ('Ридли', 'Скотт'), + ('Джеймс', 'Кэмерон'), + ('Стэнли', 'Кубрик'), + ('Фрэнсис', 'Форд Коппола'), + ('Альфред', 'Хичкок'), + ('Джордж', 'Лукас'); + +-- Заполнение таблицы Актеров (Actors) +INSERT INTO films_actors (first_name, last_name) VALUES + ('Том', 'Хэнкс'), + ('Леонардо', 'ДиКаприо'), + ('Мэттью', 'МакКонахи'), + ('Дензел', 'Вашингтон'), + ('Брэд', 'Питт'), + ('Мэрил', 'Стрип'), + ('Натали', 'Портман'), + ('Джонни', 'Депп'), + ('Кейт', 'Бланшетт'), + ('Энди', 'Серкис'), + ('Сигурни', 'Уивер'), + ('Кейт', 'Уинслет'); + +-- Заполнение таблицы Стран (Countries) +INSERT INTO films_countries (name) VALUES + ('США'), + ('Великобритания'), + ('Франция'), + ('Германия'), + ('Италия'), + ('Канада'), + ('Япония'), + ('Индия'), + ('Австралия'), + ('Россия'), + ('Китай'), + ('Испания'); + + +