Skip to content

Commit

Permalink
Merge pull request #344 from bounswe/backend/feature/general_fixes-#338
Browse files Browse the repository at this point in the history
Backend/feature/general fixes #338
  • Loading branch information
oguzhandemirelx authored Nov 28, 2022
2 parents 33c4ae7 + afc59db commit 9b0a94f
Show file tree
Hide file tree
Showing 18 changed files with 577 additions and 125 deletions.
22 changes: 22 additions & 0 deletions app/backend/articles/migrations/0002_articleimages.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Generated by Django 4.1.2 on 2022-11-27 21:11

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


class Migration(migrations.Migration):

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

operations = [
migrations.CreateModel(
name='ArticleImages',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('image_url', models.CharField(max_length=100)),
('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='articles.article')),
],
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.1.2 on 2022-11-27 21:49

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('articles', '0002_articleimages'),
]

operations = [
migrations.RenameField(
model_name='articleimages',
old_name='post',
new_name='article',
),
]
4 changes: 4 additions & 0 deletions app/backend/articles/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,7 @@ class Article(models.Model):
date = models.DateTimeField()
upvote = models.IntegerField(null=False, default=0)
downvote = models.IntegerField(null=False, default=0)

class ArticleImages(models.Model):
image_url = models.CharField(max_length=100)
article = models.ForeignKey(Article,on_delete=models.CASCADE)
61 changes: 46 additions & 15 deletions app/backend/articles/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,37 @@
from rest_framework.response import Response
from rest_framework import status
from articles.serializers import ArticleSerializer, CreateArticleSerializer
from articles.models import Article
from articles.models import Article, ArticleImages
from rest_framework.pagination import PageNumberPagination
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated

from common.views import upload_to_s3


# Create your views here.

@api_view(['GET',])
@permission_classes([IsAuthenticated,])
def get_all_articles(request):
paginator = PageNumberPagination()
paginator.page_size = 10
article_objects = Article.objects.all()
result_page = paginator.paginate_queryset(article_objects, request)
serializer = ArticleSerializer(result_page, many=True)
return paginator.get_paginated_response(serializer.data)
paginator.page_size = request.GET.get('page_size', 10)
paginator.page = request.GET.get('page', 1)
article_objects = Article.objects.all().order_by('-date')
articles = []
user = CustomUser.objects.get(id=request.user.id)
for article in article_objects:
serializer_article_data = ArticleSerializer(article).data
if article.id in user.upvoted_articles:
serializer_article_data['vote'] = 'upvote'
elif article.id in user.downvoted_articles:
serializer_article_data['vote'] = 'downvote'
else:
serializer_article_data['vote'] = None
articles.append(serializer_article_data)
result_page = paginator.paginate_queryset(articles, request)
return paginator.get_paginated_response(result_page)


@api_view(['GET', 'POST', 'DELETE'])
@permission_classes([IsAuthenticated,])
Expand All @@ -28,8 +44,13 @@ def article(request,id):
except:
return Response({'error': 'Article not found'}, status=400)
article_serializer = ArticleSerializer(article)

return Response(article_serializer.data, status=200)
article_images = ArticleImages.objects.filter(article=article)
image_urls = [image.image_url for image in article_images]
response ={
'article': article_serializer.data,
'image_urls': image_urls
}
return Response(response, status=200)

if(request.method == 'DELETE'):
try:
Expand Down Expand Up @@ -69,18 +90,28 @@ def create_article(request):
body = request.data['body']
date = datetime.now()

post = Article(title=title, author=author, body=body, date=date)
post.save()
article = Article(title=title, author=author, body=body, date=date)
article.save()

data = {
'title':title,
'id': article.id,
'title': title,
'author': author,
'body':body,
'date':date
'body': body,
'date': date
}

image_urls = []
if len(request.FILES) > 0:
count = 1
for filename, file in request.FILES.items():
image = file.read()
photo_url = upload_to_s3(image, f'article/{article.id}/{count}.jpg')
count = count + 1
commentImage = ArticleImages(image_url=photo_url, article=article)
commentImage.save()
image_urls.append(photo_url)
serialized_data = ArticleSerializer(data)
return Response({'article':serialized_data.data})
return Response({'article': serialized_data.data, 'image_urls': image_urls})
else:
data = validate_article.errors
return Response(status=400,data={'error': f'Fields are missing'})
Expand Down
27 changes: 23 additions & 4 deletions app/backend/authentication/views.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import os

from backend.models import CustomUser, Doctor, Member, Category, MemberInfo
from .serializers import UserSerializer, RegistrationSerializer, DoctorSerializer, MemberSerializer
from django.contrib.auth import get_user_model
from django.contrib.auth import login, logout
from django.contrib.auth.hashers import check_password
from rest_framework import viewsets

from common.views import upload_to_s3, delete_from_s3
# Create your views here.
from rest_framework.views import APIView
from rest_framework.exceptions import ValidationError, ParseError
Expand Down Expand Up @@ -33,6 +35,7 @@ class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer


@api_view(["POST"])
@permission_classes([AllowAny])
def register_user(request):
Expand All @@ -50,17 +53,28 @@ def register_user(request):
account.is_active = True
account.save()
token = Token.objects.get_or_create(user=account)[0].key
if(request.data['type']== 1):
if(request.data['type']== '1'):

doctor_data = {}
full_name = f"{request.data['firstname']} {request.data['lastname']}"
doctor_data['full_name'] = full_name
doctor_data['specialization']= Category.objects.get(name=request.data['branch']).id
doctor_data['user'] = account.id
doctor_serializer = DoctorSerializer(data=doctor_data)
if doctor_serializer.is_valid():
doctor_serializer.save()
doctor = doctor_serializer.save()
print(request.FILES)
if len(request.FILES) > 0:
for filename, file in request.FILES.items():
print(filename)
name, extension = os.path.splitext(file.name)
document = file.read()
document_url = upload_to_s3(document, f'document/{account.id}/{filename}{extension}')
doctor.document = document_url
doctor.save()
else:
data = doctor_serializer.errors
account.delete()
return Response(status=400,data=data)
elif(request.data['type'] == 2):
member_data = {}
Expand All @@ -69,8 +83,13 @@ def register_user(request):
member_data['member_username']= request.data['username']
member_serializer = MemberSerializer(data=member_data)
if member_serializer.is_valid():
member_serializer.save()
try:
member_serializer.save()
except:
account.delete()
return Response(status=400, data={'username':['This field must be unique']})
else:
account.delete()
data = member_serializer.errors
return Response(status=400,data=data)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Generated by Django 4.1.2 on 2022-11-27 18:09

import django.contrib.postgres.fields
from django.db import migrations, models


class Migration(migrations.Migration):

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

operations = [
migrations.AddField(
model_name='customuser',
name='downvoted_articles',
field=django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(null=True), default=list, size=None),
),
migrations.AddField(
model_name='customuser',
name='downvoted_comments',
field=django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(null=True), default=list, size=None),
),
migrations.AddField(
model_name='customuser',
name='downvoted_posts',
field=django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(null=True), default=list, size=None),
),
migrations.AddField(
model_name='customuser',
name='upvoted_articles',
field=django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(null=True), default=list, size=None),
),
migrations.AddField(
model_name='customuser',
name='upvoted_comments',
field=django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(null=True), default=list, size=None),
),
migrations.AddField(
model_name='customuser',
name='upvoted_posts',
field=django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(null=True), default=list, size=None),
),
]
18 changes: 18 additions & 0 deletions app/backend/backend/migrations/0003_doctor_document.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.1.2 on 2022-11-27 23:39

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('backend', '0002_customuser_downvoted_articles_and_more'),
]

