Max clip amount implemented
authorGeorgios Atheridis <georgios@atheridis.org>
Sun, 22 Jan 2023 14:03:45 +0000 (14:03 +0000)
committerGeorgios Atheridis <georgios@atheridis.org>
Sun, 22 Jan 2023 14:03:45 +0000 (14:03 +0000)
12 files changed:
core/manager/admin.py
core/manager/errors.py [new file with mode: 0644]
core/manager/migrations/0004_alter_clip_id.py [new file with mode: 0644]
core/manager/migrations/0005_myuser_alter_clip_account.py [new file with mode: 0644]
core/manager/migrations/0006_clip_date_added_alter_clip_account_delete_myuser.py [new file with mode: 0644]
core/manager/migrations/0007_resettime.py [new file with mode: 0644]
core/manager/migrations/0008_resettime_clip_amount.py [new file with mode: 0644]
core/manager/migrations/0009_rename_clip_amount_resettime_max_clips.py [new file with mode: 0644]
core/manager/migrations/0010_rename_resettime_resetdata.py [new file with mode: 0644]
core/manager/models.py
core/manager/request_clip.py
core/manager/views.py

index 710fba10adeace7bf7fae5eccb143db7fd4108f6..1e324257aec8c02f9057fd050e2188c66682c0db 100644 (file)
@@ -1,6 +1,7 @@
 from django.contrib import admin
 
 # Register your models here.
-from .models import Clip
+from .models import Clip, ResetData
 
 admin.site.register(Clip)
+admin.site.register(ResetData)
diff --git a/core/manager/errors.py b/core/manager/errors.py
new file mode 100644 (file)
index 0000000..42e0afa
--- /dev/null
@@ -0,0 +1,2 @@
+class TooManyClips(Exception):
+    pass
diff --git a/core/manager/migrations/0004_alter_clip_id.py b/core/manager/migrations/0004_alter_clip_id.py
new file mode 100644 (file)
index 0000000..4709e22
--- /dev/null
@@ -0,0 +1,20 @@
+# Generated by Django 4.1.5 on 2023-01-22 13:10
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("manager", "0003_alter_clip_account"),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name="clip",
+            name="id",
+            field=models.CharField(
+                max_length=100, primary_key=True, serialize=False, unique=True
+            ),
+        ),
+    ]
diff --git a/core/manager/migrations/0005_myuser_alter_clip_account.py b/core/manager/migrations/0005_myuser_alter_clip_account.py
new file mode 100644 (file)
index 0000000..ffebc21
--- /dev/null
@@ -0,0 +1,50 @@
+# Generated by Django 4.1.5 on 2023-01-22 13:30
+
+from django.conf import settings
+import django.contrib.auth.models
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("auth", "0012_alter_user_first_name_max_length"),
+        ("manager", "0004_alter_clip_id"),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name="MyUser",
+            fields=[
+                (
+                    "user_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+                ("clip_amount", models.IntegerField(default=0)),
+            ],
+            options={
+                "verbose_name": "user",
+                "verbose_name_plural": "users",
+                "abstract": False,
+            },
+            bases=("auth.user",),
+            managers=[
+                ("objects", django.contrib.auth.models.UserManager()),
+            ],
+        ),
+        migrations.AlterField(
+            model_name="clip",
+            name="account",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE, to="manager.myuser"
+            ),
+        ),
+    ]
diff --git a/core/manager/migrations/0006_clip_date_added_alter_clip_account_delete_myuser.py b/core/manager/migrations/0006_clip_date_added_alter_clip_account_delete_myuser.py
new file mode 100644 (file)
index 0000000..f523efb
--- /dev/null
@@ -0,0 +1,31 @@
+# Generated by Django 4.1.5 on 2023-01-22 13:42
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ("manager", "0005_myuser_alter_clip_account"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="clip",
+            name="date_added",
+            field=models.DateTimeField(null=True),
+        ),
+        migrations.AlterField(
+            model_name="clip",
+            name="account",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
+            ),
+        ),
+        migrations.DeleteModel(
+            name="MyUser",
+        ),
+    ]
diff --git a/core/manager/migrations/0007_resettime.py b/core/manager/migrations/0007_resettime.py
new file mode 100644 (file)
index 0000000..6cafcbe
--- /dev/null
@@ -0,0 +1,28 @@
+# Generated by Django 4.1.5 on 2023-01-22 13:50
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("manager", "0006_clip_date_added_alter_clip_account_delete_myuser"),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name="ResetTime",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("date_time", models.DateTimeField()),
+            ],
+        ),
+    ]
diff --git a/core/manager/migrations/0008_resettime_clip_amount.py b/core/manager/migrations/0008_resettime_clip_amount.py
new file mode 100644 (file)
index 0000000..c41dc35
--- /dev/null
@@ -0,0 +1,18 @@
+# Generated by Django 4.1.5 on 2023-01-22 13:58
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("manager", "0007_resettime"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="resettime",
+            name="clip_amount",
+            field=models.IntegerField(default=2),
+        ),
+    ]
diff --git a/core/manager/migrations/0009_rename_clip_amount_resettime_max_clips.py b/core/manager/migrations/0009_rename_clip_amount_resettime_max_clips.py
new file mode 100644 (file)
index 0000000..d73a64e
--- /dev/null
@@ -0,0 +1,18 @@
+# Generated by Django 4.1.5 on 2023-01-22 14:00
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("manager", "0008_resettime_clip_amount"),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name="resettime",
+            old_name="clip_amount",
+            new_name="max_clips",
+        ),
+    ]
diff --git a/core/manager/migrations/0010_rename_resettime_resetdata.py b/core/manager/migrations/0010_rename_resettime_resetdata.py
new file mode 100644 (file)
index 0000000..f3619e5
--- /dev/null
@@ -0,0 +1,17 @@
+# Generated by Django 4.1.5 on 2023-01-22 14:02
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("manager", "0009_rename_clip_amount_resettime_max_clips"),
+    ]
+
+    operations = [
+        migrations.RenameModel(
+            old_name="ResetTime",
+            new_name="ResetData",
+        ),
+    ]
index f02c1aa894fdd167bb7c1e05e664b2cd78118c0c..5a9fff4fc2ad79a07e3652d37cf0081b0503e6bd 100644 (file)
@@ -2,9 +2,13 @@ from django.db import models
 from django.contrib.auth.models import User
 
 
