Refatoração do Backend das entidades

Agora todas as entidades possuem um código de rota melhor estruturado
This commit is contained in:
Eberton committed 2026-05-26 22:41:18 -03:00
1 parent d7887019f7
commit e9b54535d3
4 files changed
+229 -178

No files matched your search

+146 -112
View File
@@ -1,13 +1,47 @@
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.urls import reverse from django.urls import reverse
from django.db.models import Prefetch
from ..models import Farm, Paddock, PaddockGroup from ..models import Farm, Paddock, PaddockGroup
from ..forms import FarmCreateForm, FarmEditForm, PaddockCreateForm, PaddockEditForm, PaddockGroupCreateForm, PaddockGroupEditForm from ..forms import FarmCreateForm, FarmEditForm, PaddockCreateForm, PaddockEditForm, PaddockGroupCreateForm, PaddockGroupEditForm
def get_selected_farm(request): def _get_selected_farm_id(request):
return Farm.objects.get(id=request.session['selected_farm_id']) return request.session['selected_farm_id']
def _get_selected_farm(request):
return get_object_or_404(
Farm,
pk=_get_selected_farm_id(request),
is_active=True
)
def _get_farm_by_id(request, farm_id):
return get_object_or_404(
Farm,
pk=farm_id,
is_active=True
)
def _get_paddock_by_id(request, paddock_id):
return get_object_or_404(
Paddock,
pk=paddock_id,
farm_id=_get_selected_farm_id(request),
is_active=True
)
def _get_active_farm_paddocks(request):
return Paddock.objects.filter(
farm=_get_selected_farm(request),
is_active=True
)
def _get_paddock_group_by_id(request, paddock_group_id):
return get_object_or_404(
PaddockGroup,
pk=paddock_group_id,
is_active=True
)
# Farm Services # Farm Services
@@ -18,7 +52,7 @@ def get_farm_home_context(request):
context['title'] = 'Fazenda' context['title'] = 'Fazenda'
farms = Farm.objects.filter( farms = Farm.objects.filter(
users=authenticated_user, # Verificar se da para deixar apenas = ou deve usar um is in ou algo do tipo users=authenticated_user,
is_active=True is_active=True
) )
@@ -26,7 +60,6 @@ def get_farm_home_context(request):
return context return context
def get_farm_create_context(): def get_farm_create_context():
form = FarmCreateForm() form = FarmCreateForm()
@@ -38,7 +71,6 @@ def get_farm_create_context():
return context return context
def create_farm(request): def create_farm(request):
form = FarmCreateForm(request.POST) form = FarmCreateForm(request.POST)
authenticated_user = request.user authenticated_user = request.user
@@ -50,9 +82,9 @@ def create_farm(request):
return False return False
def get_update_farm_context(request, farm_id):
def update_farm(request, farm_id): farm = _get_farm_by_id(request, farm_id)
farm = get_object_or_404(Farm, pk=farm_id, is_active=True) form = FarmEditForm(instance=farm)
context = {} context = {}
context['title'] = 'Editar fazenda' context['title'] = 'Editar fazenda'
@@ -61,33 +93,41 @@ def update_farm(request, farm_id):
kwargs={'farm_id': farm.pk} kwargs={'farm_id': farm.pk}
) )
context['return_url'] = reverse('entities:farm:farm_list') context['return_url'] = reverse('entities:farm:farm_list')
context['form'] = form
if request.method == 'GET': return context
form = FarmEditForm(instance=farm)
elif request.method == 'POST': def update_farm(request, farm_id):
farm = _get_farm_by_id(request, farm_id)
form = FarmEditForm(request.POST, instance=farm) form = FarmEditForm(request.POST, instance=farm)
if form.is_valid(): if form.is_valid():
form.save() form.save()
return {'redirect': 'entities:farm:farm_list'} return True
context['form'] = form return False
return {'context': context} def get_farm_delete_context(request, farm_id):
farm = _get_farm_by_id(request, farm_id)
context = {}
context['description'] = f"Excluir registro da fazenda {farm.name}"
context['positive_url'] = reverse(
'entities:farm:farm_delete',
kwargs={'farm_id': farm_id}
)
context['negative_url'] = reverse('entities:farm:farm_list')
def delete_farm(farm_id): return context
farm = get_object_or_404(Farm, pk=farm_id, is_active=True)
def delete_farm(request, farm_id):
farm = _get_farm_by_id(request, farm_id)
farm.is_active = False farm.is_active = False
farm.save() farm.save()
# Paddock Services # Paddock Services
def create_paddock(request): def get_paddock_create_context():
selected_farm = get_selected_farm(request)
if request.method == 'GET':
form = PaddockCreateForm() form = PaddockCreateForm()
context = { context = {
@@ -97,85 +137,69 @@ def create_paddock(request):
'return_url': reverse('entities:farm:paddock_list') 'return_url': reverse('entities:farm:paddock_list')
} }
return {'context': context} return context
elif request.method == 'POST': def create_paddock(request):
form = PaddockCreateForm(request.POST) form = PaddockCreateForm(request.POST)
selected_farm = _get_selected_farm(request)
if form.is_valid(): if form.is_valid():
paddock = form.save(commit=False) paddock = form.save(commit=False)
paddock.farm = selected_farm paddock.farm = selected_farm
paddock.save() paddock.save()
return {'redirect': 'entities:farm:paddock_list'} return True
context = { return False
'title': 'Novo Piquete',
'form': form,
'action_url': reverse('entities:farm:paddock_create'),
'return_url': reverse('entities:farm:paddock_list')
}
return {'context': context} def get_paddock_update_context(request, paddock_id):
paddock = _get_paddock_by_id(request, paddock_id)
def update_paddock(request, paddock_id):
farm_id = request.session['selected_farm_id']
paddock = get_object_or_404(Paddock, pk=paddock_id, farm_id=farm_id, is_active=True)
context = {}
context['title'] = 'Editar piquete'
context['action_url'] = reverse(
'entities:farm:paddock_update',
kwargs={'paddock_id': paddock.pk}
)
context['return_url'] = reverse('entities:farm:paddock_list')
if request.method == 'GET':
form = PaddockEditForm(instance=paddock) form = PaddockEditForm(instance=paddock)
elif request.method == 'POST': context = {
'title': 'Editar piquete',
'action_url': reverse(
'entities:farm:paddock_update',
kwargs={'paddock_id': paddock.pk}
),
'return_url': reverse('entities:farm:paddock_list'),
'form': form
}
return context
def update_paddock(request, paddock_id):
paddock = _get_paddock_by_id(request, paddock_id)
form = PaddockEditForm(request.POST, instance=paddock) form = PaddockEditForm(request.POST, instance=paddock)
if form.is_valid(): if form.is_valid():
form.save() form.save()
return {'redirect': 'entities:farm:paddock_list'} return True
context['form'] = form return False
return {'context': context} def get_paddock_delete_context(request, paddock_id):
paddock = _get_paddock_by_id(request, paddock_id)
context = {}
context['description'] = f"Excluir registro do piquete {paddock.identifier}"
context['positive_url'] = reverse(
'entities:farm:paddock_delete',
kwargs={'paddock_id': paddock_id}
)
context['negative_url'] = reverse('entities:farm:paddock_list')
def delete_paddock(paddock_id): return context
paddock = get_object_or_404(Paddock, pk=paddock_id, is_active=True)
def delete_paddock(request, paddock_id):
paddock = _get_paddock_by_id(request, paddock_id)
paddock.is_active = False paddock.is_active = False
paddock.save() paddock.save()
# Paddock Group Services # Paddock Group Services
def create_paddock_group(request): def get_paddock_group_create_context(request):
selected_farm = get_selected_farm(request)
if request.method == 'GET':
form = PaddockGroupCreateForm() form = PaddockGroupCreateForm()
form.fields['paddocks'].queryset = Paddock.objects.filter(
farm=selected_farm,
is_active=True
)
if request.method == 'POST':
form = PaddockGroupCreateForm(request.POST)
if form.is_valid():
paddock_group = form.save(commit=False)
paddock_group.save()
return {'redirect': 'entities:farm:paddock_group_list'}
form.fields['paddocks'].queryset = Paddock.objects.filter(
farm=selected_farm,
is_active=True
)
context = { context = {
'title': 'Novo Bloco', 'title': 'Novo Bloco',
@@ -184,56 +208,66 @@ def create_paddock_group(request):
'return_url': reverse('entities:farm:paddock_group_list') 'return_url': reverse('entities:farm:paddock_group_list')
} }
return {'context': context} return context
def create_paddock_group(request):
def update_paddock_group(request, paddock_group_id): form = PaddockGroupCreateForm(request.POST)
selected_farm = get_selected_farm(request)
paddock_group = get_object_or_404(PaddockGroup, pk=paddock_group_id, is_active=True)
context = {
'title': f'Editar Lote {paddock_group.identifier}',
'return_url': reverse('entities:farm:paddock_group_list')
}
if request.method == 'GET':
form = PaddockGroupEditForm(instance=paddock_group)
form.fields['paddocks'].queryset = Paddock.objects.filter(
farm=selected_farm,
is_active=True
)
context['action_url'] = reverse(
'entities:farm:paddock_group_update',
kwargs={'paddock_group_id': paddock_group.pk}
)
elif request.method == 'POST':
form = PaddockGroupEditForm(request.POST, instance=paddock_group)
if form.is_valid(): if form.is_valid():
paddock_group = form.save() form.save()
paddock_group.save() return True
return {'redirect': 'entities:farm:paddock_group_list'} return False
form.fields['paddocks'].queryset = Paddock.objects.filter( def get_paddock_group_update_context(request, paddock_group_id):
farm=selected_farm, paddock_group = _get_paddock_group_by_id(request, paddock_group_id)
is_active=True
)
context['action_url'] = reverse( form = PaddockGroupEditForm(instance=paddock_group)
context = {
'title': f'Editar Bloco {paddock_group.identifier}',
'action_url': reverse(
'entities:farm:paddock_group_update', 'entities:farm:paddock_group_update',
kwargs={'paddock_group_id': paddock_group.pk} kwargs={'paddock_group_id': paddock_group.pk}
),
'return_url': reverse('entities:farm:paddock_group_list'),
'form': form
}
return context
def update_paddock_group(request, paddock_group_id):
paddock_group = _get_paddock_group_by_id(request, paddock_group_id)
form = PaddockGroupEditForm(
request.POST,
instance=paddock_group
) )
context['form'] = form if form.is_valid():
form.save()
return True
return {'context': context} return False
def get_paddock_group_delete_context(request, paddock_group_id):
paddock_group = _get_paddock_group_by_id(request, paddock_group_id)
def delete_paddock_group(paddock_group_id): context = {}
paddock_group = get_object_or_404(PaddockGroup, pk=paddock_group_id, is_active=True) context['description'] = (
f"Excluir registro do bloco {paddock_group.identifier}"
)
context['positive_url'] = reverse(
'entities:farm:paddock_group_delete',
kwargs={'paddock_group_id': paddock_group_id}
)
context['negative_url'] = reverse(
'entities:farm:paddock_group_list'
)
return context
def delete_paddock_group(request, paddock_group_id):
paddock_group = _get_paddock_group_by_id(request, paddock_group_id)
paddock_group.is_active = False paddock_group.is_active = False
paddock_group.save() paddock_group.save()
+14 -19
View File
@@ -8,34 +8,29 @@ from ..forms import UserLoginForm
def user_profile(request): # TO DO def user_profile(request): # TO DO
... ...
def get_user_login_context(request):
context = {}
form = UserLoginForm()
context['fail_login'] = False
context['form'] = form
return context
def user_login(request): def user_login(request):
if request.user.is_authenticated:
return {'redirect': 'entities:user:farm_select'}
context = {}
context['fail_login'] = False
form = UserLoginForm()
if request.method == "POST":
form = UserLoginForm(request.POST) form = UserLoginForm(request.POST)
if form.is_valid(): if not form.is_valid():
return False
username = form.cleaned_data['login'] username = form.cleaned_data['login']
password = form.cleaned_data['password'] password = form.cleaned_data['password']
user = authenticate(request, username=username, password=password) user = authenticate(request, username=username, password=password)
if user is not None: if user is None:
login(request, user) return False
context['title'] = 'Fazendas'
return {'redirect': 'entities:user:farm_select'}
else:
context['fail_login'] = True
else:
context['fail_login'] = True
context['form'] = form login(request, user)
return {'context': context} return True
def user_logout(request): def user_logout(request):
+58 -43
View File
@@ -1,4 +1,3 @@
from django.views.decorators.http import require_http_methods
from django.shortcuts import redirect, render from django.shortcuts import redirect, render
from core.decorators import farm_required from core.decorators import farm_required
from ..services import farm as services from ..services import farm as services
@@ -12,97 +11,113 @@ def farm_home(request):
@farm_required @farm_required
def farm_create(request): def farm_create(request):
if request.method == 'GET':
context = services.get_farm_create_context() context = services.get_farm_create_context()
if request.method == 'GET':
return render(request, 'farm/farm_create.html', context) return render(request, 'farm/farm_create.html', context)
elif request.method == 'POST': if request.method == 'POST':
success = services.create_farm(request) if services.create_farm(request):
if success:
return redirect('entities:farm:farm_list') return redirect('entities:farm:farm_list')
context['error'] = "Não foi possível criar a fazenda"
return redirect('entities:farm:farm_create') return render(request, 'farm/farm_create.html', context)
@farm_required @farm_required
def farm_update(request, farm_id): def farm_update(request, farm_id):
result = services.update_farm(request, farm_id) context = services.get_update_farm_context(request, farm_id)
if request.method == 'GET':
if result.get('redirect'): return render(request, 'farm/farm_update.html', context)
return redirect(result['redirect'])
return render(request, 'farm/farm_update.html', result['context'])
if request.method == 'POST':
if services.update_farm(request, farm_id):
return redirect('entities:farm:farm_home')
context['error'] = "Não foi possível editar a fazenda"
return render(request, 'farm/farm_update.html', context)
@farm_required @farm_required
@require_http_methods(["POST"])
def farm_delete(request, farm_id): def farm_delete(request, farm_id):
if request.method == 'GET':
context = services.get_farm_delete_context(request, farm_id)
return render(request, 'confirmation_popup.html', context)
if request.method == 'POST':
services.delete_farm(request, farm_id) services.delete_farm(request, farm_id)
return redirect('entities:farm:farm_create') return redirect('entities:farm:farm_create')
# Paddock Views # Paddock Views
@farm_required @farm_required
def paddock_create(request): def paddock_create(request):
if request.method == 'GET':
context = services.get_paddock_create_context() context = services.get_paddock_create_context()
if request.method == 'GET':
return render(request, 'paddock/paddock_create.html', context) return render(request, 'paddock/paddock_create.html', context)
elif request.method == 'POST': if request.method == 'POST':
success = services.create_paddock(request) if services.create_paddock(request):
if success:
return redirect('entities:farm:paddock_list') return redirect('entities:farm:paddock_list')
context['error'] = "Não foi possível criar o piquete"
return redirect('entities:farm:paddock_create') return render(request, 'paddock/paddock_create.html', context)
@farm_required @farm_required
def paddock_update(request, paddock_id): def paddock_update(request, paddock_id):
result = services.update_paddock(request, paddock_id) context = services.get_paddock_update_context(request, paddock_id)
if request.method == 'GET':
if result.get('redirect'): return render(request, 'paddock/paddock_update.html', context)
return redirect(result['redirect'])
return render(request, 'paddock/paddock_update.html', result['context'])
if request.method == 'POST':
if services.update_paddock(request, paddock_id):
return redirect('entities:farm:paddock_list')
context['error'] = "Não foi possível editar o piquete"
return render(request, 'paddock/paddock_update.html', context)
@farm_required @farm_required
@require_http_methods(["POST"])
def paddock_delete(request, paddock_id): def paddock_delete(request, paddock_id):
if request.method == 'GET':
context = services.get_paddock_delete_context(request, paddock_id)
return render(request, 'confirmation_popup.html', context)
if request.method == 'POST':
services.delete_paddock(request, paddock_id) services.delete_paddock(request, paddock_id)
return redirect('entities:farm:paddock_list') return redirect('entities:farm:paddock_list')
# Paddock Group Views # Paddock Group Views
@farm_required @farm_required
def paddock_group_create(request): def paddock_group_create(request):
context = services.get_paddock_group_create_context(request)
if request.method == 'GET': if request.method == 'GET':
context = services.get_paddock_group_create_context()
return render(request, 'paddock_group/paddock_group_create.html', context) return render(request, 'paddock_group/paddock_group_create.html', context)
elif request.method == 'POST': if request.method == 'POST':
success = services.create_paddock_group(request) if services.create_paddock_group(request):
if success:
return redirect('entities:farm:paddock_group_list') return redirect('entities:farm:paddock_group_list')
return redirect('entities:farm:paddock_group_create') context['error'] = "Não foi possível criar o bloco"
return render(request, 'paddock_group/paddock_group_create.html', context)
@farm_required @farm_required
def paddock_group_update(request, paddock_group_id): def paddock_group_update(request, paddock_group_id):
result = services.update_paddock_group(request, paddock_group_id) context = services.get_paddock_group_update_context(request, paddock_group_id)
if result.get('redirect'): if request.method == 'GET':
return redirect(result['redirect']) return render(request, 'paddock_group/paddock_group_update.html', context)
return render(request, 'paddock_group/paddock_group_update.html', result['context']) if request.method == 'POST':
if services.update_paddock_group(request, paddock_group_id):
return redirect('entities:farm:paddock_group_list')
context['error'] = "Não foi possível editar o bloco"
return render(request, 'paddock_group/paddock_group_update.html', context)
@farm_required @farm_required
@require_http_methods(["POST"])
def paddock_group_delete(request, paddock_group_id): def paddock_group_delete(request, paddock_group_id):
if request.method == 'GET':
context = services.get_paddock_group_delete_context(request, paddock_group_id)
return render(request, 'confirmation_popup.html', context)
if request.method == 'POST':
services.delete_paddock_group(request, paddock_group_id) services.delete_paddock_group(request, paddock_group_id)
return redirect('entities:farm:paddock_group_list') return redirect('entities:farm:paddock_group_list')
+11 -4
View File
@@ -7,13 +7,20 @@ def user_profile(request): # TO DO
def user_login(request): def user_login(request):
result = services.user_login(request) if request.user.is_authenticated:
return redirect('entities:user:farm_select')
if result.get('redirect'): context = services.get_user_login_context(request)
return redirect(result['redirect'])
return render(request, 'login.html', result['context']) if request.method == 'GET':
return render(request, 'login.html', context)
if request.method == 'POST':
if not services.user_login(request):
context['fail_login'] = True
return render(request, 'login.html', context)
return redirect('entities:user:farm_select')
def user_logout(request): def user_logout(request):
return services.user_logout(request) return services.user_logout(request)