Packages

Mongo Agile Library for Elixir, with a micro-language integrated query

Current section

Files

Jump to
mongo_agile lib examples schema schema_model.ex
Raw

lib/examples/schema/schema_model.ex

defmodule MongoAgile.Examples.Schema.SchemaModel do
@moduledoc """
SchemaModel Example of model, have some example of using before and after methods.
* Schema versioning
* timestamp
"""
use MapSchema,
schema: %{
"_id" => :mongo_id,
"schema_version" => :integer,
"name" => :string,
"timestamp" => %{
"created" => :integer,
"last_updated" => :integer
}
},
custom_types: %{
:mongo_id => MongoAgile.MapSchema.IdObjectType
}
@schema_version 2
def schema_version, do: @schema_version
alias MongoAgile.Examples.Schema.SchemaController
def versioning(doc) do
if doc["schema_version"] == @schema_version do
{:versioning, "ok", doc}
else
# Update version
doc = put_schema_version(doc, @schema_version)
Task.start(fn() ->
SchemaController.run_query("replace", [id: doc["_id"], doc: doc])
end)
{:versioning, "updating", doc}
end
end
def timestamp_created(doc) do
now = System.os_time(:millisecond)
doc
|> put_timestamp_created(now)
end
def timestamp_updated(doc) do
now = System.os_time(:millisecond)
doc
|> put_timestamp_last_updated(now)
end
end