l3:serveri:registracija_register_licence_sql

SQL register_licence

-- Function: register_licence(json)

-- DROP FUNCTION register_licence(json);

CREATE OR REPLACE FUNCTION register_licence(reg json)
  RETURNS json AS
$BODY$
DECLARE
    tmp_mel_id UUID;
    do_register BOOLEAN;
    ssql TEXT;
    refresh_date TIMESTAMP;
    expiry_date TIMESTAMP;
    next_date TIMESTAMP;
    res json;
BEGIN

    -- Dve su mogućnosti, registruje se prvi put ili se osvežava postojeća licenca

    IF LENGTH(reg->>'licence')>0 THEN

        -- Provera licence i osvežavanje (2017-04-09, Milano  Za sada samo osvežavanje)

        SELECT mel_id INTO tmp_mel_id FROM RegInfo WHERE mel_id = (reg->>'licence')::UUID;
        IF FOUND THEN
            do_register:=False;
            -- osvežavanje registracije
        ELSE
            do_register:=True;
        END IF;
    ELSE
        do_register:=True;
    END IF;

    -- Postupak registracije
    IF do_register THEN
        SELECT md5(random()::text || clock_timestamp()::text)::uuid INTO tmp_mel_id;
        -- umećem inicijalne parametre
        INSERT INTO RegInfo (mel_id,lic_to,reg_date) SELECT tmp_mel_id,(reg->>'name'),CURRENT_TIMESTAMP;
    END IF;

    -- Osvežavanje podataka koji se dobijaju od klijenta
    ssql:='';
    IF LENGTH(reg->>'ver')>0 THEN ssql:=ssql || 'version=' || quote_literal(reg->>'ver') || ',';END IF;
    IF LENGTH(reg->>'distributor')>0 THEN ssql:=ssql || 'distrib=' || quote_literal(reg->>'distributor') || ',';END IF;
    IF LENGTH(reg->>'entity_count')>0 THEN ssql:=ssql || 'stat_entcount=' || (reg->>'entity_count') || ',';END IF;
    IF LENGTH(reg->>'entities')>0 THEN ssql:=ssql || 'stat_entities=' || quote_literal(reg->>'entities') || ',';END IF;
    IF LENGTH(reg->>'modules')>0 THEN ssql:=ssql || 'stat_modules=' || quote_literal(reg->>'modules') || ',';END IF;
    IF LENGTH(reg->>'maxsize')>0 THEN ssql:=ssql || 'stat_maxsize=' || quote_literal(reg->>'maxsize') || ',';END IF;

    -- datum osvežavanja i podrazumevani rok trajanja licence
    refresh_date := CURRENT_TIMESTAMP;
    expiry_date := refresh_date + INTERVAL '1 year';
    next_date := refresh_date + INTERVAL '7 days';

    ssql:= ssql || 'refresh_date=' + quote_literal(refresh_date)
                || ',next_date=' + quote_literal(next_date)
                || ',expiry_date=' + quote_literal(expiry_date);

    -- konačan SQL
    ssql:='UPDATE RegInfo SET ' || ssql || ' WHERE mel_id=' || quote_literal(tmp_mel_id);
    EXECUTE ssql;

    -- vraćam JSON Licenca objekat
    RETURN row_to_json(x)
    FROM (SELECT r.mel_id as licence,
         r.lic_to as owner,
         r.status as status,
         r.next_date as next,
         r.expiry_date as expiry
        FROM reginfo r WHERE mel_id=tmp_mel_id) x;
END
$BODY$
  LANGUAGE plpgsql VOLATILE STRICT
  COST 100;
ALTER FUNCTION register_licence(json)
  OWNER TO nessa;
COMMENT ON FUNCTION register_licence(json) IS 'Funkcija prihvata JSON formatiran zahtev za obnovom registracije licence,
vrši proveru i postavku potrebnih parametara i vraća JSON "Licenca" odgovor';
  • l3/serveri/registracija_register_licence_sql.txt
  • Last modified: 2017/04/10 14:43
  • by milano