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