core

package
v1.1.4-beta Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 31, 2025 License: GPL-3.0 Imports: 2 Imported by: 0

Documentation

Overview

Package core contains domain events for the example: Book circulation in a public library

This package implements domain events following proper domain-driven design patterns, avoiding CRUD-style antipatterns. Events represent meaningful business occurrences like BookCopyAddedToCirculation and BookCopyLentToReader rather than generic create/update operations.

All domain events implement the DomainEvent interface with EventType() and HasOccurredAt() methods for event sourcing integration.

In Domain-Driven Design or Hexagonal Architecture terminology, this would be called the 'domain' layer.

Index

Constants

View Source
const BookCopyAddedToCirculationEventType = "BookCopyAddedToCirculation"

BookCopyAddedToCirculationEventType is the event type identifier

View Source
const BookCopyLentToReaderEventType = "BookCopyLentToReader"

BookCopyLentToReaderEventType is the event type identifier

View Source
const BookCopyRemovedFromCirculationEventType = "BookCopyRemovedFromCirculation"

BookCopyRemovedFromCirculationEventType is the event type identifier

View Source
const BookCopyReturnedByReaderEventType = "BookCopyReturnedByReader"

BookCopyReturnedByReaderEventType is the event type identifier

View Source
const SomethingHasHappenedEventTypePrefix = "SomethingHasHappened"

SomethingHasHappenedEventTypePrefix is the prefix for dynamic event types

Variables

This section is empty.

Functions

This section is empty.

Types

type BookCopyAddedToCirculation

type BookCopyAddedToCirculation struct {
	BookID          BookIDString
	ISBN            ISBNString
	Title           string
	Authors         string
	Edition         string
	Publisher       string
	PublicationYear uint
	OccurredAt      OccurredAtTS
}

BookCopyAddedToCirculation represents when a book copy is added to library circulation

func (BookCopyAddedToCirculation) EventType

func (e BookCopyAddedToCirculation) EventType() string

EventType returns the event type identifier

func (BookCopyAddedToCirculation) HasOccurredAt

func (e BookCopyAddedToCirculation) HasOccurredAt() time.Time

HasOccurredAt returns when this event occurred

type BookCopyLentToReader

type BookCopyLentToReader struct {
	BookID     BookIDString
	ReaderID   ReaderIDString
	OccurredAt OccurredAtTS
}

BookCopyLentToReader represents when a book copy is lent to a reader

func (BookCopyLentToReader) EventType

func (e BookCopyLentToReader) EventType() string

EventType returns the event type identifier

func (BookCopyLentToReader) HasOccurredAt

func (e BookCopyLentToReader) HasOccurredAt() time.Time

HasOccurredAt returns when this event occurred

type BookCopyRemovedFromCirculation

type BookCopyRemovedFromCirculation struct {
	BookID     BookIDString
	OccurredAt OccurredAtTS
}

BookCopyRemovedFromCirculation represents when a book copy is removed from library circulation

func (BookCopyRemovedFromCirculation) EventType

func (e BookCopyRemovedFromCirculation) EventType() string

EventType returns the event type identifier

func (BookCopyRemovedFromCirculation) HasOccurredAt

func (e BookCopyRemovedFromCirculation) HasOccurredAt() time.Time

HasOccurredAt returns when this event occurred

type BookCopyReturnedByReader

type BookCopyReturnedByReader struct {
	BookID     BookIDString
	ReaderID   ReaderIDString
	OccurredAt OccurredAtTS
}

BookCopyReturnedByReader represents when a book copy is returned by a reader

func (BookCopyReturnedByReader) EventType

func (e BookCopyReturnedByReader) EventType() string

EventType returns the event type identifier

func (BookCopyReturnedByReader) HasOccurredAt

func (e BookCopyReturnedByReader) HasOccurredAt() time.Time

HasOccurredAt returns when this event occurred

type BookIDString

type BookIDString = string

BookIDString represents a book identifier

type DomainEvent

type DomainEvent interface {
	// EventType returns the string identifier for this event type
	EventType() string
	// HasOccurredAt returns when this event occurred
	HasOccurredAt() time.Time
}

DomainEvent represents a business event that has occurred in the domain

func BuildBookCopyAddedToCirculation

func BuildBookCopyAddedToCirculation(
	bookID uuid.UUID,
	isbn string,
	title string,
	authors string,
	edition string,
	publisher string,
	publicationYear uint,
	occurredAt time.Time,
) DomainEvent

BuildBookCopyAddedToCirculation creates a new BookCopyAddedToCirculation event

func BuildBookCopyLentToReader

func BuildBookCopyLentToReader(bookID uuid.UUID, readerID uuid.UUID, occurredAt time.Time) DomainEvent

BuildBookCopyLentToReader creates a new BookCopyLentToReader event

func BuildBookCopyRemovedFromCirculation

func BuildBookCopyRemovedFromCirculation(bookID uuid.UUID, occurredAt time.Time) DomainEvent

BuildBookCopyRemovedFromCirculation creates a new BookCopyRemovedFromCirculation event

func BuildBookCopyReturnedFromReader

func BuildBookCopyReturnedFromReader(bookID uuid.UUID, readerID uuid.UUID, occurredAt time.Time) DomainEvent

BuildBookCopyReturnedFromReader creates a new BookCopyReturnedByReader event

type DomainEvents

type DomainEvents = []DomainEvent

DomainEvents is a slice of DomainEvent instances

type ISBNString

type ISBNString = string

ISBNString represents an ISBN identifier

type OccurredAtTS

type OccurredAtTS = time.Time

OccurredAtTS represents when an event occurred

func ToOccurredAt

func ToOccurredAt(t time.Time) OccurredAtTS

ToOccurredAt converts a time to OccurredAtTS with UTC normalization and microsecond precision

type ProducedNewEventToAppendBool

type ProducedNewEventToAppendBool = bool

ProducedNewEventToAppendBool indicates whether a new event has been produced and is ready to be appended.

type ReaderIDString

type ReaderIDString = string

ReaderIDString represents a reader identifier

type SomethingHasHappened

type SomethingHasHappened struct {
	ID               string
	SomeInformation  string
	OccurredAt       OccurredAtTS
	DynamicEventType string
}

SomethingHasHappened represents a generic event with dynamic event type

func BuildSomethingHasHappened

func BuildSomethingHasHappened(
	id string,
	someInformation string,
	occurredAt time.Time,
	dynamicEventType string,
) SomethingHasHappened

BuildSomethingHasHappened creates a new SomethingHasHappened event with dynamic type

func (SomethingHasHappened) EventType

func (e SomethingHasHappened) EventType() string

EventType returns the dynamic event type identifier

func (SomethingHasHappened) HasOccurredAt

func (e SomethingHasHappened) HasOccurredAt() time.Time

HasOccurredAt returns when this event occurred

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL