Skip to content

Commit 943ba43

Browse files
committed
feat: 세션 시간표 담기 API 작성 및 테스트 로직 추가
1 parent f0526a1 commit 943ba43

7 files changed

Lines changed: 802 additions & 21 deletions

File tree

app/core/const/tag.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ class OpenAPITag:
33
EVENT = "Event"
44
EVENT_PRESENTATION = "Event > Presentation"
55
EVENT_SPONSOR = "Event > Sponsor"
6+
EVENT_PRESENTATION_BOOKMARK = "Event > Presentation Bookmark"
67

78
SHOP_USER = "Shop > 고객"
89
SHOP_PRODUCT = "Shop > 상품"
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# Generated by Django 6.0.6 on 2026-07-11 05:12
2+
3+
import uuid
4+
5+
import django.db.models.deletion
6+
from django.conf import settings
7+
from django.db import migrations, models
8+
9+
10+
class Migration(migrations.Migration):
11+
dependencies = [
12+
("event", "0006_event_logo_historicalevent_logo"),
13+
("presentation", "0016_room_order"),
14+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
15+
]
16+
17+
operations = [
18+
migrations.CreateModel(
19+
name="PresentationBookmark",
20+
fields=[
21+
(
22+
"id",
23+
models.UUIDField(
24+
default=uuid.uuid4,
25+
editable=False,
26+
primary_key=True,
27+
serialize=False,
28+
),
29+
),
30+
("created_at", models.DateTimeField(auto_now_add=True)),
31+
(
32+
"event",
33+
models.ForeignKey(
34+
on_delete=django.db.models.deletion.CASCADE,
35+
related_name="presentation_bookmarks",
36+
to="event.event",
37+
),
38+
),
39+
(
40+
"presentation",
41+
models.ForeignKey(
42+
on_delete=django.db.models.deletion.CASCADE,
43+
related_name="bookmarks",
44+
to="presentation.presentation",
45+
),
46+
),
47+
(
48+
"user",
49+
models.ForeignKey(
50+
on_delete=django.db.models.deletion.CASCADE,
51+
related_name="presentation_bookmarks",
52+
to=settings.AUTH_USER_MODEL,
53+
),
54+
),
55+
],
56+
options={
57+
"constraints": [
58+
models.UniqueConstraint(
59+
fields=("user", "presentation"),
60+
name="uq__prst_bkmk__user__presentation",
61+
)
62+
],
63+
},
64+
),
65+
]

app/event/presentation/models.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,3 +210,22 @@ class RoomSchedule(BaseAbstractModel):
210210

211211
def __str__(self) -> str:
212212
return f"[{self.room}] {self.start_at} - {self.end_at} ({self.presentation})"
213+
214+
215+
class PresentationBookmark(models.Model):
216+
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
217+
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="presentation_bookmarks")
218+
event = models.ForeignKey(Event, on_delete=models.CASCADE, related_name="presentation_bookmarks")
219+
presentation = models.ForeignKey(Presentation, on_delete=models.CASCADE, related_name="bookmarks")
220+
created_at = models.DateTimeField(auto_now_add=True)
221+
222+
class Meta:
223+
constraints = [
224+
models.UniqueConstraint(
225+
fields=["user", "presentation"],
226+
name="uq__prst_bkmk__user__presentation",
227+
)
228+
]
229+
230+
def __str__(self) -> str:
231+
return f"[Bookmark] {self.user} - {self.presentation}"

app/event/presentation/serializers.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@
1010
from rest_framework import serializers
1111

1212

13+
class PresentationBookmarkRequestSerializer(serializers.Serializer):
14+
presentation_id = serializers.UUIDField()
15+
16+
17+
class PresentationBookmarkListResponseSerializer(serializers.Serializer):
18+
presentation_ids = serializers.ListField(child=serializers.UUIDField())
19+
20+
21+
class PresentationBookmarkResponseSerializer(serializers.Serializer):
22+
presentation_id = serializers.UUIDField()
23+
24+
1325
class PresentationTypeSerializer(serializers.ModelSerializer):
1426
event = EventSerializer(read_only=True)
1527

0 commit comments

Comments
 (0)