Skip to content

Commit

Permalink
feat: add certificates link to api views
Browse files Browse the repository at this point in the history
  • Loading branch information
Adibov committed Jan 11, 2024
1 parent 36ed7dc commit d70115c
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 4.2.4 on 2024-01-11 13:56

from django.db import migrations, models
import utils.image_uploader


class Migration(migrations.Migration):

dependencies = [
('backend_api', '0060_presentationparticipation_certificate_and_more'),
]

operations = [
migrations.AlterField(
model_name='presentationparticipation',
name='certificate',
field=models.FileField(blank=True, default=None, null=True, upload_to=utils.image_uploader.update_certificate_filename),
),
migrations.AlterField(
model_name='workshopregistration',
name='certificate',
field=models.FileField(blank=True, default=None, null=True, upload_to=utils.image_uploader.update_certificate_filename),
),
]
4 changes: 2 additions & 2 deletions backend/backend_api/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ class StatusChoices(models.IntegerChoices):
status = models.IntegerField(choices=StatusChoices.choices, default=StatusChoices.AWAITING_PAYMENT)
password = models.CharField(max_length=SMALL_MAX_LENGTH, default=random_password)
certificate_uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
certificate = models.FileField(upload_to=update_certificate_filename, null=True, default=None)
certificate = models.FileField(upload_to=update_certificate_filename, null=True, default=None, blank=True)

class Meta:
unique_together = ('workshop', 'user',)
Expand All @@ -314,7 +314,7 @@ class StatusChoices(models.IntegerChoices):
status = models.IntegerField(choices=StatusChoices.choices, default=StatusChoices.AWAITING_PAYMENT)
password = models.CharField(max_length=SMALL_MAX_LENGTH, default=random_password)
certificate_uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
certificate = models.FileField(upload_to=update_certificate_filename, null=True, default=None)
certificate = models.FileField(upload_to=update_certificate_filename, null=True, default=None, blank=True)

class Meta:
unique_together = ('presentation', 'user',)
Expand Down
17 changes: 15 additions & 2 deletions backend/backend_api/serializers.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import urllib.parse

from django.core.exceptions import ObjectDoesNotExist
from rest_framework import serializers, status

from aaiss_backend.settings import BASE_URL
from backend_api import models
from backend_api.models import User, Account, WorkshopRegistration, PresentationParticipation
from utils.renderers import new_detailed_response
Expand Down Expand Up @@ -75,10 +78,11 @@ class Meta:

class WorkshopRegistrationSerializer(serializers.ModelSerializer):
workshop = serializers.PrimaryKeyRelatedField(queryset=WorkshopSerializer.Meta.model.objects.all())
certificate = serializers.CharField(required=False, allow_blank=True, allow_null=True)

class Meta:
model = WorkshopRegistration
fields = ('workshop',)
fields = ('workshop', 'certificate')

def create(self, validated_data):
user = self.context['request'].user.user
Expand All @@ -99,6 +103,10 @@ def to_representation(self, instance):
response = {}
user = self.context['request'].user.user
for key, val in super_response.items():
if key == 'certificate':
if val:
response[key] = urllib.parse.urljoin(BASE_URL, val)
continue
response["id"] = val
try:
workshop_status = WorkshopRegistration.objects.get(user=user, workshop_id=val).status
Expand All @@ -110,10 +118,11 @@ def to_representation(self, instance):

class PresentationParticipationSerializer(serializers.ModelSerializer):
presentation = serializers.PrimaryKeyRelatedField(queryset=PresentationSerializer.Meta.model.objects.all())
certificate = serializers.CharField(required=False, allow_blank=True, allow_null=True)

class Meta:
model = PresentationParticipation
fields = ('presentation',)
fields = ('presentation', 'certificate')

def create(self, validated_data):
user = self.context['request'].user.user
Expand All @@ -133,6 +142,10 @@ def to_representation(self, instance):
response = {}
user = self.context['request'].user.user
for key, val in super_response.items():
if key == 'certificate':
if val:
response[key] = urllib.parse.urljoin(BASE_URL, val)
continue
response["id"] = val
try:
presentation_status = PresentationParticipation.objects.get(user=user, presentation_id=val).status
Expand Down
4 changes: 3 additions & 1 deletion backend/utils/image_uploader.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import os

from aaiss_backend.settings import MEDIA_URL, BASE_URL


def update_certificate_filename(instance, filename):
path = "certificates/"
Expand All @@ -9,4 +11,4 @@ def update_certificate_filename(instance, filename):
path += "workshop/"
format = instance.certificate_uuid
_, file_extension = os.path.splitext(filename)
return os.path.join(path, str(format) + file_extension)
return os.path.join(MEDIA_URL, path, str(format) + file_extension)

0 comments on commit d70115c

Please sign in to comment.