87 lines
3.4 KiB
Python
87 lines
3.4 KiB
Python
from models.database import Database
|
|
|
|
|
|
class ToyModel:
|
|
def __init__(self, database: Database):
|
|
self.database = database
|
|
|
|
def get_all(self):
|
|
query = """
|
|
SELECT t.toy_id,
|
|
t.toy_name,
|
|
c.category_name,
|
|
m.manufacturer_name,
|
|
t.price,
|
|
t.discount,
|
|
COALESCE(s.quantity, 0) AS quantity,
|
|
STRING_AGG(DISTINCT a.age_label, ', ') AS ages,
|
|
STRING_AGG(DISTINCT sup.supplier_name, ', ') AS suppliers
|
|
FROM toys t
|
|
JOIN categories c ON t.category_id = c.category_id
|
|
JOIN manufacturers m ON t.manufacturer_id = m.manufacturer_id
|
|
LEFT JOIN stock s ON t.toy_id = s.toy_id
|
|
LEFT JOIN toy_age_groups ta ON t.toy_id = ta.toy_id
|
|
LEFT JOIN age_groups a ON ta.age_group_id = a.age_group_id
|
|
LEFT JOIN toy_suppliers ts ON t.toy_id = ts.toy_id
|
|
LEFT JOIN suppliers sup ON ts.supplier_id = sup.supplier_id
|
|
GROUP BY t.toy_id, c.category_name,
|
|
m.manufacturer_name, s.quantity
|
|
ORDER BY t.toy_name
|
|
"""
|
|
return self.database.fetch_all(query)
|
|
|
|
def search_by_age(self, age: str):
|
|
query = """
|
|
SELECT *
|
|
FROM (
|
|
SELECT t.toy_id,
|
|
t.toy_name,
|
|
c.category_name,
|
|
m.manufacturer_name,
|
|
t.price,
|
|
t.discount,
|
|
COALESCE(s.quantity, 0) AS quantity,
|
|
STRING_AGG(DISTINCT a.age_label, ', ') AS ages,
|
|
STRING_AGG(DISTINCT sup.supplier_name, ', ') AS suppliers
|
|
FROM toys t
|
|
JOIN categories c ON t.category_id = c.category_id
|
|
JOIN manufacturers m ON t.manufacturer_id = m.manufacturer_id
|
|
LEFT JOIN stock s ON t.toy_id = s.toy_id
|
|
LEFT JOIN toy_age_groups ta ON t.toy_id = ta.toy_id
|
|
LEFT JOIN age_groups a ON ta.age_group_id = a.age_group_id
|
|
LEFT JOIN toy_suppliers ts ON t.toy_id = ts.toy_id
|
|
LEFT JOIN suppliers sup ON ts.supplier_id = sup.supplier_id
|
|
GROUP BY t.toy_id, c.category_name,
|
|
m.manufacturer_name, s.quantity
|
|
) sub
|
|
WHERE ages ILIKE %s
|
|
"""
|
|
return self.database.fetch_all(query, (f"%{age}%",))
|
|
|
|
def sort_by_price(self):
|
|
query = """
|
|
SELECT *
|
|
FROM (
|
|
SELECT t.toy_id,
|
|
t.toy_name,
|
|
c.category_name,
|
|
m.manufacturer_name,
|
|
t.price,
|
|
t.discount,
|
|
COALESCE(s.quantity, 0) AS quantity,
|
|
STRING_AGG(DISTINCT a.age_label, ', ') AS ages,
|
|
STRING_AGG(DISTINCT sup.supplier_name, ', ') AS suppliers
|
|
FROM toys t
|
|
JOIN categories c ON t.category_id = c.category_id
|
|
JOIN manufacturers m ON t.manufacturer_id = m.manufacturer_id
|
|
LEFT JOIN stock s ON t.toy_id = s.toy_id
|
|
LEFT JOIN toy_age_groups ta ON t.toy_id = ta.toy_id
|
|
LEFT JOIN age_groups a ON ta.age_group_id = a.age_group_id
|
|
LEFT JOIN toy_suppliers ts ON t.toy_id = ts.toy_id
|
|
LEFT JOIN suppliers sup ON ts.supplier_id = sup.supplier_id
|
|
GROUP BY t.toy_id, c.category_name,
|
|
m.manufacturer_name, s.quantity
|
|
) sub
|
|
ORDER BY price
|
|
"""
|
|
return self.database.fetch_all(query)
|