Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex93Troy committed Sep 7, 2024
1 parent b756f7b commit ce09d46
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 82 deletions.
34 changes: 17 additions & 17 deletions db/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def __str__(self) -> str:

class Meta:
indexes = [
models.Index(fields=['title']),
models.Index(fields=["title"]),
]


Expand Down Expand Up @@ -67,57 +67,57 @@ class User(AbstractUser):

class Order(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey('User',
user = models.ForeignKey("User",
on_delete=models.CASCADE)

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

class Meta:
ordering = ['-created_at']
ordering = ["-created_at"]


# db/models.py

class Ticket(models.Model):
movie_session = models.ForeignKey('MovieSession',
movie_session = models.ForeignKey("MovieSession",
on_delete=models.CASCADE)
order = models.ForeignKey('Order',
order = models.ForeignKey("Order",
on_delete=models.CASCADE)
row = models.IntegerField()
seat = models.IntegerField()

def __str__(self):
def __str__(self) -> str:
movie_title = self.movie_session.movie.title
show_time = self.movie_session.show_time.strftime(
'%Y-%m-%d %H:%M:%S')
return (f"{movie_title} {show_time}"
f" (row: {self.row}, seat: {self.seat})")

def clean(self):
def clean(self) -> None:
movie_session = self.movie_session
if not (1 <= self.row <= movie_session.cinema_hall.rows):
raise ValidationError({
'row': f'row number must be in available range:'
f' (1, rows): (1,'
f' {movie_session.cinema_hall.rows})'
"row": f"row number must be in available range:"
f" (1, rows): (1,"
f" {movie_session.cinema_hall.rows})"
})
if not (
1 <= self.seat <= movie_session.cinema_hall.seats_in_row):
raise ValidationError({
'seat': f'seat number must be in available range:'
f' (1, seats_in_row): (1,'
f' {movie_session.cinema_hall.seats_in_row})'
"seat": f"seat number must be in available range:"
f" (1, seats_in_row): (1,"
f" {movie_session.cinema_hall.seats_in_row})"
})

def save(self, *args, **kwargs):
def save(self, *args, **kwargs) -> None:
self.full_clean()
super().save(*args, **kwargs)

class Meta:
constraints = [
models.UniqueConstraint(
fields=['movie_session', 'order', 'row', 'seat'],
name='unique_ticket'
fields=["movie_session", "order", "row", "seat"],
name="unique_ticket"
)
]
32 changes: 15 additions & 17 deletions services/movie.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
from django.db.models import QuerySet
from django.db import transaction
from db.models import Movie
from typing import List, Optional


def get_movies(genres_ids=None, actors_ids=None, title=None) -> QuerySet:
def get_movies(
genres_ids: Optional[List[int]] = None,
actors_ids: Optional[List[int]] = None,
title: Optional[str] = None
) -> QuerySet:
queryset = Movie.objects.all()

if genres_ids:
Expand All @@ -18,25 +23,18 @@ def get_movies(genres_ids=None, actors_ids=None, title=None) -> QuerySet:
return queryset


def get_movie_by_id(movie_id: int) -> Movie:
with transaction.atomic():
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
def get_movie_by_id(movie_id: int) -> Optional[Movie]:
try:
return Movie.objects.get(id=movie_id)
except Movie.DoesNotExist:
return None


def create_movie(
movie_title: str,
movie_description: str,
genres_ids: list = None,
actors_ids: list = None,
movie_title: str,
movie_description: str,
genres_ids: Optional[List[int]] = None,
actors_ids: Optional[List[int]] = None
) -> Movie:
with transaction.atomic():
movie = Movie.objects.create(
Expand Down
13 changes: 8 additions & 5 deletions services/movie_session.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
from django.db.models import QuerySet
from db.models import Ticket
from db.models import MovieSession
from typing import List, Dict


def create_movie_session(
movie_show_time: str, movie_id: int, cinema_hall_id: int
movie_show_time: str,
movie_id: int,
cinema_hall_id: int
) -> MovieSession:
return MovieSession.objects.create(
show_time=movie_show_time,
Expand Down Expand Up @@ -43,6 +45,7 @@ def delete_movie_session_by_id(session_id: int) -> None:
MovieSession.objects.get(id=session_id).delete()


def get_taken_seats(movie_session_id):
tickets = Ticket.objects.filter(movie_session_id=movie_session_id)
return [{"row": ticket.row, "seat": ticket.seat} for ticket in tickets]
def get_taken_seats(movie_session_id: int) -> List[Dict[str, int]]:
movie_session = MovieSession.objects.get(id=movie_session_id)
taken_seats = movie_session.ticket_set.values_list('row', 'seat')
return [{'row': row, 'seat': seat} for row, seat in taken_seats]
26 changes: 16 additions & 10 deletions services/user.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
from django.contrib.auth import get_user_model
from typing import Optional

User = get_user_model()


def create_user(username, password,
email=None,
first_name=None,
last_name=None):
def create_user(
username: str,
password: str,
email: Optional[str] = None, first_name: Optional[str] = None,
last_name: Optional[str] = None
) -> User:
user = User.objects.create_user(
username=username,
password=password)
Expand All @@ -20,15 +23,18 @@ def create_user(username, password,
return user


def get_user(user_id):
def get_user(user_id: int):
return User.objects.get(id=user_id)


def update_user(user_id,
username=None,
password=None,
email=None, first_name=None,
last_name=None):
def update_user(
user_id: int,
username: Optional[str] = None,
password: Optional[str] = None,
email: Optional[str] = None,
first_name: Optional[str] = None,
last_name: Optional[str] = None
) -> User:
user = get_user(user_id)
if username:
user.username = username
Expand Down
37 changes: 4 additions & 33 deletions settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,39 +23,10 @@

USE_TZ = False

# settings.py

INSTALLED_APPS = [
'db',
'django.contrib.auth',
'django.contrib.contenttypes',
]


MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
"db",
"django.contrib.auth",
"django.contrib.contenttypes",
]

AUTH_USER_MODEL = 'db.User'
AUTH_USER_MODEL = "db.User"

0 comments on commit ce09d46

Please sign in to comment.