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

[WIP] Contact Us API #74

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
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
10 changes: 9 additions & 1 deletion civictechindexadmin/data/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from django.utils.safestring import mark_safe
from treebeard.admin import TreeAdmin
from treebeard.forms import movenodeform_factory
from .models import Alias, FAQ, Link, NotificationSubscription, Organization
from .models import Alias, FAQ, Link, NotificationSubscription, Organization, Contact
from .status_code_filter import StatusCodeFilter


Expand Down Expand Up @@ -54,8 +54,16 @@ class NotificationSubscriptionAdmin(admin.ModelAdmin):
search_fields = ('email_address', )


class ContactAdmin(admin.ModelAdmin):
model = Contact
list_display = ('id', 'email', 'text', 'name', 'organization', 'project_url')
list_filter = ('email', 'organization')
search_fields = ('text', 'name')


admin.site.register(Organization, OrganizationAdmin)
admin.site.register(Link, LinkAdmin)
admin.site.register(FAQ, FAQAdmin)
admin.site.register(Alias, AliasAdmin)
admin.site.register(NotificationSubscription, NotificationSubscriptionAdmin)
admin.site.register(Contact, ContactAdmin)
8 changes: 7 additions & 1 deletion civictechindexadmin/data/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from rest_framework.reverse import reverse_lazy
from rest_framework.validators import UniqueValidator

from ..models import Organization, Link, FAQ, NotificationSubscription, Alias
from ..models import Organization, Link, FAQ, NotificationSubscription, Alias, Contact


class LinkSerializer(serializers.ModelSerializer):
Expand Down Expand Up @@ -171,6 +171,12 @@ class Meta:
depth = 1


class ContactSerializer(serializers.ModelSerializer):
class Meta:
model = Contact
fields = ['id', 'email', 'text', 'logo_url', 'name', 'organization', 'project_url', ]
depth = 1

class NotificationSubscriptionSerializer(serializers.Serializer):
email_address = serializers.EmailField()
notification_type = serializers.CharField()
Expand Down
10 changes: 8 additions & 2 deletions civictechindexadmin/data/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@

from .serializers import (
AddOrganizationSerializer, AliasSerializer, OrganizationSerializer, OrganizationFullSerializer,
FAQSerializer, LinkSerializer, NotificationSubscriptionSerializer,
FAQSerializer, LinkSerializer, NotificationSubscriptionSerializer, ContactSerializer
)
from ..models import Organization, Link, FAQ, Alias
from ..models import Organization, Link, FAQ, Alias, Contact


class OrganizationViewSet(GenericViewSet):
Expand Down Expand Up @@ -124,6 +124,12 @@ class AliasViewSet(ReadOnlyModelViewSet):
lookup_field = "alias"


class ContactViewSet(ReadOnlyModelViewSet):
serializer_class = ContactSerializer
queryset = Contact.objects.all()
lookup_field = "contact"


@swagger_auto_schema(method='post', request_body=NotificationSubscriptionSerializer)
@api_view(['POST'])
def subscribe(request):
Expand Down
15 changes: 15 additions & 0 deletions civictechindexadmin/data/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,21 @@ def __str__(self):
return f"Alias {self.id}: {self.tag} {self.alias}"


class Contact(models.Model):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You added a model but where is the migration? You can create it using ./manage.py makemigrations. The name generated automatically may or may not say 'added_contact_model'. If you end up with on with a name like "0004_auto_" please rename it to be more descriptive.

I am puzzled by the failing tests in this PR. Hopefully adding a migration file will fix - or at least give us a more understandable error.

email = models.CharField(max_length=128, unique=True)
text = models.TextField(max_length=4096, null=True, blank=True)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For TextField and CharFields, best practice is to ONLY use "blank=True" - that way the row will always have an empty string for missing data in that field. If you allow null, then you would have to check for null and '' to decide if you don't have a value.

logo_url = models.URLField(max_length=2048, blank=True)
name = models.CharField(max_length=128, unique=True)
organization = models.CharField(max_length=128, unique=True)
project_url = models.URLField(max_length=2048, blank=True)

class Meta:
verbose_name = "Contact"
verbose_name_plural = "Contacts"

def __str__(self):
return f"Contact {self.id}: {self.email} {self.text} {self.logo_url} {self.name} {self.organization} {self.project_url}"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ummm that's the entire model. Not really best practice. Why are you returning EVERYTHING in str?


# ###### FAQS ###########
class FAQ(models.Model):
FAQ_STATUS_CHOICES = [
Expand Down
3 changes: 2 additions & 1 deletion config/api_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from rest_framework.routers import DefaultRouter, SimpleRouter

from civictechindexadmin.data.api.views import (
OrganizationViewSet, LinkViewSet, FAQViewSet, AliasViewSet,
OrganizationViewSet, LinkViewSet, FAQViewSet, AliasViewSet, ContactViewSet,
subscribe, org_by_github_id
)

Expand All @@ -18,6 +18,7 @@
router.register("links", LinkViewSet)
router.register("faqs", FAQViewSet)
router.register("aliases", AliasViewSet)
router.register("contacts", ContactViewSet)

urlpatterns = router.urls

Expand Down