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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

106 changes: 103 additions & 3 deletions commerce/controllers.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
import string
from random import random
from typing import List

from django.contrib.auth.models import User
from django.db.models import Q
from django.shortcuts import get_object_or_404
from ninja import Router
from ninja import Router, ModelSchema
from pydantic import UUID4

from commerce.models import Product, Category, City, Vendor, Item
from commerce.schemas import MessageOut, ProductOut, CitiesOut, CitySchema, VendorOut, ItemOut, ItemSchema, ItemCreate
from commerce.models import Product, Category, City, Vendor, Item, Order, Address, OrderStatus
from commerce.schemas import MessageOut, ProductOut, CitiesOut, CitySchema, VendorOut, ItemOut, ItemSchema, ItemCreate, \
AddressOut, AddressSchema

products_controller = Router(tags=['products'])
address_controller = Router(tags=['addresses'])
vendor_controller = Router(tags=['vendors'])
order_controller = Router(tags=['orders'])
ADDRESS_controller = Router(tags=['Address'])


@vendor_controller.get('', response=List[VendorOut])
Expand Down Expand Up @@ -220,3 +224,99 @@ def delete_item(request, id: UUID4):
item.delete()

return 204, {'detail': 'Item deleted!'}


'''def generate_ref_code():
return ''.join(random.sample(string.ascii_letters + string.digits, 6))'''


@order_controller.post('create-order', response=MessageOut)
def create_order(request):
order_qs = Order.objects.create(
user=User.objects.first(),
status=OrderStatus.objects.get(is_default=True),
# ref_code=generate_ref_code(),
ordered=False,
)

user_items = Item.objects.filter(user=User.objects.first()).filter(ordered=False)

order_qs.items.add(*user_items)
order_qs.total = order_qs.order_total
user_items.update(ordered=True)
order_qs.save()

return {'detail': 'order created successfully'}


@order_controller.post('item/{id}/increase-quantity', response={
200: MessageOut,
})
def increase_item_quantity(request, id: UUID4):
item = get_object_or_404(Item, id=id, user=User.objects.first())
if item.item_qty <= 1:
item.delete()
return 200, {'detail': 'Item deleted!'}
item.item_qty += 1
item.save()

return 200, {'detail': 'Item quantity increase successfully!'}


@ADDRESS_controller.get('Address', response={
200: List[AddressOut],
404: MessageOut
})
def list_cities(request):
address_qs = Address.objects.all()

if address_qs:
return address_qs

return 404, {'detail': 'No cities found'}

@ADDRESS_controller.post('create address', response={
200: List[AddressOut],
400: MessageOut
})
def create_address(request, address_in: AddressSchema):
address = Address.objects.create(**address_in.dict())
address.save()
return 200

@ADDRESS_controller.put('address/{id}', response={
200: AddressOut,
400: MessageOut
})
def update_address(request, id: UUID4, address_in: AddressSchema):
address = get_object_or_404(Address, id=id)
address .address1 = address .address1
address.address2 = address.address2
address.phone = address.phone
address .save()
return 200, address


@ADDRESS_controller.delete('address/{id}', response={
204: MessageOut
})
def delete_address(request, id: UUID4):
address = get_object_or_404(Address, id=id)
address.delete()
return 204, {'detail': ''}

@order_controller.post('CheckOut', response={
201: AddressOut,
400: MessageOut
})
def cheackOut(request):
address_qs = Order(
user=User.objects.first(),
stats=OrderStatus.objects.get(is_default=True),
ordered=False,
)
address_qs.address.addend()
address_qs.note.addend()
address_qs.update(ordered=False)
address_qs.save()
return {'detail': 'checkout successfully'}
19 changes: 19 additions & 0 deletions commerce/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,22 @@ class ItemCreate(Schema):

class ItemOut(UUIDSchema, ItemSchema):
pass


class AddressSchema(Schema):
work_address : bool
address1 : str
address2 : str
phone : int
city: CitySchema

class AddressOut(UUIDSchema, AddressSchema):
work_address : bool = False
address1 : str
address2 : str = None
phone : int
city : CitiesOut

'''class OrderCreate(Schema):
user_id: UUID4
status: str'''
5 changes: 3 additions & 2 deletions config/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
from django.urls import path
from ninja import NinjaAPI

from commerce.controllers import products_controller, address_controller, vendor_controller, order_controller
from commerce.controllers import products_controller, address_controller, vendor_controller, order_controller, \
ADDRESS_controller
from config import settings

api = NinjaAPI()
Expand All @@ -27,7 +28,7 @@
api.add_router('addresses', address_controller)
api.add_router('vendors', vendor_controller)
api.add_router('orders', order_controller)

api.add_router('orders', ADDRESS_controller)
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', api.urls),
Expand Down