event-driven
Version:
makes building event-driven-architecture easy
37 lines (31 loc) • 867 B
text/typescript
import { Schema, Document, Types, model } from 'mongoose'
export interface EventDoc extends Document {
_id: Types.ObjectId
parentIds: Types.ObjectId[]
durableName?: string
clientGroup: string
subject: string
data: any
republish: {
targetClientGroup: string
createdAt: Date
}[]
createdAt: Date
}
const EventSchema = new Schema({}, { strict: false })
export const Event = model<EventDoc>('Event', EventSchema)
export interface Event<Subjects> {
subject: Subjects
data: any
}
export const createEvent = <PublishingEvent extends Event<string>>(data: {
parentIds: Types.ObjectId[]
durableName?: string
clientGroup: string
subject: PublishingEvent['subject']
data: PublishingEvent['data']
}) => {
const event = new Event({ ...data, republish: [], createdAt: new Date() })
// event.save().catch(console.log)
return event
}