Small api logic changes, small order changes

This commit is contained in:
vlados31 2022-09-29 00:32:18 +03:00
parent 19b246ec06
commit 6f3beeec09
8 changed files with 80 additions and 20 deletions

View File

@ -44,26 +44,28 @@ API_ERROR_VALIDATION = {
def make_error_object(ex: Exception): def make_error_object(ex: Exception):
data = {
"status": "error"
}
try: try:
if type(ex.args[0]) != tuple: if type(ex.args[0]) != tuple:
raise Exception(API_ERROR_INTERNAL_ERROR) raise ex
data = { data["error"] = {
"error": {
"code": ex.args[0][0], "code": ex.args[0][0],
"message": ex.args[0][1] "message": ex.args[0][1]
} }
}
if len(ex.args) >= 2: if len(ex.args) >= 2:
data["error"]["related"] = ex.args[1] data["error"]["related"] = ex.args[1]
return data return data
except Exception:
except BaseException as err:
traceback.print_exc() traceback.print_exc()
return { data["error"] = {
"error": {
"code": API_ERROR_INTERNAL_ERROR[0], "code": API_ERROR_INTERNAL_ERROR[0],
"message": API_ERROR_INTERNAL_ERROR[1] "message": API_ERROR_INTERNAL_ERROR[1],
} "related": f"Exception {type(err)}: {str(err)}"
} }
return data

View File

@ -102,6 +102,7 @@ def account_verify_phone(params):
def account_get(params): def account_get(params):
user = _reqire_access_token(params) user = _reqire_access_token(params)
return api_make_response({ return api_make_response({
"id": user.id,
"name": user.name, "name": user.name,
"surname": user.surname, "surname": user.surname,
"email": user.email, "email": user.email,
@ -152,7 +153,7 @@ api_methods = {
"params": [ "params": [
], ],
"returns": "Поля пользователя (name, surname, email, phone, phone_verified)." "returns": "Поля пользователя (id, name, surname, email, phone, phone_verified)."
}, },
"account.verifyPhone": { "account.verifyPhone": {

View File

@ -7,7 +7,7 @@ def __make_invalid_argument_type_error(name, value, except_type):
def api_make_response(response): 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): def api_get_param_int(params: dict, name: str, required=True, default=0):

View File

@ -217,5 +217,18 @@ class Order(models.Model):
def __str__(self): def __str__(self):
return self.name 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]

View File

@ -20,5 +20,6 @@ from . import views
urlpatterns = [ urlpatterns = [
path('', views.orders_list, name='orders-list'), path('', views.orders_list, name='orders-list'),
path('create', views.order_create, name='order-create'), path('create', views.order_create, name='order-create'),
path('view/<int:order_id>', views.order_view, name='order-view'),
] ]

View File

@ -1,15 +1,12 @@
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.shortcuts import render from django.shortcuts import render
from .forms import * from .forms import *
from django.contrib.auth.decorators import login_required
def orders_list(request): def orders_list(request):
if request.user.is_authenticated: if request.user.is_authenticated:
if request.user.is_staff: orders = Order.get_all_for_user(request.user)
orders = Order.objects.filter()
else:
orders = Order.objects.filter(published=True, moderated=True)
orders.order_by('create_time')
return render(request, 'orders/orders-list.html', {'orders': orders[:50]}) return render(request, 'orders/orders-list.html', {'orders': orders[:50]})
else: else:
return HttpResponseRedirect('/accounts/register') return HttpResponseRedirect('/accounts/register')
@ -36,3 +33,10 @@ def order_create(request):
form = UnregisteredUserOrderCreationForm() form = UnregisteredUserOrderCreationForm()
print(form.visible_fields) print(form.visible_fields)
return render(request, 'orders/order-create.html', {'form': form}) 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})

View File

@ -0,0 +1,39 @@
{% extends 'base.html' %}
{% block title %} Аккаунт | вход {% endblock %}
{% block styles %}
<style>
.field-wrapper {
margin: 1em;
padding: 1em;
border-left: var(--brand-color) solid 1px;
}
.field-wrapper > * {
display: inline;
}
.field-wrapper > span {
font-weight: bolder;
margin-right: 1em;
}
</style>
{% endblock %}
{% block content %}
<h1 class=deprecated-page-header"> Заказ {{ order.name }} </h1>
<div class="field-wrapper">
<span>Описание:</span>
<p>{{ order.description }}</p>
</div>
<div class="field-wrapper">
<span>Дата создания:</span>
<p>{{ order.create_time }}</p>
</div>
<div class="field-wrapper">
<span>Город:</span>
<p>{{ order.address_city.name }}</p>
</div>
{% endblock %}

View File

@ -18,7 +18,7 @@
{% for order in orders %} {% for order in orders %}
<div class="order-wrapper"> <div class="order-wrapper">
<span class="order-pub-date">{{ order.create_time }}</span> <span class="order-pub-date">{{ order.create_time }}</span>
<h3>{{ order.name }}</h3> <h3><a href="{% url 'order-view' order.id %}">{{ order.name }}</a></h3>
<p>{{ order.description }}</p> <p>{{ order.description }}</p>
</div> </div>
{% endfor %} {% endfor %}