Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate Multiple Models From V1 to V2 #9117

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Empty file added event_sub_topics/__init__.py
Empty file.
5 changes: 5 additions & 0 deletions event_sub_topics/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.contrib import admin

from .models import EventSubTopic

admin.site.register(EventSubTopic)
6 changes: 6 additions & 0 deletions event_sub_topics/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class EventSubTopicsConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "event_sub_topics"
28 changes: 28 additions & 0 deletions event_sub_topics/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Generated by Django 5.0 on 2023-12-18 13:47

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

initial = True

dependencies = [
('event_topics', '0001_initial'),
]

operations = [
migrations.CreateModel(
name='EventSubTopic',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200, null=True)),
('slug', models.CharField(max_length=200, null=True)),
('event_topic_id', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='event_topics.eventtopic')),
],
options={
'indexes': [models.Index(fields=['slug', 'event_topic_id'], name='event_sub_t_slug_e7fe13_idx')],
},
),
]
Empty file.
20 changes: 20 additions & 0 deletions event_sub_topics/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from django.db import models


class EventSubTopic(models.Model):
name = models.CharField(max_length=200, null=True)
slug = models.CharField(max_length=200, null=True)

event_topic_id = models.ForeignKey(
"event_topics.EventTopic",
on_delete=models.CASCADE,
null=True,
)

class Meta:
indexes = [
models.Index(fields=["slug", "event_topic_id"]),
]

def __str__(self):
return f"{self.name} ({self.slug}) - {self.event_topic_id}"
9 changes: 9 additions & 0 deletions event_sub_topics/serializer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from rest_framework import serializers

from .models import EventSubTopic


class EventSubTopicSerializer(serializers.ModelSerializer):
class Meta:
model = EventSubTopic
fields = ("id", "name", "slug", "event_topic_id")
1 change: 1 addition & 0 deletions event_sub_topics/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Create your tests here.
21 changes: 21 additions & 0 deletions event_sub_topics/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from django.urls import path

from .views import EventSubTopicCreate, EventSubTopicList, EventSubTopicRetrieve, EventSubTopicRetrieveUpdateDestroy

urlpatterns = [
path("event-sub-topics/", EventSubTopicCreate.as_view(), name="event_sub_topic_create"),
path("event-sub-topics/<int:pk>/", EventSubTopicRetrieveUpdateDestroy.as_view(), name="event_sub_topic_detail"),
path(
"event-topics/<int:event_topic_id>/event-sub-topics", EventSubTopicList.as_view(), name="event_sub_topic_list"
),
path(
"events/<int:event_id>/event-sub-topic",
EventSubTopicRetrieve.as_view(),
name="event_event_sub_topic_view_detail",
),
path(
"custom-placeholders/<int:custom_placeholder_id>/event-sub-topic",
EventSubTopicRetrieve.as_view(),
name="custom_placeholder_event_sub_topic_view_detail",
),
]
46 changes: 46 additions & 0 deletions event_sub_topics/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from rest_framework import generics

from open_event_api.permissions import IsSuperAdminForUpdate

from .models import EventSubTopic
from .serializer import EventSubTopicSerializer


class EventSubTopicCreate(generics.CreateAPIView):
"""Allows creation of EventSubTopic."""

serializer_class = EventSubTopicSerializer


class EventSubTopicList(generics.ListAPIView):
"""Allows listing EventSubTopic."""

queryset = EventSubTopic.objects.all()
serializer_class = EventSubTopicSerializer

# Fields to allow sorting by
ordering_fields = ["name"]


class EventSubTopicRetrieve(generics.RetrieveAPIView):
"""Allows viewing of the related EventSubTopic."""

queryset = EventSubTopic.objects.all()
serializer_class = EventSubTopicSerializer

def get(self, request, *args, **kwargs):
if kwargs.get("event_id") is not None:
# TODO: implement fetching event sub topic by event id
self.kwargs["pk"] = 1
if kwargs.get("custom_placeholder_id") is not None:
# TODO: implement fetching event sub topic by custom placeholder id
self.kwargs["pk"] = 1

return self.retrieve(request, *args, **kwargs)


class EventSubTopicRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView):
"""Allows viewing, updating and deleting of EventSubTopic."""

permission_classes = (IsSuperAdminForUpdate,)
serializer_class = EventSubTopicSerializer
2 changes: 1 addition & 1 deletion event_topics/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class EventTopicRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView):


class EventTopicRetrieveRelation(generics.RetrieveAPIView):
"""Allows viewing of a topic related to an event or event sub topic."""
"""Allows viewing of the related EventTopic."""

permission_classes = (IsSuperAdminForUpdate,)
queryset = EventTopic.objects.all()
Expand Down
Empty file added event_types/__init__.py
Empty file.
5 changes: 5 additions & 0 deletions event_types/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.contrib import admin

from .models import EventType

admin.site.register(EventType)
6 changes: 6 additions & 0 deletions event_types/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class EventTypesConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "event_types"
23 changes: 23 additions & 0 deletions event_types/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 5.0 on 2023-12-17 09:40

from django.db import migrations, models


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
migrations.CreateModel(
name='EventType',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(blank=True, max_length=200, null=True)),
('slug', models.CharField(max_length=200)),
('deleted_at', models.DateTimeField(blank=True, null=True)),
],
),
]
Empty file.
11 changes: 11 additions & 0 deletions event_types/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from django.db import models