-# Create your models here.
+class ResetData(models.Model):
+    date_time = models.DateTimeField()
+    max_clips = models.IntegerField(default=2)
+
+
 class Clip(models.Model):
-    id = models.CharField(primary_key=True, max_length=100)
+    id = models.CharField(primary_key=True, max_length=100, unique=True)
     url = models.URLField(null=True)
     embed_url = models.URLField(null=True)
     broadcaster_id = models.CharField(null=True, max_length=100)
@@ -19,4 +23,5 @@ class Clip(models.Model):
     thumbnail_url = models.URLField(null=True)
     duration = models.FloatField(null=True)
     vod_offset = models.IntegerField(null=True)
+    date_added = models.DateTimeField(null=True)
     account = models.ForeignKey(User, on_delete=models.CASCADE)
index 92b1913aa5922cf5bc42538a125ed444e3ad0d9f..cd5f2ece126117fa133f215e41e777188b92b9da 100644 (file)
@@ -1,5 +1,7 @@
 import requests
-from .models import Clip
+import datetime
+from .errors import TooManyClips
+from .models import Clip, ResetData
 from urllib.parse import urlparse
 from allauth.socialaccount.models import SocialApp, SocialToken
 from django.contrib.auth.models import User
@@ -7,6 +9,20 @@ from django.contrib.auth.models import User
 
 def request_clip(user, clip: str):
     id = urlparse(clip).path.split("/")[-1]
+    user = User.objects.get(id=user.id)
+    reset_data = ResetData.objects.first()
+    reset_time = reset_data.date_time
+    max_clips = reset_data.max_clips
+
+    if (
+        len(
+            Clip.objects.filter(account=user).filter(
+                date_added__gt=reset_time
+            )
+        )
+        >= max_clips
+    ):
+        raise TooManyClips
 
     social_app: SocialApp = SocialApp.objects.first()
     oauth = SocialToken.objects.first().token
@@ -26,7 +42,7 @@ def request_clip(user, clip: str):
 
     data = r.json()["data"][0]
     print(data)
-    Clip(
+    clip = Clip(
         id=data["id"],
         url=data["url"],
         embed_url=data["embed_url"],
@@ -42,7 +58,10 @@ def request_clip(user, clip: str):
         thumbnail_url=data["thumbnail_url"],
         duration=data["duration"],
         vod_offset=data["vod_offset"],
-        account=User.objects.get(id=user.id),
-    ).save()
+        date_added=datetime.datetime.now(),
+        account=user,
+    )
+    clip.validate_unique()
+    clip.save()
 
     return
index 9299a39734eee783fa98970020bc5483389302ef..7e2e114b721d09acf896a0d289a68837703ab764 100644 (file)
@@ -2,9 +2,11 @@ import requests
 
 from django.http import HttpResponse
 from django.shortcuts import render
+from django.core.exceptions import ValidationError
 
 from .request_clip import request_clip
 from .forms import ClipForm
+from .errors import TooManyClips
 
 
 def get_name(request):
@@ -16,6 +18,11 @@ def get_name(request):
         if form.is_valid():
             try:
                 request_clip(user=request.user, clip=form.cleaned_data["clip"])
+            except ValidationError as e:
+                print(e)
+                return HttpResponse(b"<h1>Clip already exists</h1>")
+            except TooManyClips:
+                return HttpResponse(b"<h1>You have submitted the maximum number of clips</h1>")
             except Exception as e:
                 print(e)
                 return HttpResponse(b"<h1>NOPE</h1>")