Packages
eventstore
1.2.1
1.4.8
1.4.7
1.4.6
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.3
1.2.2
1.2.1
1.2.0
1.1.0
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc.0
0.17.0
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.14.0
0.14.0-rc.0
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.11.0-rc.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.1
0.2.0
0.1.0
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Event store using PostgreSQL for persistence.
Current section
Files
Jump to
Current section
Files
lib/event_store/streams/stream_info.ex
defmodule EventStore.Streams.StreamInfo do
alias EventStore.Storage
alias EventStore.Streams.StreamInfo
defstruct [:stream_uuid, :stream_id, :deleted_at, stream_version: 0]
def new(stream_uuid, stream_id, stream_version, deleted_at) do
%StreamInfo{
stream_uuid: stream_uuid,
stream_id: stream_id,
stream_version: stream_version,
deleted_at: deleted_at
}
end
def read(conn, stream_uuid, expected_version, opts) do
with {:ok, stream_id, stream_version, deleted_at} <-
Storage.stream_info(conn, stream_uuid, opts),
stream_info = new(stream_uuid, stream_id, stream_version, deleted_at),
:ok <- validate_expected_version(stream_info, expected_version) do
{:ok, stream_info}
end
end
defp validate_expected_version(%StreamInfo{} = stream, expected_version) do
%StreamInfo{stream_id: stream_id, stream_version: stream_version, deleted_at: deleted_at} =
stream
cond do
not is_nil(deleted_at) ->
{:error, :stream_deleted}
is_nil(stream_id) and expected_version in [0, :any_version, :no_stream] ->
:ok
is_nil(stream_id) and expected_version == :stream_exists ->
{:error, :stream_not_found}
not is_nil(stream_id) and expected_version in [stream_version, :any_version, :stream_exists] ->
:ok
not is_nil(stream_id) and stream_version == 0 and expected_version == :no_stream ->
:ok
not is_nil(stream_id) and stream_version != 0 and expected_version == :no_stream ->
{:error, :stream_exists}
true ->
{:error, :wrong_expected_version}
end
end
end