Skip to content

Commit

Permalink
Merge pull request #33 from d-party/develop
Browse files Browse the repository at this point in the history
Developからmainへのマージ
  • Loading branch information
Uno-Takashi authored Apr 15, 2022
2 parents 75a1385 + 56fd6d9 commit 1bee803
Show file tree
Hide file tree
Showing 17 changed files with 806 additions and 19 deletions.
32 changes: 32 additions & 0 deletions Django/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,36 @@
"v1/chrome-extension/version-check",
views.ChromeExtensionVersionCheckAPI.as_view(),
),
path(
"v1/statistics/anime-store/active-user-per-day",
views.AnimeActiveUserPerDayAPI.as_view(),
),
path(
"v1/statistics/anime-store/active-room-per-day",
views.AnimeActiveRoomPerDayAPI.as_view(),
),
path(
"v1/statistics/anime-store/anime-reaction-count",
views.AnimeRoomReactionCountAPI.as_view(),
),
path(
"v1/statistics/anime-store/anime-reaction-all-count",
views.AnimeRoomReactionAllCountAPI.as_view(),
),
path(
"v1/statistics/anime-store/anime-room-all-count",
views.AnimeRoomAllCountAPI.as_view(),
),
path(
"v1/statistics/anime-store/anime-user-all-count",
views.AnimeUserAllCountAPI.as_view(),
),
path(
"v1/statistics/anime-store/anime-room-alive-count",
views.AnimeRoomAliveCountAPI.as_view(),
),
path(
"v1/statistics/anime-store/anime-user-alive-count",
views.AnimeUserAliveCountAPI.as_view(),
),
]
166 changes: 165 additions & 1 deletion Django/api/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
import os
import datetime
import pandas as pd

from streamer.models import AnimeUser, AnimeRoom, AnimeReaction, ReactionType
from django.shortcuts import render
from django.db.models import Count
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAdminUser, AllowAny

from rest_framework import status
from distutils.version import LooseVersion, StrictVersion
Expand All @@ -12,7 +18,9 @@ class ChromeExtensionVersionCheckAPI(APIView):
現在のバックエンドと問題なくメッセージ可能なバージョンか否かを通知する
"""

def get(self, request, format=None):
permission_classes = [AllowAny]

def get(self, request, format=None) -> Response:
"""chromeのバージョンをgetのパラメータとして受け取り、
バックエンドが問題なく処理できるバージョンであるかを確認する
Expand Down Expand Up @@ -46,3 +54,159 @@ def get(self, request, format=None):
{"message": "extension-versionパラメータが存在しません"},
status=status.HTTP_400_BAD_REQUEST,
)


class AnimeActiveUserPerDayAPI(APIView):
"""アクティブユーザー数を返す
アクティブユーザー数とは、ルーム内に存在していたユーザーである
"""

permission_classes = [IsAdminUser]

def get(self, request, format=None) -> Response:
"""アクティブユーザー数のdictを返す
Args:
request ([type]): [description]
format ([type], optional): [description]. Defaults to None.
Returns:
[Response]: {"description": "理由を記述"}
"""
Active_User_Per_Day_Set = (
AnimeUser.objects.extra(select={"day": "date( created_at )"})
.values("day")
.annotate(count=Count("created_at"))
)
Active_User_Per_Day = list(Active_User_Per_Day_Set)
if (
len(Active_User_Per_Day) == 0
or Active_User_Per_Day[-1]["day"] != datetime.date.today()
):
Active_User_Per_Day.append({"day": datetime.date.today(), "count": 0})

Active_User_Per_Day_Pd = (
pd.DataFrame(Active_User_Per_Day)
.set_index("day")
.asfreq("1D", fill_value=0)
)

Active_User_Per_Day_Pd["day"] = Active_User_Per_Day_Pd.index.map(
lambda x: x.to_pydatetime().date()
)
return Response(
{
"data": Active_User_Per_Day_Pd.to_dict(orient="records"),
}
)


