Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

f #514

Closed
wants to merge 7 commits into from
Closed

f #514

Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions db/migrations/0002_cinemahall_movie_moviesession.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Generated by Django 4.0.2 on 2023-10-27 23:02

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('db', '0001_initial'),

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

change ' to ", use Black

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but theres no need to change migrations. I thought that its better to let django make migrations

]

operations = [
migrations.CreateModel(
name='CinemaHall',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255)),
('rows', models.IntegerField()),
('seats_in_row', models.IntegerField()),
],
),
migrations.CreateModel(
name='Movie',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=255)),
('description', models.TextField()),
('actors', models.ManyToManyField(to='db.Actor')),
('genres', models.ManyToManyField(to='db.Genre')),
],
),
migrations.CreateModel(
name='MovieSession',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('show_time', models.DateTimeField()),
('cinema_hall', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='db.cinemahall')),
('movie', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='db.movie')),
],
),
]
23 changes: 23 additions & 0 deletions db/migrations/0003_alter_movie_actors_alter_movie_genres.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 4.0.2 on 2023-10-27 20:25

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('db', '0002_cinemahall_movie_moviesession'),
]

operations = [
migrations.AlterField(
model_name='movie',
name='actors',
field=models.ManyToManyField(related_name='actors', to='db.Actor'),
),
migrations.AlterField(
model_name='movie',
name='genres',
field=models.ManyToManyField(related_name='genres', to='db.Genre'),
),
]
32 changes: 32 additions & 0 deletions db/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,35 @@ class Actor(models.Model):

def __str__(self) -> str:
return f"{self.first_name} {self.last_name}"


class Movie(models.Model):
title = models.CharField(max_length=255)
description = models.TextField()
actors = models.ManyToManyField(Actor, related_name="actors")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wrong related name

genres = models.ManyToManyField(Genre, related_name="genres")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wrong related name


def __str__(self) -> str:
return self.title


class CinemaHall(models.Model):
name = models.CharField(max_length=255)
rows = models.IntegerField()
seats_in_row = models.IntegerField()

@property
def capacity(self) -> int:
return self.rows * self.seats_in_row

def __str__(self) -> str:
return self.name


class MovieSession(models.Model):
show_time = models.DateTimeField()
cinema_hall = models.ForeignKey(CinemaHall, on_delete=models.CASCADE)
movie = models.ForeignKey(Movie, on_delete=models.CASCADE)

def __str__(self) -> str:
return f"{self.movie.title} {self.show_time}"
Empty file added services/__init__.py
Empty file.
18 changes: 18 additions & 0 deletions services/cinema_hall.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from db.models import CinemaHall
from django.db.models.query import QuerySet


def get_cinema_halls() -> QuerySet[CinemaHall]:
return CinemaHall.objects.all()


def create_cinema_hall(
hall_name: str,
hall_rows: int,
hall_seats_in_row: int
) -> QuerySet[CinemaHall]:
return CinemaHall.objects.create(
name=hall_name,
rows=hall_rows,
seats_in_row=hall_seats_in_row
)
43 changes: 43 additions & 0 deletions services/movie.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
from db.models import Movie
from django.db.models.query import QuerySet


def get_movies(
genres_ids: list[int] = None,
actors_ids: list[int] = None
) -> QuerySet:
XOctOpus1 marked this conversation as resolved.
Show resolved Hide resolved

queryset = Movie.objects.all()

if genres_ids is not None:
queryset = queryset.filter(genres__id__in=genres_ids)

if actors_ids is not None:
queryset = queryset.filter(actors__id__in=actors_ids)

return queryset


def get_movie_by_id(movie_id: int) -> QuerySet[Movie]:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It returns one Movie, not queryset

return Movie.objects.get(id=movie_id)


def create_movie(
movie_title: str,
movie_description: str,
genres_ids: list[int] = None,
actors_ids: list[int] = None
) -> QuerySet[Movie]:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It returns Movie


movie = Movie.objects.create(
title=movie_title,
description=movie_description
)

if genres_ids:
movie.genres.set(genres_ids)

if actors_ids:
movie.actors.set(actors_ids)

return movie
57 changes: 57 additions & 0 deletions services/movie_session.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import datetime
from db.models import MovieSession, Movie, CinemaHall
from django.db.models.query import QuerySet
from typing import Optional


def create_movie_session(
movie_show_time: datetime.datetime,
movie_id: int,
cinema_hall_id: int
) -> QuerySet[MovieSession]:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it returns MovieSession

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please fix in all places

return MovieSession.objects.create(
show_time=movie_show_time,
cinema_hall_id=cinema_hall_id,
movie_id=movie_id
)


def get_movies_sessions(
session_date: Optional[datetime.date] = None
) -> QuerySet[MovieSession]:
queryset = MovieSession.objects.all()

if session_date:
queryset = queryset.filter(show_time__date=session_date)

return queryset


def get_movie_session_by_id(movie_session_id: int) -> QuerySet[MovieSession]:
return MovieSession.objects.get(id=movie_session_id)


def update_movie_session(
session_id: int,
show_time: Optional[str] = None,
movie_id: Optional[int] = None,
cinema_hall_id: Optional[int] = None
) -> None:
movie_session_to_update = get_movie_session_by_id(session_id)
if show_time:
movie_session_to_update.show_time = show_time

if movie_id is not None:
movie = Movie.objects.get(id=movie_id)
movie_session_to_update.movie = movie

if cinema_hall_id is not None:
cinema_hall = CinemaHall.objects.get(id=cinema_hall_id)
movie_session_to_update.cinema_hall = cinema_hall

movie_session_to_update.save()


def delete_movie_session_by_id(session_id: int) -> None:
movie_session_to_delete = get_movie_session_by_id(session_id)
movie_session_to_delete.delete()
2 changes: 1 addition & 1 deletion settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@

USE_I18N = True

USE_TZ = False
USE_TZ = True

INSTALLED_APPS = ("db",)