Skip to content

Commit 2a7f6bb

Browse files
committed
Merge remote-tracking branch 'upstream/devdev' into devdev
2 parents 89034b8 + 13f7e04 commit 2a7f6bb

File tree

12 files changed

+128
-14
lines changed

12 files changed

+128
-14
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 4.1.5 on 2023-07-16 13:33
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("program", "0006_alter_program_options_delete_proposal_and_more"),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name="program",
15+
name="profile_img",
16+
field=models.ImageField(blank=True, null=True, upload_to=""),
17+
),
18+
]

program/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class Program(models.Model):
4242
(SPRINT, "스프린트"),
4343
),
4444
)
45+
profile_img = models.ImageField(null=True, blank=True)
4546

4647
class Meta:
4748
verbose_name = "프로그램"
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Generated by Django 4.1.5 on 2023-07-16 13:06
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("session", "0002_remove_session_accepted"),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name="session",
15+
name="host_name",
16+
field=models.CharField(blank=True, max_length=50, null=True),
17+
),
18+
migrations.AlterField(
19+
model_name="session",
20+
name="introduction",
21+
field=models.TextField(
22+
blank=True,
23+
help_text="발표 소개 페이지에 들어가는 내용입니다.",
24+
max_length=3000,
25+
null=True,
26+
),
27+
),
28+
]

session/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,13 @@ def __str__(self):
7676

7777
class Session(models.Model):
7878
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
79+
host_name = models.CharField(max_length=50, null=True, blank=True)
7980
title = models.CharField(max_length=255)
8081
introduction = models.TextField(
8182
max_length=3000,
8283
null=True,
8384
blank=True,
84-
help_text="발표 소개 페이지에 들어가는 내용입니다. 변경 사항은 최대 60분 이내에 적용됩니다.",
85+
help_text="발표 소개 페이지에 들어가는 내용입니다.",
8586
)
8687

8788
difficulty = models.CharField(

session/resources.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,20 @@
77

88

99
class SessionResource(resources.ModelResource):
10-
def before_save_instance(self, instance: Session, using_transactions, dry_run):
11-
instance.start_at = datetime.datetime.now()
10+
def before_import_row(self, row, row_number=None, **kwargs):
11+
row["room_num"] = int(row["room_num"])
1212

1313
class Meta:
1414
model = Session
15-
fields = ["id", "title", "difficulty", "duration", "language", "category"]
15+
fields = [
16+
"id",
17+
"title",
18+
"difficulty",
19+
"duration",
20+
"language",
21+
"category",
22+
"start_at",
23+
"room_num",
24+
"introduction",
25+
"host_name"
26+
]

session/serializers.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
class SessionSerializer(serializers.ModelSerializer):
88
category_name = serializers.SerializerMethodField()
99
accepted = serializers.BooleanField(read_only=True)
10-
created_at = serializers.DateTimeField(read_only=True)
11-
updated_at = serializers.DateTimeField(read_only=True)
10+
day_of_week = serializers.SerializerMethodField()
11+
start_at = serializers.DateTimeField(read_only=True)
1212

1313
class Meta:
1414
model = Session
@@ -25,22 +25,28 @@ class Meta:
2525
"video_url",
2626
"slide_url",
2727
"room_num",
28-
"created_at",
29-
"updated_at",
28+
"day_of_week",
29+
"start_at",
30+
"host_name"
3031
]
3132

3233
def to_representation(self, instance: Session):
3334
response = super().to_representation(instance)
34-
response["user"] = UserExtSerializer(instance.user.userext).data
35+
response["user"] = UserExtSerializer(instance.user.userext).data if instance.user else None
3536
return response
3637

3738
@staticmethod
3839
def get_category_name(obj: Session):
3940
return obj.category.name
4041

42+
@staticmethod
43+
def get_day_of_week(obj: Session):
44+
return obj.start_at.strftime("%a") if obj.start_at else None
45+
4146

4247
class SessionListSerializer(serializers.ModelSerializer):
4348
category_name = serializers.SerializerMethodField()
49+
day_of_week = serializers.SerializerMethodField()
4450

4551
class Meta:
4652
model = Session
@@ -53,6 +59,7 @@ class Meta:
5359
"language",
5460
"category",
5561
"category_name",
62+
"day_of_week",
5663
]
5764

5865
@staticmethod
@@ -63,6 +70,10 @@ def get_profile_img(obj: Session):
6370
def get_category_name(obj: Session):
6471
return obj.category.name
6572

73+
@staticmethod
74+
def get_day_of_week(obj: Session):
75+
return obj.start_at.strftime("%a") if obj.start_at else None
76+
6677
def to_representation(self, instance: Session):
6778
response = super().to_representation(instance)
6879

session/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
from rest_framework.routers import DefaultRouter
33

44
from session.viewsets import SessionViewSet
5+
from session.views import get__timetable
56

67
session_router = DefaultRouter()
78
session_router.register("", SessionViewSet, basename="session")
89

910
urlpatterns = [
11+
path("timetable/", get__timetable),
1012
path("", include(session_router.urls)),
1113
]

session/views.py

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,34 @@
1+
import datetime
2+
3+
from rest_framework.decorators import api_view
14
from rest_framework.response import Response
25

3-
from program.models import Session
6+
from session.models import Session
7+
from session.serializers import SessionSerializer
48

59

10+
@api_view(["GET"])
611
def get__timetable(request):
712
response = dict()
813

9-
response["day1"] = Session.objects.filter()
14+
MONTH = 8
15+
FIRST_DAY = 12
16+
SECOND_DAY = 13
17+
18+
response["day1"] = SessionSerializer(
19+
Session.objects.filter(
20+
start_at__month=MONTH,
21+
start_at__day=FIRST_DAY
22+
),
23+
many=True
24+
).data
1025

11-
response["day2"] = Session.objects.filter()
26+
response["day2"] = SessionSerializer(
27+
Session.objects.filter(
28+
start_at__month=MONTH,
29+
start_at__day=SECOND_DAY
30+
),
31+
many=True
32+
).data
1233

1334
return Response(data=response)

sponsor/viewsets.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ class SponsorViewSet(ModelViewSet):
2525
validator = SponsorValidater()
2626

2727
def get_queryset(self):
28-
return Sponsor.objects.all()
28+
return Sponsor.objects.all().order_by("paid_at")
2929

3030
def list(self, request, *args, **kwargs):
31-
queryset = Sponsor.objects.filter(paid_at__isnull=False).order_by("level")
31+
queryset = Sponsor.objects.filter(paid_at__isnull=False).order_by("level", "paid_at")
3232
serializer = SponsorListSerializer(queryset, many=True)
3333
return Response(serializer.data)
3434

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 4.1.5 on 2023-07-16 13:17
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('ticket', '0008_alter_ticket_refunded_at'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='tickettype',
15+
name='buyable_url',
16+
field=models.CharField(blank=True, max_length=255, null=True),
17+
),
18+
]

0 commit comments

Comments
 (0)