check_if_coupon_is_valid function

dynamic check_if_coupon_is_valid(
  1. String coupon_id,
  2. BuildContext context,
  3. String valid_message,
  4. String invalid_message,
)

Implementation

check_if_coupon_is_valid(
  String coupon_id,
  BuildContext context,
  String valid_message,
  String invalid_message,
) async {
  String? user_id = FirebaseAuth.instance.currentUser?.uid;
  bool coupon_is_valid = false;

  if (user_id != null) {
    DocumentSnapshot coupon_snapshot = await FirebaseFirestore.instance
        .collection("coupons")
        .doc(coupon_id)
        .get();
    if (coupon_snapshot.exists) {
      Coupon coupon = Coupon.from_snapshot(
        coupon_snapshot.id,
        coupon_snapshot.data() as Map<String, dynamic>,
      );

      if (coupon.user_id.isEmpty || coupon.user_id == user_id) {
        int date_diference = coupon.date_expiry.compareTo(DateTime.now());
        if (!coupon.used) {
          if (date_diference > 0) {
            await coupon_snapshot.reference.update({
              "used": true,
              "user_id": user_id,
              "date_used": FieldValue.serverTimestamp(),
            });
            coupon_is_valid = true;

            await FirebaseFirestore.instance
                .collection("users")
                .doc(user_id)
                .update({
              "products_acquired": FieldValue.arrayUnion([coupon.product_id]),
            });
          }
        }
      }
    }

    ScaffoldMessenger.of(context).showMaterialBanner(
      MaterialBanner(
        content: Text(
          coupon_is_valid ? valid_message : invalid_message,
          style: TextStyle(
            color: Colors.white,
          ),
        ),
        leading: Icon(
          coupon_is_valid ? Icons.check_circle_rounded : Icons.info,
          color: Colors.white,
        ),
        backgroundColor: coupon_is_valid ? Colors.green : Colors.red,
        actions: [
          IconButton(
            icon: const Icon(
              Icons.close,
              color: Colors.white,
            ),
            onPressed: () {
              ScaffoldMessenger.of(context).hideCurrentMaterialBanner();
            },
          ),
        ],
      ),
    );

    Timer(
      Duration(seconds: coupon_is_valid ? 2 : 2),
      () {
        ScaffoldMessenger.of(context).hideCurrentMaterialBanner();
        Timer(
          Duration(milliseconds: 300),
          () {
            if (coupon_is_valid) open_screen("home/courses");
          },
        );
      },
    );
  } else {
    open_screen("login");
  }
}