Skip to content

Commit

Permalink
Add group module to the project
Browse files Browse the repository at this point in the history
  • Loading branch information
thealphadollar committed Dec 18, 2023
1 parent d8015b3 commit 92f38bc
Show file tree
Hide file tree
Showing 13 changed files with 175 additions and 0 deletions.
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"),
]
58 changes: 58 additions & 0 deletions groups/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
from rest_framework import generics

from open_event_api.permissions import IsSuperAdminForUpdate

from .models import Group
from .serializer import GroupSerializer


class GroupListCreate(generics.ListCreateAPIView):
"""Allows listing and creation of Group."""

queryset = Group.objects.all()
serializer_class = GroupSerializer

# Fields to allow sorting by
ordering_fields = ["name"]
# TODO: Add filtering based on name field.


class GroupRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView):
"""Allows viewing, updating and deleting of Group."""

permission_classes = (IsSuperAdminForUpdate,)
serializer_class = GroupSerializer


class GroupRetrieveRelation(generics.RetrieveAPIView):
"""Allows viewing of the related Group."""

permission_classes = (IsSuperAdminForUpdate,)
queryset = Group.objects.all()
serializer_class = GroupSerializer

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

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


class GroupListRelation(generics.ListAPIView):
"""Allows listing of the related Group."""

permission_classes = (IsSuperAdminForUpdate,)
queryset = Group.objects.all()
serializer_class = GroupSerializer

# Fields to allow sorting by
ordering_fields = ["name"]
# TODO: Add filtering based on name field.

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

return self.list(request, *args, **kwargs)
1 change: 1 addition & 0 deletions open_event_api/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
"video_channels.apps.VideoChannelsConfig",
"services.apps.ServicesConfig",
"event_sub_topics.apps.EventSubTopicsConfig",
"groups.apps.GroupsConfig",
]

MIDDLEWARE = [
Expand Down
1 change: 1 addition & 0 deletions open_event_api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
path("v2/", include("panel_permissions.urls")),
path("v2/", include("services.urls")),
path("v2/", include("event_sub_topics.urls")),
path("v2/", include("groups.urls")),
path("v2/custom-system-roles/", include("custom_sys_roles.urls")),
# api docs via spectacular
path("v2/schema/", SpectacularAPIView.as_view(), name="schema"),
Expand Down

0 comments on commit 92f38bc

Please sign in to comment.