Changes between Version 9 and Version 10 of DatabaseProgramming


Ignore:
Timestamp:
06/14/26 15:52:55 (3 days ago)
Author:
231072
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseProgramming

    v9 v10  
    7777
    7878
     79= Процедура add_product
    7980
     81Додава нов продукт во системот заедно со неговите атрибути, статистики и слики.
     82
     83{{{
     84CREATE OR REPLACE PROCEDURE add_product(
     85    p_title VARCHAR,
     86    p_description VARCHAR,
     87    p_price NUMERIC,
     88    p_location VARCHAR,
     89    p_currency VARCHAR,
     90    p_category_id INT,
     91    p_seller_id INT,
     92    p_quantity INT,
     93    p_attributes JSONB,   -- ex. '[{"category_attribute_id": 11, "attribute_value": "M"}, ...]'
     94    p_images TEXT[]       -- ex. ARRAY['url1.jpg', 'url2.jpg']
     95)
     96LANGUAGE plpgsql
     97AS $$
     98DECLARE
     99    v_product_id INT;
     100    v_attr JSONB;
     101    v_image TEXT;
     102begin
     103    -- Validacii
     104    IF p_price <= 0 THEN
     105        RAISE EXCEPTION 'Cenata mora da e pogolema od 0';
     106    END IF;
     107
     108    IF p_quantity < 0 THEN
     109        RAISE EXCEPTION 'Kolichinata ne moze da e negativna';
     110    END IF;
     111
     112   
     113    IF EXISTS (
     114        SELECT 1 FROM category WHERE parent_category = p_category_id
     115    ) THEN
     116        RAISE EXCEPTION 'Kategorijata mora da e leaf kategorija';
     117    END IF;
     118
     119   
     120    --FUNKCIJA KORISNIK
     121   perform fn_validate_seller_package(p_seller_id);
     122   
     123
     124    -- Insert produkt
     125    INSERT INTO product (title, description, price, "location" , category_id, seller_id, created_at, is_active, currency, quantity)
     126        VALUES (
     127            p_title,
     128            p_description,
     129            p_price,
     130            p_location,
     131            p_category_id,
     132            p_seller_id,
     133            CURRENT_TIMESTAMP,
     134            CASE WHEN p_quantity > 0 THEN TRUE ELSE FALSE END,
     135            p_currency,
     136            p_quantity
     137        )
     138        RETURNING product_id INTO v_product_id;
     139
     140    -- Insert productstats (pochetni vrednosti)
     141    INSERT INTO productstats (product_id, views_count, favorites_count, sells_count)
     142    VALUES (v_product_id, 0, 0, 0);
     143
     144    -- Insert atributi funkcija
     145   IF p_attributes IS NOT NULL then
     146           FOR v_attr IN SELECT value FROM jsonb_array_elements(p_attributes) LOOP
     147            PERFORM fn_validate_product_attribute(
     148                p_category_id,
     149                (v_attr->>'category_attribute_id')::INT,
     150                v_attr->>'attribute_value'
     151            );
     152            INSERT INTO productattributes (product_id, category_attribute_id, attribute_value)
     153            VALUES (v_product_id, (v_attr->>'category_attribute_id')::INT, v_attr->>'attribute_value');
     154                END LOOP;
     155        END IF;
     156
     157    -- Insert sliki
     158    IF p_images IS NOT NULL THEN
     159        FOREACH v_image IN ARRAY p_images
     160        LOOP
     161            INSERT INTO productimages (product_id, image_url)
     162            VALUES (v_product_id, v_image);
     163        END LOOP;
     164    END IF;
     165
     166    RAISE NOTICE 'Produktot e dodaden so ID: %', v_product_id;
     167end;
     168$$;
     169}}}