diff --git a/pyconkr/settings.py b/pyconkr/settings.py index d2c7ff1..4a756fe 100644 --- a/pyconkr/settings.py +++ b/pyconkr/settings.py @@ -44,6 +44,7 @@ "constance.backends.database", # apps "sponsor", + "status", # swagger "drf_spectacular", ] diff --git a/pyconkr/urls.py b/pyconkr/urls.py index 7f70d1c..564933c 100644 --- a/pyconkr/urls.py +++ b/pyconkr/urls.py @@ -23,12 +23,14 @@ ) import sponsor.routers +import status.urls urlpatterns = [ path("api-auth/", include("rest_framework.urls")), path("summernote/", include("django_summernote.urls")), path("admin/", admin.site.urls), path("sponsors/", include(sponsor.routers.get_router().urls)), + path("status/", include(status.urls)), ] if settings.DEBUG is True: diff --git a/status/__init__.py b/status/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/status/admin.py b/status/admin.py new file mode 100644 index 0000000..608954c --- /dev/null +++ b/status/admin.py @@ -0,0 +1,16 @@ +from django.contrib import admin + +from status.models import Status + + +class StatusAdmin(admin.ModelAdmin): + list_display = ("name", "open_at", "close_at") + list_editable = ( + "open_at", + "close_at", + ) + ordering = ("open_at",) + search_fields = ("name",) + + +admin.site.register(Status, StatusAdmin) diff --git a/status/apps.py b/status/apps.py new file mode 100644 index 0000000..cb23d09 --- /dev/null +++ b/status/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class StatusConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "status" diff --git a/status/migrations/0001_initial.py b/status/migrations/0001_initial.py new file mode 100644 index 0000000..d259696 --- /dev/null +++ b/status/migrations/0001_initial.py @@ -0,0 +1,30 @@ +# Generated by Django 4.1.5 on 2023-02-24 17:43 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="Status", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=100)), + ("open_at", models.DateTimeField()), + ("close_at", models.DateTimeField()), + ], + ), + ] diff --git a/status/migrations/__init__.py b/status/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/status/models.py b/status/models.py new file mode 100644 index 0000000..4e8c97d --- /dev/null +++ b/status/models.py @@ -0,0 +1,7 @@ +from django.db import models + + +class Status(models.Model): + name = models.CharField(max_length=100) + open_at = models.DateTimeField() + close_at = models.DateTimeField() diff --git a/status/tests.py b/status/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/status/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/status/urls.py b/status/urls.py new file mode 100644 index 0000000..9ba260f --- /dev/null +++ b/status/urls.py @@ -0,0 +1,23 @@ +"""pyconkr URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/4.1/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import include, path + +from status.views import StatusView + +urlpatterns = [ + path("", StatusView.as_view()), +] diff --git a/status/views.py b/status/views.py new file mode 100644 index 0000000..7e8daad --- /dev/null +++ b/status/views.py @@ -0,0 +1,22 @@ +import datetime + +from pytz import timezone +from rest_framework.response import Response +from rest_framework.views import APIView + +from status.models import Status + + +class StatusView(APIView): + def get(self, request, name: str): + status = Status.objects.get(name=name) + now = datetime.datetime.now(tz=timezone("Asia/Seoul")) + + flag = None + + if status.open_at < now < status.close_at: + flag = True + else: + flag = False + + return Response({"name": name, "open": flag})