====== 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';