Skip to content

Commit

Permalink
Merge pull request #5 from Horlawhumy-dev/add-product-orders
Browse files Browse the repository at this point in the history
Add product orders
  • Loading branch information
Horlawhumy-dev authored Jul 2, 2024
2 parents b923d1e + afe69f3 commit dadbdd9
Show file tree
Hide file tree
Showing 15 changed files with 520 additions and 15 deletions.
27 changes: 25 additions & 2 deletions api_doc.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ API Descriptions:

This application provides a RESTful API for Drugstoc Inventory Management.

Endpoints:
Auth Endpoints:

1. POST /api/users/register/
- Description: Create a new user
Expand All @@ -21,4 +21,27 @@ Endpoints:
4. POST /api/users/logout/
- Description: Logout auth user
- Request Body: refresh_token
- Response: nil
- Response: nil


Inventory Products Endpoints:

1. POST /api/inventory/products/
- Description: Create a new product by admin user
- Request Body: name, description, price, quantity, address
- Response: id, owner, name, description, price, quantity, created_at, updated_at

2. GET /api/inventory/products
- Description: List products for an admin user
- Request Body: nil
- Response: list of products

3. PUT /api/inventory/products/:id
- Description: Update product by an admin user
- Response: id, owner, name, description, price, quantity, created_at, updated_at

4. DELETE /api/inventory/products/:id
- Description: Delete product published by an admin user
- Request Body: nil
- Response: nil

Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# Generated by Django 5.0.6 on 2024-07-02 09:46

import django.db.models.deletion
import drugstoc_inventory.model_utils
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("inventory", "0002_alter_product_options"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

operations = [
migrations.AlterField(
model_name="product",
name="price",
field=models.PositiveIntegerField(default=0),
),
migrations.AlterField(
model_name="product",
name="quantity",
field=models.PositiveIntegerField(default=0),
),
migrations.CreateModel(
name="Order",
fields=[
(
"id",
models.CharField(
default=drugstoc_inventory.model_utils.generate_id,
editable=False,
max_length=255,
primary_key=True,
serialize=False,
),
),
("created_at", models.DateTimeField(auto_now_add=True, db_index=True)),
("updated_at", models.DateTimeField(auto_now=True, db_index=True)),
(
"active",
models.BooleanField(
db_index=True, default=True, verbose_name="active"
),
),
(
"status",
models.CharField(
choices=[
("pending", "Pending"),
("completed", "Completed"),
("cancelled", "Cancelled"),
],
default="pending",
max_length=20,
),
),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
),
),
],
options={
"ordering": ["-created_at", "id"],
"abstract": False,
},
),
migrations.CreateModel(
name="OrderItem",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("quantity", models.PositiveIntegerField(default=0)),
("price", models.PositiveIntegerField(default=0)),
(
"order",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="items",
to="inventory.order",
),
),
(
"product",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="inventory.product",
),
),
],
),
]
18 changes: 18 additions & 0 deletions inventory/migrations/0004_rename_user_order_owner.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 5.0.6 on 2024-07-02 09:49

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
("inventory", "0003_alter_product_price_alter_product_quantity_order_and_more"),
]

operations = [
migrations.RenameField(
model_name="order",
old_name="user",
new_name="owner",
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Generated by Django 5.0.6 on 2024-07-02 10:21

import django.utils.timezone
import drugstoc_inventory.model_utils
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("inventory", "0004_rename_user_order_owner"),
]

operations = [
migrations.AlterModelOptions(
name="orderitem",
options={"ordering": ["-created_at", "id"]},
),
migrations.AddField(
model_name="orderitem",
name="active",
field=models.BooleanField(
db_index=True, default=True, verbose_name="active"
),
),
migrations.AddField(
model_name="orderitem",
name="created_at",
field=models.DateTimeField(
auto_now_add=True, db_index=True, default=django.utils.timezone.now
),
preserve_default=False,
),
migrations.AddField(
model_name="orderitem",
name="updated_at",
field=models.DateTimeField(auto_now=True, db_index=True),
),
migrations.AlterField(
model_name="orderitem",
name="id",
field=models.CharField(
default=drugstoc_inventory.model_utils.generate_id,
editable=False,
max_length=255,
primary_key=True,
serialize=False,
),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 5.0.6 on 2024-07-02 11:19

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
("inventory", "0005_alter_orderitem_options_orderitem_active_and_more"),
]

operations = [
migrations.RenameField(
model_name="orderitem",
old_name="price",
new_name="total_price",
),
migrations.RenameField(
model_name="orderitem",
old_name="quantity",
new_name="total_quantity",
),
]
21 changes: 21 additions & 0 deletions inventory/migrations/0007_remove_orderitem_total_price_and_more.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 5.0.6 on 2024-07-02 11:31

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
("inventory", "0006_rename_price_orderitem_total_price_and_more"),
]

operations = [
migrations.RemoveField(
model_name="orderitem",
name="total_price",
),
migrations.RemoveField(
model_name="orderitem",
name="total_quantity",
),
]
23 changes: 23 additions & 0 deletions inventory/migrations/0008_orderitem_price_orderitem_quantity.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 5.0.6 on 2024-07-02 12:52

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("inventory", "0007_remove_orderitem_total_price_and_more"),
]

operations = [
migrations.AddField(
model_name="orderitem",
name="price",
field=models.PositiveIntegerField(default=1),
),
migrations.AddField(
model_name="orderitem",
name="quantity",
field=models.PositiveIntegerField(default=1),
),
]
17 changes: 17 additions & 0 deletions inventory/migrations/0009_remove_orderitem_price.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Generated by Django 5.0.6 on 2024-07-02 13:11

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
("inventory", "0008_orderitem_price_orderitem_quantity"),
]

operations = [
migrations.RemoveField(
model_name="orderitem",
name="price",
),
]
32 changes: 29 additions & 3 deletions inventory/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ class Product(BaseModelMixin):
name = models.CharField(max_length=200, unique=True)
description = models.TextField()
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
quantity = models.IntegerField(default=0)
price = models.IntegerField(default=0) #suitable model field like float or decimal might be opted for
quantity = models.PositiveIntegerField(default=0)
price = models.PositiveIntegerField(default=0) #suitable model field like float or decimal might be opted for
search_vector = SearchVectorField(null=True, blank=True)

class Meta:
Expand All @@ -26,4 +26,30 @@ class Meta:
]

def __str__(self):
return self.name
return self.name



class Order(BaseModelMixin):
STATUS_CHOICES = [
('pending', 'Pending'),
('completed', 'Completed'),
('cancelled', 'Cancelled'),
]
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default=STATUS_CHOICES[0][0])


class OrderItem(BaseModelMixin):
order = models.ForeignKey(Order, related_name='items', on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField(default=1)
# price = models.PositiveIntegerField(default=1)


def __str__(self):
return f"{self.product.name} ({self.order.id})"

@property
def total_quantity(self):
return self.product.count()
Loading

0 comments on commit dadbdd9

Please sign in to comment.