Evet çoğu kısmını düşüncede halletmişsiniz. Ayrı bir tablo olacak, benzersiz kodlar olacak promo code diye geçer, bunların bir de yaşam süreleri olur. Aynı kodu sadece bir kullanıcı kullanacaksa (indirim kodları örneğin birden fazla kullanıcı tarafından kullanılabilir, o yüzden kupon-kullanıcı ilişkisini de ayrı tabloda tutarsanız daha iyi olur) tabloda bir user_id tutabilirsiniz. Kullanılma tarihini de tutarsınız, o tarih null değilse kullanılmış demektir şeklinde ayarlarsınız.
Ben hiç paket kullanmadım ama şuna bakabilirsiniz:
https://github.com/zgabievi/laravel-promocodes