Documentation
¶
Overview ¶
Example (GetAllEvents) ¶
// Given
shortuuid.SetRand(100)
inMemoryStore := inmemorystore.New(
inmemorystore.WithClock(sequentialclock.New()),
)
api := rangedbapi.New(rangedbapi.WithStore(inMemoryStore))
server := httptest.NewServer(api)
defer server.Close()
PrintError(inMemoryStore.Save(
&rangedb.EventRecord{Event: rangedbtest.ThingWasDone{ID: "605f20348fb940e386c171d51c877bf1", Number: 100}},
))
PrintError(inMemoryStore.Save(
&rangedb.EventRecord{Event: rangedbtest.AnotherWasComplete{ID: "a095086e52bc4617a1763a62398cd645"}},
))
url := fmt.Sprintf("%s/events.json", server.URL)
// When
response, err := http.Get(url)
PrintError(err)
defer Close(response.Body)
body, err := ioutil.ReadAll(response.Body)
PrintError(err)
fmt.Println(jsontools.PrettyJSON(body))
Output: [ { "aggregateType": "thing", "aggregateID": "605f20348fb940e386c171d51c877bf1", "globalSequenceNumber": 0, "sequenceNumber": 0, "insertTimestamp": 0, "eventID": "d2ba8e70072943388203c438d4e94bf3", "eventType": "ThingWasDone", "data": { "id": "605f20348fb940e386c171d51c877bf1", "number": 100 }, "metadata": null }, { "aggregateType": "another", "aggregateID": "a095086e52bc4617a1763a62398cd645", "globalSequenceNumber": 1, "sequenceNumber": 0, "insertTimestamp": 1, "eventID": "99cbd88bbcaf482ba1cc96ed12541707", "eventType": "AnotherWasComplete", "data": { "id": "a095086e52bc4617a1763a62398cd645" }, "metadata": null } ]
Example (GetEventsByAggregateType) ¶
// Given
shortuuid.SetRand(100)
inMemoryStore := inmemorystore.New(
inmemorystore.WithClock(sequentialclock.New()),
)
api := rangedbapi.New(rangedbapi.WithStore(inMemoryStore))
server := httptest.NewServer(api)
defer server.Close()
PrintError(inMemoryStore.Save(
&rangedb.EventRecord{Event: rangedbtest.ThingWasDone{ID: "605f20348fb940e386c171d51c877bf1", Number: 100}},
))
PrintError(inMemoryStore.Save(
&rangedb.EventRecord{Event: rangedbtest.AnotherWasComplete{ID: "a095086e52bc4617a1763a62398cd645"}},
))
url := fmt.Sprintf("%s/events/thing.json", server.URL)
// When
response, err := http.Get(url)
PrintError(err)
defer Close(response.Body)
body, err := ioutil.ReadAll(response.Body)
PrintError(err)
fmt.Println(jsontools.PrettyJSON(body))
Output: [ { "aggregateType": "thing", "aggregateID": "605f20348fb940e386c171d51c877bf1", "globalSequenceNumber": 0, "sequenceNumber": 0, "insertTimestamp": 0, "eventID": "d2ba8e70072943388203c438d4e94bf3", "eventType": "ThingWasDone", "data": { "id": "605f20348fb940e386c171d51c877bf1", "number": 100 }, "metadata": null } ]
Example (GetEventsByAggregateTypes) ¶
// Given
shortuuid.SetRand(100)
inMemoryStore := inmemorystore.New(
inmemorystore.WithClock(sequentialclock.New()),
)
api := rangedbapi.New(rangedbapi.WithStore(inMemoryStore))
server := httptest.NewServer(api)
defer server.Close()
PrintError(inMemoryStore.Save(
&rangedb.EventRecord{Event: rangedbtest.ThingWasDone{ID: "605f20348fb940e386c171d51c877bf1", Number: 100}},
))
PrintError(inMemoryStore.Save(
&rangedb.EventRecord{Event: rangedbtest.AnotherWasComplete{ID: "a095086e52bc4617a1763a62398cd645"}},
))
url := fmt.Sprintf("%s/events/thing,another.json", server.URL)
// When
response, err := http.Get(url)
PrintError(err)
defer Close(response.Body)
body, err := ioutil.ReadAll(response.Body)
PrintError(err)
fmt.Println(jsontools.PrettyJSON(body))
Output: [ { "aggregateType": "thing", "aggregateID": "605f20348fb940e386c171d51c877bf1", "globalSequenceNumber": 0, "sequenceNumber": 0, "insertTimestamp": 0, "eventID": "d2ba8e70072943388203c438d4e94bf3", "eventType": "ThingWasDone", "data": { "id": "605f20348fb940e386c171d51c877bf1", "number": 100 }, "metadata": null }, { "aggregateType": "another", "aggregateID": "a095086e52bc4617a1763a62398cd645", "globalSequenceNumber": 1, "sequenceNumber": 0, "insertTimestamp": 1, "eventID": "99cbd88bbcaf482ba1cc96ed12541707", "eventType": "AnotherWasComplete", "data": { "id": "a095086e52bc4617a1763a62398cd645" }, "metadata": null } ]
Example (GetEventsByStream) ¶
// Given
shortuuid.SetRand(100)
inMemoryStore := inmemorystore.New(
inmemorystore.WithClock(sequentialclock.New()),
)
api := rangedbapi.New(rangedbapi.WithStore(inMemoryStore))
server := httptest.NewServer(api)
defer server.Close()
PrintError(inMemoryStore.Save(
&rangedb.EventRecord{Event: rangedbtest.ThingWasDone{ID: "605f20348fb940e386c171d51c877bf1", Number: 100}},
&rangedb.EventRecord{Event: rangedbtest.ThingWasDone{ID: "605f20348fb940e386c171d51c877bf1", Number: 200}},
))
PrintError(inMemoryStore.Save(
&rangedb.EventRecord{Event: rangedbtest.AnotherWasComplete{ID: "a095086e52bc4617a1763a62398cd645"}},
))
url := fmt.Sprintf("%s/events/thing/605f20348fb940e386c171d51c877bf1.json", server.URL)
// When
response, err := http.Get(url)
PrintError(err)
defer Close(response.Body)
body, err := ioutil.ReadAll(response.Body)
PrintError(err)
fmt.Println(jsontools.PrettyJSON(body))
Output: [ { "aggregateType": "thing", "aggregateID": "605f20348fb940e386c171d51c877bf1", "globalSequenceNumber": 0, "sequenceNumber": 0, "insertTimestamp": 0, "eventID": "d2ba8e70072943388203c438d4e94bf3", "eventType": "ThingWasDone", "data": { "id": "605f20348fb940e386c171d51c877bf1", "number": 100 }, "metadata": null }, { "aggregateType": "thing", "aggregateID": "605f20348fb940e386c171d51c877bf1", "globalSequenceNumber": 1, "sequenceNumber": 1, "insertTimestamp": 1, "eventID": "99cbd88bbcaf482ba1cc96ed12541707", "eventType": "ThingWasDone", "data": { "id": "605f20348fb940e386c171d51c877bf1", "number": 200 }, "metadata": null } ]
Example (GetEventsByStreamNdJson) ¶
// Given
shortuuid.SetRand(100)
inMemoryStore := inmemorystore.New(
inmemorystore.WithClock(sequentialclock.New()),
)
api := rangedbapi.New(rangedbapi.WithStore(inMemoryStore))
server := httptest.NewServer(api)
defer server.Close()
PrintError(inMemoryStore.Save(
&rangedb.EventRecord{Event: rangedbtest.ThingWasDone{ID: "605f20348fb940e386c171d51c877bf1", Number: 100}},
&rangedb.EventRecord{Event: rangedbtest.ThingWasDone{ID: "605f20348fb940e386c171d51c877bf1", Number: 200}},
))
PrintError(inMemoryStore.Save(
&rangedb.EventRecord{Event: rangedbtest.AnotherWasComplete{ID: "a095086e52bc4617a1763a62398cd645"}},
))
url := fmt.Sprintf("%s/events/thing/605f20348fb940e386c171d51c877bf1.ndjson", server.URL)
// When
response, err := http.Get(url)
PrintError(err)
defer Close(response.Body)
body, err := ioutil.ReadAll(response.Body)
PrintError(err)
fmt.Println(string(body))
Output: {"aggregateType":"thing","aggregateID":"605f20348fb940e386c171d51c877bf1","globalSequenceNumber":0,"sequenceNumber":0,"insertTimestamp":0,"eventID":"d2ba8e70072943388203c438d4e94bf3","eventType":"ThingWasDone","data":{"id":"605f20348fb940e386c171d51c877bf1","number":100},"metadata":null} {"aggregateType":"thing","aggregateID":"605f20348fb940e386c171d51c877bf1","globalSequenceNumber":1,"sequenceNumber":1,"insertTimestamp":1,"eventID":"99cbd88bbcaf482ba1cc96ed12541707","eventType":"ThingWasDone","data":{"id":"605f20348fb940e386c171d51c877bf1","number":200},"metadata":null}
Example (OptimisticSaveEvents) ¶
// Given
inMemoryStore := inmemorystore.New(
inmemorystore.WithClock(sequentialclock.New()),
)
api := rangedbapi.New(rangedbapi.WithStore(inMemoryStore))
server := httptest.NewServer(api)
defer server.Close()
const requestBody = `[
{
"eventType": "ThingWasDone",
"data":{
"id": "141b39d2b9854f8093ef79dc47dae6af",
"number": 100
},
"metadata":null
},
{
"eventType": "ThingWasDone",
"data":{
"id": "141b39d2b9854f8093ef79dc47dae6af",
"number": 200
},
"metadata":null
}
]`
url := fmt.Sprintf("%s/save-events/thing/141b39d2b9854f8093ef79dc47dae6af", server.URL)
request, err := http.NewRequest(http.MethodPost, url, strings.NewReader(requestBody))
PrintError(err)
request.Header.Set("Content-Type", "application/json")
request.Header.Set("ExpectedStreamSequenceNumber", "0")
client := http.DefaultClient
// When
response, err := client.Do(request)
PrintError(err)
defer Close(response.Body)
body, err := ioutil.ReadAll(response.Body)
PrintError(err)
fmt.Println(string(body))
Output: {"status":"OK"}
Example (OptimisticSaveEvents_failure) ¶
// Given
inMemoryStore := inmemorystore.New(
inmemorystore.WithClock(sequentialclock.New()),
)
api := rangedbapi.New(rangedbapi.WithStore(inMemoryStore))
server := httptest.NewServer(api)
defer server.Close()
const requestBody = `[
{
"eventType": "ThingWasDone",
"data":{
"id": "141b39d2b9854f8093ef79dc47dae6af",
"number": 100
},
"metadata":null
},
{
"eventType": "ThingWasDone",
"data":{
"id": "141b39d2b9854f8093ef79dc47dae6af",
"number": 200
},
"metadata":null
}
]`
url := fmt.Sprintf("%s/save-events/thing/141b39d2b9854f8093ef79dc47dae6af", server.URL)
request, err := http.NewRequest(http.MethodPost, url, strings.NewReader(requestBody))
PrintError(err)
request.Header.Set("Content-Type", "application/json")
request.Header.Set("ExpectedStreamSequenceNumber", "2")
client := http.DefaultClient
// When
response, err := client.Do(request)
PrintError(err)
defer Close(response.Body)
body, err := ioutil.ReadAll(response.Body)
PrintError(err)
fmt.Println(string(body))
Output: {"status":"Failed", "message": "unexpected sequence number: 2, next: 0"}
Example (SaveEvent) ¶
// Given
inMemoryStore := inmemorystore.New(
inmemorystore.WithClock(sequentialclock.New()),
)
api := rangedbapi.New(rangedbapi.WithStore(inMemoryStore))
server := httptest.NewServer(api)
defer server.Close()
const requestBody = `[
{
"eventType": "ThingWasDone",
"data":{
"id": "141b39d2b9854f8093ef79dc47dae6af",
"number": 100
},
"metadata":null
},
{
"eventType": "ThingWasDone",
"data":{
"id": "141b39d2b9854f8093ef79dc47dae6af",
"number": 200
},
"metadata":null
}
]`
url := fmt.Sprintf("%s/save-events/thing/141b39d2b9854f8093ef79dc47dae6af", server.URL)
// When
response, err := http.Post(url, "application/json", strings.NewReader(requestBody))
PrintError(err)
defer Close(response.Body)
body, err := ioutil.ReadAll(response.Body)
PrintError(err)
fmt.Println(string(body))
Output: {"status":"OK"}
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Option ¶
type Option func(*api)
Option defines functional option parameters for api.
func WithBaseUri ¶
WithBaseUri is a functional option to inject the base URI for use in API links.
func WithSnapshotStore ¶ added in v0.4.0
func WithSnapshotStore(snapshotStore projection.SnapshotStore) Option
WithSnapshotStore is a functional option to inject a SnapshotStore.
Click to show internal directories.
Click to hide internal directories.