---
# System prepended metadata

title: TK2 Basdat Jawaban

---

# 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);
```