@@ -2,6 +2,7 @@ package subscription
22
33import (
44 "context"
5+ "errors"
56
67 "github.com/openmeterio/openmeter/openmeter/event/metadata"
78 "github.com/openmeterio/openmeter/openmeter/session"
@@ -194,3 +195,48 @@ func (s UpdatedEvent) EventMetadata() metadata.EventMetadata {
194195func (s UpdatedEvent ) Validate () error {
195196 return s .UpdatedView .Validate (true )
196197}
198+
199+ type SubscriptionSyncEvent struct {
200+ Subscription Subscription `json:"subscription"`
201+ }
202+
203+ func NewSubscriptionSyncEvent (ctx context.Context , sub Subscription ) SubscriptionSyncEvent {
204+ return SubscriptionSyncEvent {
205+ Subscription : sub ,
206+ }
207+ }
208+
209+ var (
210+ _ marshaler.Event = SubscriptionSyncEvent {}
211+
212+ subscriptionSyncEventName = metadata .GetEventName (metadata.EventType {
213+ Subsystem : EventSubsystem ,
214+ Name : "subscription.sync" ,
215+ Version : "v1" ,
216+ })
217+ )
218+
219+ func (s SubscriptionSyncEvent ) EventName () string {
220+ return subscriptionSyncEventName
221+ }
222+
223+ func (s SubscriptionSyncEvent ) Validate () error {
224+ var errs []error
225+
226+ if err := s .Subscription .NamespacedID .Validate (); err != nil {
227+ errs = append (errs , err )
228+ }
229+
230+ if s .Subscription .CustomerId == "" {
231+ errs = append (errs , errors .New ("customer id is required" ))
232+ }
233+
234+ return errors .Join (errs ... )
235+ }
236+
237+ func (s SubscriptionSyncEvent ) EventMetadata () metadata.EventMetadata {
238+ return metadata.EventMetadata {
239+ Source : metadata .ComposeResourcePath (s .Subscription .Namespace , metadata .EntitySubscription , s .Subscription .ID ),
240+ Subject : metadata .ComposeResourcePath (s .Subscription .Namespace , metadata .EntityCustomer , s .Subscription .CustomerId ),
241+ }
242+ }
0 commit comments