Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
24 changes: 24 additions & 0 deletions Manual.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Instalação no windows

1. tenha o python 3.11.1 instalado

2. Clone o repositório


# Modo de uso

Após ter clonado o repositório, ative o ambiente virtual ```venv``` com o seguinte comando
```venv\scripts\activate```

Em seguida, instale as dependências que estão no arquivo requirements.txt utilizando o comando ```pip install -r requirements.txt```

Em seguida ative o servidor com o seguinte comando ```python manage.py runserver```


# Rotas
| método | rota |
| --- | --- |
| POST | ```http://127.0.0.1:8000/api/obras/``` |
| GET | ```http://127.0.0.1:8000/api/obras/``` |
| PUT | ```http://127.0.0.1:8000/api/obras/ID``` |
| DELETE | ```http://127.0.0.1:8000/api/obras/ID```|
Empty file added api/__init__.py
Empty file.
Binary file added api/__pycache__/__init__.cpython-311.pyc
Binary file not shown.
Binary file added api/__pycache__/admin.cpython-311.pyc
Binary file not shown.
Binary file added api/__pycache__/apps.cpython-311.pyc
Binary file not shown.
Binary file added api/__pycache__/models.cpython-311.pyc
Binary file not shown.
Binary file added api/__pycache__/pagination.cpython-311.pyc
Binary file not shown.
Binary file added api/__pycache__/urls.cpython-311.pyc
Binary file not shown.
3 changes: 3 additions & 0 deletions api/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.contrib import admin

# Register your models here.
6 changes: 6 additions & 0 deletions api/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class ApiConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'api'
Binary file added api/entidades/__pycache__/obras.cpython-311.pyc
Binary file not shown.
38 changes: 38 additions & 0 deletions api/entidades/obras.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
class Obras:
def __init__(self, titulo, editora, foto, autores):
self.__titulo = titulo
self.__editora = editora
self.__foto = foto
self.__autores = autores

@property
def titulo(self):
return self.__titulo

@titulo.setter
def titulo(self, titulo):
self.__titulo = titulo

@property
def editora(self):
return self.__editora

@editora.setter
def editora(self, editora):
self.__editora = editora

@property
def foto(self):
return self.__foto

@foto.setter
def foto(self, foto):
self.__foto = foto

@property
def autores(self):
return self.__autores

@autores.setter
def autores(self, autores):
self.__autores = autores
24 changes: 24 additions & 0 deletions api/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 4.1.5 on 2023-01-08 17:24

from django.db import migrations, models


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
migrations.CreateModel(
name='Obras',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('titulo', models.CharField(max_length=50)),
('editora', models.CharField(max_length=50)),
('foto', models.URLField(null=True)),
('autores', models.CharField(max_length=100)),
],
),
]
18 changes: 18 additions & 0 deletions api/migrations/0002_alter_obras_foto.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.1.5 on 2023-01-08 18:14

from django.db import migrations, models


class Migration(migrations.Migration):

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

operations = [
migrations.AlterField(
model_name='obras',
name='foto',
field=models.ImageField(null=True, upload_to=''),
),
]
18 changes: 18 additions & 0 deletions api/migrations/0003_alter_obras_foto.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.1.5 on 2023-01-08 18:28

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('api', '0002_alter_obras_foto'),
]

operations = [
migrations.AlterField(
model_name='obras',
name='foto',
field=models.URLField(null=True),
),
]
Empty file added api/migrations/__init__.py
Empty file.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added api/migrations/__pycache__/__init__.cpython-311.pyc
Binary file not shown.
7 changes: 7 additions & 0 deletions api/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from django.db import models

class Obras(models.Model):
titulo = models.CharField(max_length = 50, blank = False, null = False)
editora = models.CharField(max_length = 50, blank = False, null = False)
foto = models.URLField(null = True)
autores = models.CharField(max_length = 100, blank = False, null = False)
18 changes: 18 additions & 0 deletions api/pagination.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response

class PaginationCustomizada(PageNumberPagination):
page_size = 2
page_size_query_param = 'page_size'
max_page_size = 6

def get_paginated_response(self, data):
return Response(
{
'Links': {
'next': self.get_next_link(),
'previous': self.get_previous_link()
},
'results': data
}
)
Binary file not shown.
22 changes: 22 additions & 0 deletions api/serializers/obras_serializer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from rest_framework import serializers
from ..models import Obras
from rest_framework.reverse import reverse