operations = [
migrations.AddField(
model_name='doctor',
name='document',
field=models.TextField(default=None, null=True),
),
]
2 changes: 1 addition & 1 deletion app/backend/backend/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ class Doctor(models.Model):
specialization = models.ForeignKey(Category, null=True, on_delete=models.SET_NULL)
hospital_name = models.CharField(max_length=100, null=True)
verified = models.BooleanField(max_length=100, null=False, default=False)

document = models.TextField(null=True, default=None)
profile_picture = models.TextField(null=True)

def __str__(self):
Expand Down
3 changes: 2 additions & 1 deletion app/backend/backend/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@
'DEFAULT_PERMISSION_CLASSES':(
'rest_framework.permissions.IsAuthenticated',
),

'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,
}

MIDDLEWARE = [
Expand Down
23 changes: 23 additions & 0 deletions app/backend/forum/migrations/0002_post_latitude_post_longitude.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 4.1.2 on 2022-11-27 18:09

from django.db import migrations, models


class Migration(migrations.Migration):

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

operations = [
migrations.AddField(
model_name='post',
name='latitude',
field=models.FloatField(default=0),
),
migrations.AddField(
model_name='post',
name='longitude',
field=models.FloatField(default=0),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 4.1.2 on 2022-11-27 21:11

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('forum', '0002_post_latitude_post_longitude'),
]

operations = [
migrations.AddField(
model_name='comment',
name='latitude',
field=models.FloatField(default=0),
),
migrations.AddField(
model_name='comment',
name='longitude',
field=models.FloatField(default=0),
),
]
18 changes: 18 additions & 0 deletions app/backend/forum/migrations/0004_post_commented_by_doctor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.1.2 on 2022-11-27 23:23

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('forum', '0003_comment_latitude_comment_longitude'),
]

operations = [
migrations.AddField(
model_name='post',
name='commented_by_doctor',
field=models.BooleanField(default=False),
),
]
5 changes: 5 additions & 0 deletions app/backend/forum/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ class Post(models.Model):
date = models.DateTimeField()
upvote = models.IntegerField(null=False, default=0)
downvote = models.IntegerField(null=False, default=0)
longitude = models.FloatField(default=0)
latitude = models.FloatField(default=0)
commented_by_doctor = models.BooleanField(default=False)

class PostImages(models.Model):
image_url = models.CharField(max_length=100)
Expand All @@ -22,6 +25,8 @@ class Comment(models.Model):
upvote = models.IntegerField(null=False, default=0)
downvote = models.IntegerField(null=False, default=0)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
longitude = models.FloatField(default=0)
latitude = models.FloatField(default=0)

class CommentImages(models.Model):
image_url = models.CharField(max_length=100)
Expand Down
Loading

0 comments on commit 9b0a94f

Please sign in to comment.