added active to Project
This commit is contained in:
@@ -8,7 +8,12 @@ class UserSerializer(ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ['id', 'username', 'email', 'age', 'can_be_contacted', 'can_data_be_shared']
|
||||
fields = ['id',
|
||||
'username',
|
||||
'email',
|
||||
'age',
|
||||
'can_be_contacted',
|
||||
'can_data_be_shared']
|
||||
|
||||
|
||||
class UserUpdateSerializer(ModelSerializer):
|
||||
@@ -18,15 +23,19 @@ class UserUpdateSerializer(ModelSerializer):
|
||||
fields = ['email', 'can_be_contacted', 'can_data_be_shared']
|
||||
|
||||
|
||||
|
||||
class UserRegisterSerializer(ModelSerializer):
|
||||
password2 = serializers.CharField(style={'input-type': 'password'}, write_only=True)
|
||||
password2 = serializers.CharField(write_only=True)
|
||||
password = serializers.CharField(write_only=True)
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ['username', 'email', 'password', 'password2', 'age', 'can_be_contacted', 'can_data_be_shared']
|
||||
extra_kwargs = {'password': {'write_only': True}}
|
||||
|
||||
fields = ['username',
|
||||
'email',
|
||||
'password',
|
||||
'password2',
|
||||
'age',
|
||||
'can_be_contacted',
|
||||
'can_data_be_shared']
|
||||
|
||||
def validate(self, data):
|
||||
if data['password'] != data['password2']:
|
||||
|
||||
@@ -30,6 +30,10 @@ class UserCreateView(APIView):
|
||||
#return Response("prout", status=status.HTTP_226_IM_USED)
|
||||
|
||||
def post(self, request):
|
||||
"""
|
||||
User subscription
|
||||
Args:
|
||||
"""
|
||||
serializer = UserRegisterSerializer(data=request.data)
|
||||
if serializer.is_valid(raise_exception=True):
|
||||
serializer.save()
|
||||
@@ -37,8 +41,10 @@ class UserCreateView(APIView):
|
||||
"message": "User created successfully",
|
||||
"data": serializer.data
|
||||
}
|
||||
return Response(data=response, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response(data=response,
|
||||
status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors,
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
class PasswordUpdateView(APIView):
|
||||
@@ -49,12 +55,15 @@ class PasswordUpdateView(APIView):
|
||||
serializer = PasswordUpdateSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
if not user.check_password(serializer.data.get("old_password")):
|
||||
return Response({"old_password":"Wrong password"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response({"old_password":"Wrong password"},
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
user.set_password(serializer.data.get('new_password'))
|
||||
user.save()
|
||||
update_session_auth_hash(request, user)
|
||||
return Response(serializer.errors, status=status.HTTP_204_NO_CONTENT)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response(serializer.errors,
|
||||
status=status.HTTP_204_NO_CONTENT)
|
||||
return Response(serializer.errors,
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
class UserView(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
@@ -64,24 +73,29 @@ class UserView(APIView):
|
||||
|
||||
def put(self, request):
|
||||
user = request.user
|
||||
print("coucou", request.data['user'])
|
||||
serializer = UserUpdateSerializer(user, data=request.data)
|
||||
print(serializer.initial_data)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response("Data updated", status=status.HTTP_201_CREATED)
|
||||
return Response("Error", status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response("Data updated",
|
||||
status=status.HTTP_201_CREATED)
|
||||
return Response("Error",
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
def delete(self, request):
|
||||
user = request.user
|
||||
username = request.user.username
|
||||
user.delete()
|
||||
return Response(f"User {username} deleted.", status=status.HTTP_204_NO_CONTENT)
|
||||
if 'user' in request.data:
|
||||
if username == request.data['user']:
|
||||
user.delete()
|
||||
return Response(f"User {username} deleted.",
|
||||
status=status.HTTP_204_NO_CONTENT)
|
||||
return Response("Token's owner and user provided don't match",
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response("Username to delete must be given in data",
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
class UserRegistrationViewSet(ModelViewSet):
|
||||
#serializer_class = UserRegistrationSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return User.objects.get(self.request.user)
|
||||
|
||||
|
||||
|
||||
@@ -133,6 +133,6 @@ REST_FRAMEWORK = {
|
||||
}
|
||||
|
||||
SIMPLE_JWT = {
|
||||
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=30),
|
||||
'REFRESH_TOKEN_LIFETIME': timedelta(days=5),
|
||||
'ACCESS_TOKEN_LIFETIME': timedelta(days=10),
|
||||
'REFRESH_TOKEN_LIFETIME': timedelta(days=30),
|
||||
}
|
||||
|
||||
@@ -16,15 +16,15 @@ Including another URLconf
|
||||
"""
|
||||
from django.contrib import admin
|
||||
from django.urls import path, include
|
||||
from authentication.views import (UserRegistrationViewSet,
|
||||
UserView, UserCreateView,
|
||||
PasswordUpdateView)
|
||||
from authentication.views import (UserView, UserCreateView, PasswordUpdateView)
|
||||
from support.views import ProjectViewSet
|
||||
from rest_framework import routers
|
||||
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
|
||||
|
||||
|
||||
router = routers.SimpleRouter()
|
||||
#router.register('user', UserViewSet, basename='user')
|
||||
router.register('project', ProjectViewSet, basename='project')
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
# Generated by Django 5.2.1 on 2025-05-25 19:20
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('support', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='project',
|
||||
name='active',
|
||||
field=models.BooleanField(default=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='issue',
|
||||
name='project',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='support.project'),
|
||||
),
|
||||
]
|
||||
@@ -14,16 +14,23 @@ class Project(models.Model):
|
||||
title = models.CharField(max_length=255)
|
||||
date_created = models.DateTimeField(auto_now_add=True)
|
||||
type = models.CharField(choices=Type.choices, max_length=10)
|
||||
active = models.BooleanField(default=True)
|
||||
description = models.CharField(max_length=4000)
|
||||
author = models.ForeignKey('Contributor', on_delete=models.DO_NOTHING, related_name='author')
|
||||
author = models.ForeignKey('Contributor',
|
||||
on_delete=models.DO_NOTHING,
|
||||
related_name='author')
|
||||
|
||||
contributors = models.ManyToManyField(
|
||||
settings.AUTH_USER_MODEL, through='Contributor', related_name='contribution')
|
||||
contributors = models.ManyToManyField(settings.AUTH_USER_MODEL,
|
||||
through='Contributor',
|
||||
related_name='contribution')
|
||||
|
||||
|
||||
class Contributor(models.Model):
|
||||
contributor = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING)
|
||||
project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='project')
|
||||
contributor = models.ForeignKey(settings.AUTH_USER_MODEL,
|
||||
on_delete=models.DO_NOTHING)
|
||||
project = models.ForeignKey('Project',
|
||||
on_delete=models.CASCADE,
|
||||
related_name='project')
|
||||
data = models.CharField(max_length=255, blank=True)
|
||||
|
||||
|
||||
@@ -50,7 +57,10 @@ class Issue(models.Model):
|
||||
title = models.CharField(max_length=255, verbose_name='title')
|
||||
date_created = models.DateTimeField(auto_now_add=True)
|
||||
description = models.TextField()
|
||||
project = models.ForeignKey(Project, null=True, on_delete=models.CASCADE, blank=True)
|
||||
project = models.ForeignKey(Project,
|
||||
null=True,
|
||||
on_delete=models.CASCADE,
|
||||
blank=True)
|
||||
status = models.CharField(Status.choices, max_length=15)
|
||||
priority = models.CharField(Priority.choices, max_length=15)
|
||||
tag = models.CharField(Tag.choices, max_length=15)
|
||||
|
||||
11
softdesk/support/serializers.py
Normal file
11
softdesk/support/serializers.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from rest_framework.serializers import ModelSerializer
|
||||
from support.models import Project, Contributor, Issue, Comment
|
||||
|
||||
|
||||
class ProjectSerializer(ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Project
|
||||
fields = ['title', 'date_created', 'type', 'description', 'author',
|
||||
'contributors']
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
from django.shortcuts import render
|
||||
from rest_framework.viewsets import ModelViewSet
|
||||
from support.models import Project, Contributor, Issue, Comment
|
||||
from support.serializers import ProjectSerializer
|
||||
|
||||
# Create your views here.
|
||||
|
||||
class ProjectViewSet(ModelViewSet):
|
||||
serializer_class = ProjectSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return Project.objects.all()
|
||||
Reference in New Issue
Block a user