class EventType(models.Model):
name = models.CharField(null=True, blank=True, max_length=200)
slug = models.CharField(max_length=200)

deleted_at = models.DateTimeField(null=True, blank=True)

def __str__(self):
return f"{self.name} ({self.slug})"
9 changes: 9 additions & 0 deletions event_types/serializer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from rest_framework import serializers

from .models import EventType


class EventTypeSerializer(serializers.ModelSerializer):
class Meta:
model = EventType
fields = ("id", "name", "slug")
1 change: 1 addition & 0 deletions event_types/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Create your tests here.
9 changes: 9 additions & 0 deletions event_types/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django.urls import path

from .views import EventTypeListCreate, EventTypeRetrieveRelation, EventTypeRetrieveUpdateDestroy

urlpatterns = [
path("event-types/", EventTypeListCreate.as_view(), name="event_type_list_create"),
path("event-types/<int:pk>/", EventTypeRetrieveUpdateDestroy.as_view(), name="event_type_detail"),
path("events/<int:event_id>/event-type/", EventTypeRetrieveRelation.as_view(), name="event_event_type_detail"),
]
38 changes: 38 additions & 0 deletions event_types/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from rest_framework import generics

from open_event_api.permissions import IsSuperAdminForUpdate

from .models import EventType
from .serializer import EventTypeSerializer


class EventTypeListCreate(generics.ListCreateAPIView):
"""Allows listing and creation of EventType."""

queryset = EventType.objects.all()
serializer_class = EventTypeSerializer

# Fields to allow sorting by
ordering_fields = ["name", "slug", "deleted_at"]


class EventTypeRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView):
"""Allows viewing, updating and deleting of EventType."""

permission_classes = (IsSuperAdminForUpdate,)
serializer_class = EventTypeSerializer


class EventTypeRetrieveRelation(generics.RetrieveAPIView):
"""Allows viewing of the related EventType."""

permission_classes = (IsSuperAdminForUpdate,)
queryset = EventType.objects.all()
serializer_class = EventTypeSerializer

def get(self, request, *args, **kwargs):
if kwargs.get("event_id") is not None:
# TODO: implement fetching event topic by event id
self.kwargs["pk"] = 1

return self.retrieve(request, *args, **kwargs)
Empty file added groups/__init__.py
Empty file.
5 changes: 5 additions & 0 deletions groups/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.contrib import admin

from .models import Group

admin.site.register(Group)
6 changes: 6 additions & 0 deletions groups/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class GroupsConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "groups"
32 changes: 32 additions & 0 deletions groups/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Generated by Django 5.0 on 2023-12-18 14:09

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

initial = True

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

operations = [
migrations.CreateModel(
name='Group',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200)),
('created_at', models.DateTimeField(auto_now_add=True)),
('modified_at', models.DateTimeField(auto_now=True)),
('social_links', models.JSONField(null=True)),
('about', models.TextField(null=True)),
('banner_url', models.URLField(null=True)),
('logo_url', models.URLField(null=True)),
('deleted_at', models.DateTimeField(null=True)),
('user_id', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
],
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Generated by Django 5.0 on 2023-12-18 14:19

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('groups', '0001_initial'),
]

operations = [
migrations.AddField(
model_name='group',
name='follower_count',
field=models.IntegerField(default=0, null=True),
),
migrations.AddField(
model_name='group',
name='is_promoted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='group',
name='thumbnail_image_url',
field=models.URLField(null=True),
),
]
Empty file added groups/migrations/__init__.py
Empty file.
24 changes: 24 additions & 0 deletions groups/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from django.db import models


class Group(models.Model):
name = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now=True)
social_links = models.JSONField(null=True)
about = models.TextField(null=True)
banner_url = models.URLField(null=True)
logo_url = models.URLField(null=True)
thumbnail_image_url = models.URLField(null=True)
is_promoted = models.BooleanField(default=False)
follower_count = models.IntegerField(null=True, default=0)
deleted_at = models.DateTimeField(null=True)

user_id = models.ForeignKey(
"users.CustomUser",
on_delete=models.SET_NULL,
null=True,
)

def __str__(self):
return f"{self.name} ({self.user_id})"
9 changes: 9 additions & 0 deletions groups/serializer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from rest_framework import serializers

from .models import Group


class GroupSerializer(serializers.ModelSerializer):
class Meta:
model = Group
fields = ("name", "user_id", "deleted_at")
1 change: 1 addition & 0 deletions groups/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Create your tests here.
10 changes: 10 additions & 0 deletions groups/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.urls import path

from .views import GroupListCreate, GroupListRelation, GroupRetrieveRelation, GroupRetrieveUpdateDestroy

urlpatterns = [
path("groups/", GroupListCreate.as_view(), name="group_list_create"),
path("groups/<int:pk>/", GroupRetrieveUpdateDestroy.as_view(), name="group_detail_update_delete"),
path("events/<int:event_id>/group", GroupRetrieveRelation.as_view(), name="event_group_detail"),
path("users/<int:user_id>/groups", GroupListRelation.as_view(), name="user_group_list"),
]