class ObrasSerializer(serializers.ModelSerializer):
links = serializers.SerializerMethodField()
class Meta:
model = Obras
fields = ('id','titulo', 'editora', 'foto', 'autores', 'links')

def get_links(self, obj):
request = self.context['request']
return {
'delete': reverse('obras-detalhes', kwargs = {'id': obj.pk}, request = request),
'put': reverse('obras-detalhes', kwargs = {'id': obj.pk}, request = request),
}


class ObrasSerializerCadastro(serializers.ModelSerializer):
class Meta:
model = Obras
fields = ('id','titulo', 'editora', 'foto', 'autores')
Binary file not shown.
26 changes: 26 additions & 0 deletions api/services/obras_service.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from ..models import Obras
from django.shortcuts import get_object_or_404

def listar_obras():
return Obras.objects.all()

def listar_obra_id(id):
return get_object_or_404(Obras, id=id)

def criar_obra(obra):
return Obras.objects.create(
titulo = obra.titulo,
editora = obra.editora,
foto = obra.foto,
autores = obra.autores
)

def editar_obra(obra_antiga, obra_nova):
obra_antiga.titulo = obra_nova.titulo
obra_antiga.editora = obra_nova.editora
obra_antiga.foto = obra_nova.foto
obra_antiga.autores = obra_nova.autores
obra_antiga.save(force_update = True)

def remover_obra(obra):
obra.delete()
3 changes: 3 additions & 0 deletions api/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.test import TestCase

# Create your tests here.
7 changes: 7 additions & 0 deletions api/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from django.urls import path
from .views import obras_view

urlpatterns = [
path('obras/', obras_view.ObrasCriarListar.as_view(), name = 'obras'),
path('obras/<int:id>', obras_view.ObrasEditarDeletar.as_view(), name = 'obras-detalhes'),
]
Binary file added api/views/__pycache__/obras_view.cpython-311.pyc
Binary file not shown.
58 changes: 58 additions & 0 deletions api/views/obras_view.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
from ..serializers.obras_serializer import ObrasSerializer, ObrasSerializerCadastro
from ..services import obras_service
from ..entidades.obras import Obras
from ..pagination import PaginationCustomizada


class ObrasCriarListar(APIView):
def post(self, request):
serializer = ObrasSerializerCadastro(data = request.data)
if serializer.is_valid():
titulo = serializer.validated_data['titulo']
editora = serializer.validated_data['editora']
foto = serializer.validated_data['foto']
autores = serializer.validated_data['autores']
nova_obra = Obras(
titulo = titulo,
editora = editora,
foto = foto,
autores = autores
)
obras_service.criar_obra(nova_obra)
return Response(serializer.data, status = status.HTTP_201_CREATED)
return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST)

def get(self, request):
paginacao = PaginationCustomizada()
obras = obras_service.listar_obras()
resultado = paginacao.paginate_queryset(obras, request)
serializer = ObrasSerializer(resultado, context = {'request': request}, many = True)
return paginacao.get_paginated_response(serializer.data)

class ObrasEditarDeletar(APIView):
def delete(self, request, id):
obra = obras_service.listar_obra_id(id)
if obra:
obras_service.remover_obra(obra)
return Response(status = status.HTTP_204_NO_CONTENT)

def put(self, request, id):
obra = obras_service.listar_obra_id(id)
serializer = ObrasSerializer(obra, context = {'request': request}, data = request.data)
if serializer.is_valid():
titulo = serializer.validated_data['titulo']
editora = serializer.validated_data['editora']
foto = serializer.validated_data['foto']
autores = serializer.validated_data['autores']
nova_obra = Obras(
titulo = titulo,
editora = editora,
foto = foto,
autores = autores
)
obras_service.editar_obra(obra, nova_obra)
return Response(serializer.data, status = status.HTTP_200_OK)
return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST)
Empty file added biblioteca/__init__.py
Empty file.
Binary file added biblioteca/__pycache__/__init__.cpython-311.pyc
Binary file not shown.
Binary file added biblioteca/__pycache__/settings.cpython-311.pyc
Binary file not shown.
Binary file added biblioteca/__pycache__/urls.cpython-311.pyc
Binary file not shown.
Binary file added biblioteca/__pycache__/wsgi.cpython-311.pyc
Binary file not shown.
16 changes: 16 additions & 0 deletions biblioteca/asgi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""
ASGI config for biblioteca project.

It exposes the ASGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/4.1/howto/deployment/asgi/
"""

import os

from django.core.asgi import get_asgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'biblioteca.settings')

application = get_asgi_application()
Loading