class AnimeActiveRoomPerDayAPI(APIView):
"""アクティブルーム数を返す
アクティブルーム数とは、ユーザーによって作られたルームの合計である
"""

permission_classes = [IsAdminUser]

def get(self, request, format=None) -> Response:
"""アクティブルーム数のdictを返す
Args:
request ([type]): [description]
format ([type], optional): [description]. Defaults to None.
Returns:
[Response]: {"description": "理由を記述"}
"""
Active_Room_Per_Day_Set = (
AnimeRoom.objects.extra(select={"day": "date( created_at )"})
.values("day")
.annotate(count=Count("created_at"))
)
Active_User_Room_Day = list(Active_Room_Per_Day_Set)
if (
len(Active_User_Room_Day) == 0
or Active_User_Room_Day[-1]["day"] != datetime.date.today()
):
Active_User_Room_Day.append({"day": datetime.date.today(), "count": 0})

Active_Room_Per_Day_Pd = (
pd.DataFrame(Active_User_Room_Day)
.set_index("day")
.asfreq("1D", fill_value=0)
)

Active_Room_Per_Day_Pd["day"] = Active_Room_Per_Day_Pd.index.map(
lambda x: x.to_pydatetime().date()
)
return Response(
{
"data": Active_Room_Per_Day_Pd.to_dict(orient="records"),
}
)


class AnimeRoomReactionCountAPI(APIView):
"""アニメルーム内のリアクションのカウント結果を返すAPI"""

permission_classes = [IsAdminUser]

def get(self, request, format=None) -> Response:
response = []
for x in ReactionType.choices:
response.append(
{
"count": AnimeReaction.objects.filter(reaction_type=x[0])
.all()
.count(),
"reaction_type": x[1],
}
)
return Response({"data": response})


class AnimeRoomReactionAllCountAPI(APIView):
"""アニメルーム内のリアクションの累計カウント結果を返すAPI"""

permission_classes = [IsAdminUser]

def get(self, request, format=None) -> Response:
return Response({"data": {"count": AnimeReaction.objects.all().count()}})


class AnimeUserAllCountAPI(APIView):
"""アニメルーム内のユーザー数の累計カウント結果を返すAPI"""

permission_classes = [IsAdminUser]

def get(self, request, format=None) -> Response:
return Response({"data": {"count": AnimeUser.objects.all().count()}})


class AnimeRoomAllCountAPI(APIView):
"""アニメルーム数の累計カウント結果を返すAPI"""

permission_classes = [IsAdminUser]

def get(self, request, format=None) -> Response:
return Response({"data": {"count": AnimeRoom.objects.all().count()}})


class AnimeUserAliveCountAPI(APIView):
"""現在接続中のアニメルーム内のユーザー数のカウント結果を返すAPI"""

permission_classes = [IsAdminUser]

def get(self, request, format=None) -> Response:
return Response({"data": {"count": AnimeUser.objects.alive().count()}})


class AnimeRoomAliveCountAPI(APIView):
"""現在接続中のアニメルーム数の現在のカウント結果を返すAPI"""

permission_classes = [IsAdminUser]

def get(self, request, format=None) -> Response:
return Response({"data": {"count": AnimeRoom.objects.alive().count()}})
11 changes: 11 additions & 0 deletions Django/d_party/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
"debug_toolbar",
"django_boost",
"rest_framework",
"request",
"streamer",
"web",
"api",
Expand All @@ -63,6 +64,7 @@
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"request.middleware.RequestMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
Expand Down Expand Up @@ -171,6 +173,11 @@
"url": "https://github.com/d-Party",
"new_window": True,
},
{
"name": "Chart",
"url": "/admin/chart",
"new_window": True,
},
{"model": "auth.User"},
{"model": "streamer.AnimeRoom"},
{"model": "streamer.TVRoom"},
Expand Down Expand Up @@ -241,6 +248,10 @@
"language_chooser": False,
}

JAZZMIN_UI_TWEAKS = {
"theme": "darkly",
}


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.0/howto/static-files/
Expand Down
Loading

0 comments on commit 1bee803

Please sign in to comment.