From ce3fdfffa10b054c49c1a9d51c8d50f0c824d65f Mon Sep 17 00:00:00 2001 From: Boris Date: Tue, 31 Mar 2026 19:33:16 +0300 Subject: [PATCH] move to new domain --- .../migrations/0002_add_user_to_item.py | 24 ++++++++++++ ...003_assign_existing_items_to_first_user.py | 20 ++++++++++ backlogger/models.py | 3 ++ backlogger/views.py | 10 +++-- kboris/settings.py | 4 ++ nginx/killmybacklog.com.conf | 39 +++++++++++++++++++ 6 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 backlogger/migrations/0002_add_user_to_item.py create mode 100644 backlogger/migrations/0003_assign_existing_items_to_first_user.py create mode 100644 nginx/killmybacklog.com.conf diff --git a/backlogger/migrations/0002_add_user_to_item.py b/backlogger/migrations/0002_add_user_to_item.py new file mode 100644 index 0000000..550b939 --- /dev/null +++ b/backlogger/migrations/0002_add_user_to_item.py @@ -0,0 +1,24 @@ +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('backlogger', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='item', + name='user', + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='items', + to=settings.AUTH_USER_MODEL, + ), + ), + ] diff --git a/backlogger/migrations/0003_assign_existing_items_to_first_user.py b/backlogger/migrations/0003_assign_existing_items_to_first_user.py new file mode 100644 index 0000000..ee7a684 --- /dev/null +++ b/backlogger/migrations/0003_assign_existing_items_to_first_user.py @@ -0,0 +1,20 @@ +from django.db import migrations + + +def assign_to_first_user(apps, schema_editor): + Item = apps.get_model('backlogger', 'Item') + User = apps.get_model('auth', 'User') + first_user = User.objects.order_by('id').first() + if first_user: + Item.objects.filter(user__isnull=True).update(user=first_user) + + +class Migration(migrations.Migration): + + dependencies = [ + ('backlogger', '0002_add_user_to_item'), + ] + + operations = [ + migrations.RunPython(assign_to_first_user, migrations.RunPython.noop), + ] diff --git a/backlogger/models.py b/backlogger/models.py index 19bc14f..eef1e25 100644 --- a/backlogger/models.py +++ b/backlogger/models.py @@ -1,3 +1,4 @@ +from django.contrib.auth.models import User from django.db import models @@ -13,6 +14,8 @@ class Item(models.Model): (OTHER, 'Other'), ] + user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='items', null=True) + category = models.CharField(max_length=10, choices=CATEGORY_CHOICES) name = models.CharField(max_length=200) progress_percent = models.FloatField(default=0.0) diff --git a/backlogger/views.py b/backlogger/views.py index 0e2bbf6..75ea047 100644 --- a/backlogger/views.py +++ b/backlogger/views.py @@ -19,7 +19,7 @@ def item_list(request): category = request.GET.get('category', '') sort = request.GET.get('sort', 'fav') - items = Item.objects.all() + items = Item.objects.filter(user=request.user) if category: items = items.filter(category=category) items = items.order_by(*SORT_MAP.get(sort, SORT_MAP['fav'])) @@ -37,7 +37,9 @@ def item_add(request): if request.method == 'POST': form = ItemForm(request.POST) if form.is_valid(): - form.save() + item = form.save(commit=False) + item.user = request.user + item.save() return redirect('backlogger:list') else: form = ItemForm() @@ -46,7 +48,7 @@ def item_add(request): @login_required def item_edit(request, pk): - item = get_object_or_404(Item, pk=pk) + item = get_object_or_404(Item, pk=pk, user=request.user) if request.method == 'POST': form = ItemForm(request.POST, instance=item) if form.is_valid(): @@ -60,5 +62,5 @@ def item_edit(request, pk): @login_required def item_delete(request, pk): if request.method == 'POST': - get_object_or_404(Item, pk=pk).delete() + get_object_or_404(Item, pk=pk, user=request.user).delete() return redirect('backlogger:list') diff --git a/kboris/settings.py b/kboris/settings.py index 242b7c1..205b0e1 100644 --- a/kboris/settings.py +++ b/kboris/settings.py @@ -10,6 +10,8 @@ ALLOWED_HOSTS = [ 'k-boris.tech', 'www.k-boris.tech', 'admin.k-boris.tech', + 'killmybacklog.com', + 'www.killmybacklog.com', 'localhost', '127.0.0.1', ] @@ -18,6 +20,8 @@ CSRF_TRUSTED_ORIGINS = [ 'https://k-boris.tech', 'https://www.k-boris.tech', 'https://admin.k-boris.tech', + 'https://killmybacklog.com', + 'https://www.killmybacklog.com', ] INSTALLED_APPS = [ diff --git a/nginx/killmybacklog.com.conf b/nginx/killmybacklog.com.conf new file mode 100644 index 0000000..ea1e38b --- /dev/null +++ b/nginx/killmybacklog.com.conf @@ -0,0 +1,39 @@ +server { + server_name killmybacklog.com www.killmybacklog.com; + + client_max_body_size 10m; + + location = / { + return 301 /backlogger/; + } + + location / { + proxy_pass http://127.0.0.1:8080; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + listen [::]:443 ssl; # managed by Certbot + listen 443 ssl; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/killmybacklog.com/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/killmybacklog.com/privkey.pem; # managed by Certbot + include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot +} + +server { + if ($host = www.killmybacklog.com) { + return 301 https://$host$request_uri; + } # managed by Certbot + + if ($host = killmybacklog.com) { + return 301 https://$host$request_uri; + } # managed by Certbot + + listen 80; + listen [::]:80; + server_name killmybacklog.com www.killmybacklog.com; + return 404; # managed by Certbot +}