Product x Pricing x Dates x Discount - how to structure data types?

Hi, I wanted to valid my thoughts on the storage of pricing(s) for products.

I’m building a coliving & coworking space app and here are types of “products” and how we sell them.

Products:

  1. Dorm bed
  2. Private Room
  3. Work desk
  4. Event

Sales Strategy

  1. Each product on its own
  2. Bundled, e.g., bed + desk, or bed + events
  3. Package, e.g. 3-night stay in dorm for X amount
  4. Pricing would vary depending on seasons, certain dates, or exclusive order for a specific buyer.

So I’ve tried a few different things:

  1. storing pricing under products (con: it’s not flexible enough, a lot of calculations would be done on workflow or custom states, which is easy to have bugs or overlook when changing page designs)
  2. storing pricing separately from products (con: cross referencing gets really complicated and also easy to overlook, especially in backend workflows)
  3. promo code is saved as another data type, it’s tricky to avoid a package being purchased with a promo code, especially with different dates/seasonal pricing/discounts in the equation

Thoughts on this?
Much appreciate it.