diff --git a/field/urls.py b/field/urls.py index d7187eb..f27a27f 100644 --- a/field/urls.py +++ b/field/urls.py @@ -1,6 +1,39 @@ from django.urls import path -from .views import JobListView +from .views import ( + JobListCreate, + JobDetail, + NoteListCreate, + NoteDetails, + ImageListCreate, + ImageDetail, + CostListCreate, + CostDetail, + FieldListCreate, + FieldDetail, +) -urlpatterns = [ - path("jobs/v1/", JobListView.as_view()), -] + +def register_crud_urls(prefix, list_view, detail_view): + return [ + path(f"{prefix}/", list_view.as_view(), name=f"{prefix}-list-create"), + path(f"{prefix}//", detail_view.as_view(), name=f"{prefix}-detail"), + ] + + +urlpatterns = [] + +urlpatterns += register_crud_urls("jobs", JobListCreate, JobDetail) +urlpatterns += register_crud_urls("notes", NoteListCreate, NoteDetails) +urlpatterns += register_crud_urls("images", ImageListCreate, ImageDetail) +urlpatterns += register_crud_urls("costs", CostListCreate, CostDetail) +urlpatterns += register_crud_urls("fields", FieldListCreate, FieldDetail) + + +# urlpatterns = [ +# path("jobs/", JobListCreate.as_view(), name="job-createlist"), +# path("jobs//", JobDetail.as_view(), name="job-detail"), +# path("notes/", NoteListCreate.as_view(), name="note-createlist"), +# path("notes//", NoteDetails.as_view(), name="note-detail"), +# path("images/", ImageListCreate.as_view(), name="image-createlist"), +# path("images//", ImageDetail.as_view(), name="image-detail"), +# ] diff --git a/field/views.py b/field/views.py index 141427b..5a8e947 100644 --- a/field/views.py +++ b/field/views.py @@ -1,19 +1,118 @@ -from django.shortcuts import render +from django.shortcuts import render, get_object_or_404 +from rest_framework import status, generics from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.permissions import IsAuthenticated -from .models import Job -from .serializers import JobSerializer +from .models import Job, Note, Image, Cost, Field +from .serializers import ( + JobSerializer, + NoteSerializer, + ImageSerializer, + CostSerializer, + FieldSerializer, +) from rest_framework.viewsets import ModelViewSet # Create your views here. +# TODO create get user data api view -class JobListView(APIView): + +class CostListCreate(generics.ListCreateAPIView): + serializer_class = CostSerializer permission_classes = [IsAuthenticated] - def get(self, request): - current_user = request.user - jobs = Job.objects.filter(user=current_user) - serilizer = JobSerializer(jobs, many=True) - return Response(serilizer.data) + def get_queryset(self): + return Cost.objects.filter(user=self.request.user) + + def perform_create(self, serializer): + serializer.save(user=self.request.user) # assign user automatically + + +class CostDetail(generics.RetrieveUpdateDestroyAPIView): + serializer_class = CostSerializer + permission_classes = [IsAuthenticated] + + def get_queryset(self): + # Ensure user can only access their own notes + return Cost.objects.filter(user=self.request.user) + + +class FieldListCreate(generics.ListCreateAPIView): + serializer_class = FieldSerializer + permission_classes = [IsAuthenticated] + + def get_queryset(self): + return Field.objects.filter(user=self.request.user) + + def perform_create(self, serializer): + serializer.save(user=self.request.user) # assign user automatically + + +class FieldDetail(generics.RetrieveUpdateDestroyAPIView): + serializer_class = FieldSerializer + permission_classes = [IsAuthenticated] + + def get_queryset(self): + # Ensure user can only access their own notes + return Field.objects.filter(user=self.request.user) + + +class ImageListCreate(generics.ListCreateAPIView): + serializer_class = ImageSerializer + permission_classes = [IsAuthenticated] + + def get_queryset(self): + return Image.objects.filter(user=self.request.user) + + def perform_create(self, serializer): + serializer.save(user=self.request.user) # assign user automatically + + +class ImageDetail(generics.RetrieveUpdateDestroyAPIView): + serializer_class = ImageSerializer + permission_classes = [IsAuthenticated] + + def get_queryset(self): + # Ensure user can only access their own notes + return Image.objects.filter(user=self.request.user) + + +class NoteListCreate(generics.ListCreateAPIView): + serializer_class = NoteSerializer + permission_classes = [IsAuthenticated] + + def get_queryset(self): + return Note.objects.filter(user=self.request.user) + + def perform_create(self, serializer): + serializer.save(user=self.request.user) # assign user automatically + + +class NoteDetails(generics.RetrieveUpdateDestroyAPIView): + serializer_class = NoteSerializer + permission_classes = [IsAuthenticated] + + def get_queryset(self): + # Ensure user can only access their own notes + return Note.objects.filter(user=self.request.user) + + +class JobListCreate(generics.ListCreateAPIView): + serializer_class = JobSerializer + permission_classes = [IsAuthenticated] + + def get_queryset(self): + return Job.objects.filter(user=self.request.user) + + def perform_create(self, serializer): + serializer.save(user=self.request.user) # assign user automatically + + +class JobDetail(generics.RetrieveUpdateDestroyAPIView): + serializer_class = JobSerializer + permission_classes = [IsAuthenticated] + + def get_queryset(self): + # Ensure user can only access their own notes + return Job.objects.filter(user=self.request.user)