# TK2 Basdat Jawaban ## Wajib ### Soal Trigger 1 **(FORMAT = TK2_A3_1)** ``` sql CREATE OR REPLACE FUNCTION pendaftaran() RETURNS TRIGGER as $$ BEGIN IF NEW.password ~ '[0-9]' AND NEW.password ~ '[A-Z]' THEN RETURN NEW; ELSE RAISE EXCEPTION 'Password harus memiliki minimal 1 huruf kapital dan 1 angka!'; END IF; END; $$ LANGUAGE plpgsql; CREATE TRIGGER triggerPendaftaran BEFORE INSERT ON USER_ACC FOR EACH ROW EXECUTE PROCEDURE pendaftaran(); ``` #### Example ```sql INSERT INTO USER_ACC VALUES ('tk2a3basdat.com','abcdef',0123456789,'Kelompok','A3'); INSERT INTO USER_ACC VALUES ('tk2a3basdat.com','0bcdeF',0123456789,'Kelompok','A3'); ``` ## Emir ### Soal Trigger 4 **(FORMAT = TK2_A3_2106632541_2)** ```sql= CREATE OR REPLACE FUNCTION cek_saldo_penarikan_restopay() RETURNS TRIGGER AS $$ BEGIN IF(NEW.RestoPay < OLD.RestoPay AND OLD.RestoPay - NEW.RestoPay > OLD.RestoPay) THEN RAISE EXCEPTION 'Nominal penarikan saldo tidak boleh melebihi jumlah saldo yang dimiliki saat ini'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER trigger_cek_saldo_penarikan_restopay BEFORE UPDATE OF RestoPay ON TRANSACTION_ACTOR FOR EACH ROW EXECUTE FUNCTION cek_saldo_penarikan_restopay(); ``` #### Example ```sql= UPDATE TRANSACTION_ACTOR SET RestoPay = -1000 WHERE Email='anornable5@amazon.co.jp'; ``` ## Alvaro ### Soal Trigger 3 **(FORMAT = TK2_A3_2106752180_3)** ```sql CREATE OR REPLACE FUNCTION checkDeliveryFeePerKm() RETURNS TRIGGER as $$ DECLARE motorFee integer; carFee integer; BEGIN motorFee := NEW.motorfee; carFee := NEW.carFee; IF(motorFee >= carFee) THEN RAISE EXCEPTION 'Biaya pengiriman dengan motor harus lebih rendah daripada biaya pengiriman dengan mobil'; ELSIF ((motorFee not BETWEEN 2000 AND 7000) OR (carFee not BETWEEN 2000 AND 7000)) THEN RAISE EXCEPTION 'Harus berada diantara 2000 dan batas 7000'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER triggercheckDeliveryFeePerKm BEFORE INSERT OR UPDATE ON DELIVERY_FEE_PER_KM FOR EACH ROW EXECUTE PROCEDURE checkDeliveryFeePerKm(); ``` #### Example ``` sql INSERT INTO DELIVERY_FEE_PER_KM VALUES (12, 'Makassar', 3000, 6969); UPDATE DELIVERY_FEE_PER_KM SET motorFee = 8000 WHERE id = '12'; ``` ## Dian ### Soal Trigger 4 **(FORMAT = TK2_A3_2106702150_4)** ```sql CREATE OR REPLACE FUNCTION deliveryPrice() RETURNS TRIGGER as $$ DECLARE mFee integer; cFee integer; BEGIN SELECT MotorFee, CarFee INTO mFee, cFee FROM DELIVERY_FEE_PER_KM WHERE Id=NEW.DFId; IF (NEW.VehicleType='Car') THEN NEW.DeliveryFee = cFee * 2; ELSE NEW.DeliveryFee = mFee * 2; END IF; NEW.TotalPrice = NEW.TotalFood + NEW.DeliveryFee; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER triggerDeliveryPrice BEFORE INSERT ON TRANSACTION FOR EACH ROW EXECUTE PROCEDURE deliveryPrice(); ``` #### Example ```sql INSERT INTO TRANSACTION VALUES ('jpennim@un.org','2022-10-03 08:15:10','East','Stremmiarnilt Avenue','Ruyigi','South Island',4000.00,0.0,0.0,30000.00,5,'4','1','2','msmalcombec@pcworld.com','Car'); ``` ## Fauzan ### Soal Trigger 5 **(FORMAT = TK2_A3_2106702150_5)** ```sql CREATE OR REPLACE FUNCTION menambah_restopay() RETURNS TRIGGER as $$ DECLARE biaya_pengantaran integer; total_harga_makanan integer; id_kurir text; email_restoran text; BEGIN IF(NEW.name = 'Pesanan Selesai') THEN SELECT tr.deliveryFee, (tr.totalprice - tr.deliveryFee), tr.courierid, res.email INTO biaya_pengantaran, total_harga_makanan, id_kurir, email_restoran FROM transaction tr JOIN transaction_history th on tr.email = th.email JOIN transaction_status ts on ts.id = th.tsid JOIN transaction_food tf on tf.email = tr.email and tf.datetime = tr.datetime JOIN food f on f.rname = tf.rname and f.rbranch = tf.rbranch and f.foodname = tf.foodname JOIN restaurant res on res.rname = f.rname and res.rbranch = f.rbranch; UPDATE transaction_actor set restopay = restopay + biaya_pengantaran WHERE email = id_kurir; UPDATE transaction_actor set restopay = restopay + total_harga_makanan WHERE email = email_restoran; END IF; RETURN new; END; $$ language plpgsql; CREATE TRIGGER trigger_menambah_restopay AFTER update of name on transaction_status FOR EACH ROW EXECUTE PROCEDURE menambah_restopay(); ``` #### Example ```sql insert into transaction_history values ('dguiraudn@jiathis.com','2022-08-15 9:23:03','TS4', current_timestamp); ```