Skip to content

Commit

Permalink
Solution
Browse files Browse the repository at this point in the history
  • Loading branch information
mnezbrytska committed Sep 3, 2024
1 parent f24b999 commit 748d031
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 20 deletions.
2 changes: 1 addition & 1 deletion .flake8
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ max-complexity = 18
select = B,C,E,F,W,T4,B9,ANN,Q0,N8,VNE
exclude =
**migrations
venv
.venv
tests
36 changes: 21 additions & 15 deletions db/models.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from django.contrib.auth.models import User, AbstractUser
from django.contrib.sitemaps.views import index
from django.core.exceptions import ValidationError
from django.db import models
from django.forms import IntegerField


import settings

Expand Down Expand Up @@ -60,16 +59,19 @@ def __str__(self) -> str:

class Order(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="orders")

user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name="orders"
)

class Meta:
ordering = ["-created_at"]


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


class Ticket(models.Model):
row = models.IntegerField()
seat = models.IntegerField()
Expand Down Expand Up @@ -99,25 +101,29 @@ class Meta:
)
]

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

Expand Down
14 changes: 11 additions & 3 deletions services/order.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,26 @@


@transaction.atomic
def create_order(tickets: list[dict], username: str, date: str = None) -> Order:
def create_order(
tickets: list[dict],
username: str,
date: str = None
) -> Order:
user = User.objects.get(username=username)
if date:
created_at = timezone.make_aware(datetime.strptime(date, "%Y-%m-%d %H:%M"))
created_at = timezone.make_aware(
datetime.strptime(date, "%Y-%m-%d %H:%M")
)

else:
created_at = timezone.now()

order = Order.objects.create(user=user, created_at=created_at)

for ticket_data in tickets:
movie_session = MovieSession.objects.get(id=ticket_data["movie_session"])
movie_session = MovieSession.objects.get(
id=ticket_data["movie_session"]
)
Ticket.objects.create(
order=order,
movie_session=movie_session,
Expand Down
2 changes: 1 addition & 1 deletion settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@
"django.contrib.contenttypes",
]

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

0 comments on commit 748d031

Please sign in to comment.