From 6f3beeec09c3c77c675383949af68a0402950ace Mon Sep 17 00:00:00 2001 From: vlados31 Date: Thu, 29 Sep 2022 00:32:18 +0300 Subject: [PATCH] Small api logic changes, small order changes --- api/api_errors.py | 26 +++++++++++---------- api/api_methods.py | 3 ++- api/api_utils.py | 2 +- order/models.py | 13 +++++++++++ order/urls.py | 1 + order/views.py | 14 +++++++---- templates/orders/order-view.html | 39 +++++++++++++++++++++++++++++++ templates/orders/orders-list.html | 2 +- 8 files changed, 80 insertions(+), 20 deletions(-) create mode 100644 templates/orders/order-view.html diff --git a/api/api_errors.py b/api/api_errors.py index 42429b1..8c83187 100644 --- a/api/api_errors.py +++ b/api/api_errors.py @@ -44,26 +44,28 @@ API_ERROR_VALIDATION = { def make_error_object(ex: Exception): + data = { + "status": "error" + } try: if type(ex.args[0]) != tuple: - raise Exception(API_ERROR_INTERNAL_ERROR) + raise ex - data = { - "error": { - "code": ex.args[0][0], - "message": ex.args[0][1] - } + data["error"] = { + "code": ex.args[0][0], + "message": ex.args[0][1] } if len(ex.args) >= 2: data["error"]["related"] = ex.args[1] return data - except Exception: + + except BaseException as err: traceback.print_exc() - return { - "error": { - "code": API_ERROR_INTERNAL_ERROR[0], - "message": API_ERROR_INTERNAL_ERROR[1] - } + data["error"] = { + "code": API_ERROR_INTERNAL_ERROR[0], + "message": API_ERROR_INTERNAL_ERROR[1], + "related": f"Exception {type(err)}: {str(err)}" } + return data diff --git a/api/api_methods.py b/api/api_methods.py index 817c188..3b0b125 100644 --- a/api/api_methods.py +++ b/api/api_methods.py @@ -102,6 +102,7 @@ def account_verify_phone(params): def account_get(params): user = _reqire_access_token(params) return api_make_response({ + "id": user.id, "name": user.name, "surname": user.surname, "email": user.email, @@ -152,7 +153,7 @@ api_methods = { "params": [ ], - "returns": "Поля пользователя (name, surname, email, phone, phone_verified)." + "returns": "Поля пользователя (id, name, surname, email, phone, phone_verified)." }, "account.verifyPhone": { diff --git a/api/api_utils.py b/api/api_utils.py index 6a5c0d9..9762456 100644 --- a/api/api_utils.py +++ b/api/api_utils.py @@ -7,7 +7,7 @@ def __make_invalid_argument_type_error(name, value, except_type): def api_make_response(response): - return {"response": API_OK_OBJ | response} + return API_OK_OBJ | {"response": response} def api_get_param_int(params: dict, name: str, required=True, default=0): diff --git a/order/models.py b/order/models.py index a111c6e..ae7965a 100644 --- a/order/models.py +++ b/order/models.py @@ -217,5 +217,18 @@ class Order(models.Model): def __str__(self): return self.name + @staticmethod + def get_all_for_user(user): + if user.is_staff: + return Order.objects.filter().order_by('create_time') + else: + return Order.objects.filter(published=True, moderated=True).order_by('create_time') + @staticmethod + def get_for_user_by_id(user, order_id): + q = Order.get_all_for_user(user).filter(id=order_id) + if len(q) == 0: + return None + else: + return q[0] diff --git a/order/urls.py b/order/urls.py index 1e0cf97..0732570 100644 --- a/order/urls.py +++ b/order/urls.py @@ -20,5 +20,6 @@ from . import views urlpatterns = [ path('', views.orders_list, name='orders-list'), path('create', views.order_create, name='order-create'), + path('view/', views.order_view, name='order-view'), ] diff --git a/order/views.py b/order/views.py index 6604243..96db3f4 100644 --- a/order/views.py +++ b/order/views.py @@ -1,15 +1,12 @@ from django.http import HttpResponseRedirect from django.shortcuts import render from .forms import * +from django.contrib.auth.decorators import login_required def orders_list(request): if request.user.is_authenticated: - if request.user.is_staff: - orders = Order.objects.filter() - else: - orders = Order.objects.filter(published=True, moderated=True) - orders.order_by('create_time') + orders = Order.get_all_for_user(request.user) return render(request, 'orders/orders-list.html', {'orders': orders[:50]}) else: return HttpResponseRedirect('/accounts/register') @@ -36,3 +33,10 @@ def order_create(request): form = UnregisteredUserOrderCreationForm() print(form.visible_fields) return render(request, 'orders/order-create.html', {'form': form}) + + +@login_required +def order_view(request, order_id): + order = Order.get_all_for_user(request.user) + order = order.select_related('address_city').get(id=order_id) + return render(request, 'orders/order-view.html', {"order": order}) diff --git a/templates/orders/order-view.html b/templates/orders/order-view.html new file mode 100644 index 0000000..e85fd2d --- /dev/null +++ b/templates/orders/order-view.html @@ -0,0 +1,39 @@ +{% extends 'base.html' %} +{% block title %} Аккаунт | вход {% endblock %} + +{% block styles %} + +{% endblock %} + +{% block content %} +

Заказ {{ order.name }}

+ +
+ Описание: +

{{ order.description }}

+
+ +
+ Дата создания: +

{{ order.create_time }}

+
+ +
+ Город: +

{{ order.address_city.name }}

+
+ +{% endblock %} diff --git a/templates/orders/orders-list.html b/templates/orders/orders-list.html index e0bcbcf..ae80e32 100644 --- a/templates/orders/orders-list.html +++ b/templates/orders/orders-list.html @@ -18,7 +18,7 @@ {% for order in orders %}
{{ order.create_time }} -

{{ order.name }}

+

{{ order.name }}

{{ order.description }}

{% endfor %}