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

#206 Create Table: stack_element_type (merge conflicts) #220

Merged
merged 4 commits into from
Nov 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions app/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from .models import Project
from .models import Skill
from .models import SponsorPartner
from .models import StackElementType
from .models import Technology
from .models import User

Expand Down Expand Up @@ -203,3 +204,11 @@ class TechnologyAdmin(admin.ModelAdmin):
@admin.register(PermissionType)
class PermissionTypeAdmin(admin.ModelAdmin):
list_display = ("name", "description")


@admin.register(StackElementType)
class StackElementType(admin.ModelAdmin):
list_display = (
"name",
"description",
)
18 changes: 18 additions & 0 deletions app/core/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from core.models import Project
from core.models import Skill
from core.models import SponsorPartner
from core.models import StackElementType
from core.models import Technology
from core.models import User

Expand Down Expand Up @@ -256,3 +257,20 @@ class Meta:
"created_at",
"updated_at",
)


class StackElementTypeSerializer(serializers.ModelSerializer):
"""Used to retrieve stack element types"""

class Meta:
model = StackElementType
fields = (
"uuid",
"name",
"description",
)
read_only_fields = (
"uuid",
"created_at",
"updated_at",
)
4 changes: 4 additions & 0 deletions app/core/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from .views import ProjectViewSet
from .views import SkillViewSet
from .views import SponsorPartnerViewSet
from .views import StackElementTypeViewSet
from .views import TechnologyViewSet
from .views import UserProfileAPIView
from .views import UserViewSet
Expand All @@ -28,6 +29,9 @@
router.register(r"skills", SkillViewSet, basename="skill")
router.register(r"technologies", TechnologyViewSet, basename="technology")
router.register(r"permission-types", PermissionTypeViewSet, basename="permission-type")
router.register(
r"stack-element-types", StackElementTypeViewSet, basename="stack-element-type"
)

urlpatterns = [
path("me/", UserProfileAPIView.as_view(), name="my_profile"),
Expand Down
16 changes: 16 additions & 0 deletions app/core/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from ..models import Project
from ..models import Skill
from ..models import SponsorPartner
from ..models import StackElementType
from ..models import Technology
from .serializers import EventSerializer
from .serializers import FaqSerializer
Expand All @@ -32,6 +33,7 @@
from .serializers import ProjectSerializer
from .serializers import SkillSerializer
from .serializers import SponsorPartnerSerializer
from .serializers import StackElementTypeSerializer
from .serializers import TechnologySerializer
from .serializers import UserSerializer

Expand Down Expand Up @@ -282,3 +284,17 @@ class PermissionTypeViewSet(viewsets.ModelViewSet):
permission_classes = [IsAuthenticated]
queryset = PermissionType.objects.all()
serializer_class = PermissionTypeSerializer


@extend_schema_view(
list=extend_schema(description="Return a list of all the stack element types"),
create=extend_schema(description="Create a new stack element type"),
retrieve=extend_schema(description="Return the details stack element type"),
destroy=extend_schema(description="Delete a stack element type"),
update=extend_schema(description="Update a stack element type"),
partial_update=extend_schema(description="Patch a stack element type"),
)
class StackElementTypeViewSet(viewsets.ModelViewSet):
permission_classes = [IsAuthenticated]
queryset = StackElementType.objects.all()
serializer_class = StackElementTypeSerializer
27 changes: 27 additions & 0 deletions app/core/migrations/0019_stackelementtype.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Generated by Django 4.0.10 on 2023-11-16 15:05

from django.db import migrations, models
import uuid


class Migration(migrations.Migration):

dependencies = [
('core', '0018_rename_recurringevent_event'),
]

operations = [
migrations.CreateModel(
name='StackElementType',
fields=[
('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created at')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated at')),
('name', models.CharField(max_length=255)),
('description', models.TextField(blank=True)),
],
options={
'abstract': False,
},
),
]
2 changes: 1 addition & 1 deletion app/core/migrations/max_migration.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0018_rename_recurringevent_event
0019_stackelementtype
14 changes: 14 additions & 0 deletions app/core/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -299,3 +299,17 @@ def __str__(self):
return f"{self.name}: {self.description}"
else:
return f"{self.name}"


class StackElementType(AbstractBaseModel):
"""
Stack element type used to update a shared data store across projects
"""

name = models.CharField(max_length=255)
description = models.TextField(blank=True)

# PK of this model is the ForeignKey for stack_element

def __str__(self):
return f"{self.name}"
6 changes: 6 additions & 0 deletions app/core/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from ..models import Project
from ..models import Skill
from ..models import SponsorPartner
from ..models import StackElementType
from ..models import Technology


Expand Down Expand Up @@ -127,3 +128,8 @@ def permission_type2():
return PermissionType.objects.create(
name="Test Permission Type", description="A permission type description"
)


@pytest.fixture
def stack_element_type():
return StackElementType.objects.create(name="Test Stack Element Type")
11 changes: 11 additions & 0 deletions app/core/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
SKILL_URL = reverse("skill-list")
TECHNOLOGY_URL = reverse("technology-list")
PERMISSION_TYPE = reverse("permission-type-list")
STACK_ELEMENT_TYPE_URL = reverse("stack-element-type-list")

CREATE_USER_PAYLOAD = {
"username": "TestUserAPI",
Expand Down Expand Up @@ -290,3 +291,13 @@ def test_create_permission_type(auth_client):
assert res.status_code == status.HTTP_201_CREATED
assert res.data["name"] == payload["name"]
assert res.data["description"] == payload["description"]


def test_create_stack_element_type(auth_client):
payload = {
"name": "Test Stack Element Type",
"description": "Stack Element Type description",
}
res = auth_client.post(STACK_ELEMENT_TYPE_URL, payload)
assert res.status_code == status.HTTP_201_CREATED
assert res.data["name"] == payload["name"]
4 changes: 4 additions & 0 deletions app/core/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,7 @@ def test_permission_type2(permission_type2):
assert (
str(permission_type2) == "Test Permission Type: A permission type description"
)


def test_stack_element_type(stack_element_type):
assert str(stack_element_type) == "Test Stack Element Type"