Skip to content

Commit

Permalink
[GREEN] feat: Venue feature
Browse files Browse the repository at this point in the history
  • Loading branch information
nataniadeandra committed Feb 25, 2024
1 parent 16c35b4 commit 5b78c16
Show file tree
Hide file tree
Showing 7 changed files with 135 additions and 0 deletions.
36 changes: 36 additions & 0 deletions venue/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Generated by Django 4.2.9 on 2024-02-25 02:58

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


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
migrations.CreateModel(
name='Venue',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255)),
('address', models.CharField(max_length=255)),
('price', models.IntegerField()),
('status', models.CharField(max_length=255)),
('contact_name', models.CharField(max_length=255)),
('contact_phone_number', models.CharField(max_length=15)),
('event', models.IntegerField()),
],
),
migrations.CreateModel(
name='Photo',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('image', models.ImageField(upload_to='venue_photos/')),
('venue', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='photos', to='venue.venue')),
],
),
]
18 changes: 18 additions & 0 deletions venue/migrations/0002_alter_photo_image.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.2.9 on 2024-02-25 03:08

from django.db import migrations, models


class Migration(migrations.Migration):

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

operations = [
migrations.AlterField(
model_name='photo',
name='image',
field=models.URLField(),
),
]
Empty file added venue/migrations/__init__.py
Empty file.
21 changes: 21 additions & 0 deletions venue/models.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,24 @@
from django.db import models

# Create your models here.

from django.db import models

class Venue(models.Model):
name = models.CharField(max_length=255)
address = models.CharField(max_length=255)
price = models.IntegerField()
status = models.CharField(max_length=255)
contact_name = models.CharField(max_length=255)
contact_phone_number = models.CharField(max_length=15)
event = models.IntegerField()

def __str__(self):
return self.name

class Photo(models.Model):
venue = models.ForeignKey(Venue, related_name='photos', on_delete=models.CASCADE)
image = models.URLField()

def __str__(self):
return self.image
14 changes: 14 additions & 0 deletions venue/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from rest_framework import serializers
from .models import Venue, Photo

class PhotoSerializer(serializers.ModelSerializer):
class Meta:
model = Photo
fields = '__all__'

class VenueSerializer(serializers.ModelSerializer):
photos = PhotoSerializer(many=True, read_only=True)

class Meta:
model = Venue
fields = '__all__'
16 changes: 16 additions & 0 deletions venue/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from django.urls import path
from .views import (
VenueEventListView,
VenueListCreateView,
VenueRetrieveUpdateDestroyView,
PhotoCreateView,
PhotoRetrieveUpdateDestroyView,
)

urlpatterns = [
path('venues/', VenueListCreateView.as_view(), name='venue-list-create'),
path('venues/<int:pk>/', VenueRetrieveUpdateDestroyView.as_view(), name='venue-retrieve-update-destroy'),
path('venues/event/<int:event_id>/', VenueEventListView.as_view(), name='venue-event-list'),
path('photos/', PhotoCreateView.as_view(), name='photo-create'),
path('photos/<int:pk>/', PhotoRetrieveUpdateDestroyView.as_view(), name='photo-retrieve-update-destroy'),
]
30 changes: 30 additions & 0 deletions venue/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,33 @@
from django.shortcuts import render

# Create your views here.

from rest_framework import generics
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Venue, Photo
from .serializers import VenueSerializer, PhotoSerializer


class VenueListCreateView(generics.ListCreateAPIView):
queryset = Venue.objects.all()
serializer_class = VenueSerializer

class VenueRetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
queryset = Venue.objects.all()
serializer_class = VenueSerializer

class VenueEventListView(APIView):
def get(self, request, *args, **kwargs):
event_id = kwargs.get('event_id')
venues = Venue.objects.filter(event=event_id)
serializer = VenueSerializer(venues, many=True)
return Response(serializer.data)

class PhotoCreateView(generics.CreateAPIView):
queryset = Photo.objects.all()
serializer_class = PhotoSerializer

class PhotoRetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
queryset = Photo.objects.all()
serializer_class = PhotoSerializer

0 comments on commit 5b78c16

Please sign in to comment.