Skip to content

Commit

Permalink
feat: Create lenra data service (#168)
Browse files Browse the repository at this point in the history
  • Loading branch information
pichoemr authored Mar 25, 2022
1 parent 9669bea commit db27775
Show file tree
Hide file tree
Showing 5 changed files with 580 additions and 4 deletions.
59 changes: 59 additions & 0 deletions apps/lenra/lib/lenra/services/data_service.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
defmodule Lenra.DataServices do
@moduledoc """
The service that manages application data.
"""
import Ecto.Query, only: [from: 2]

alias Lenra.Repo
alias ApplicationRunner.{Data, DataServices, Datastore, UserData}

def create(environment_id, params) do
environment_id
|> DataServices.create(params)
|> Repo.transaction()
end

def create_and_link(user_id, environment_id, params) do
environment_id
|> DataServices.create(params)
|> Ecto.Multi.run(:user_data, fn repo, %{inserted_data: %Data{} = data} ->
repo.insert(UserData.new(%{user_id: user_id, data_id: data.id}))
end)
|> Repo.transaction()
end

def update(data_id, params) do
data_id
|> DataServices.update(params)
|> Repo.transaction()
end

def delete(data_id) do
data_id
|> DataServices.delete()
|> Repo.transaction()
end

def get_old_data(user_id, environment_id) do
Repo.one(
from(d in Data,
join: u in UserData,
on: d.id == u.data_id,
join: ds in Datastore,
on: ds.id == d.datastore_id,
where: u.user_id == ^user_id and ds.environment_id == ^environment_id and ds.name == "UserDatas",
select: d
)
)
end

def upsert_data(user_id, environment_id, data) do
case get_old_data(user_id, environment_id) do
nil ->
create_and_link(user_id, environment_id, data)

old_data_id ->
update(old_data_id.id, data)
end
end
end
5 changes: 3 additions & 2 deletions apps/lenra/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,15 @@ defmodule Lenra.MixProject do
elixirc_paths: elixirc_paths(Mix.env()),
start_permanent: Mix.env() == :prod,
test_coverage: [tool: ExCoveralls],
deps: deps()
deps: deps(),
xref: [exclude: [ApplicationRunner]]
]
end

def application do
[
mod: {Lenra.Application, []},
extra_applications: [:logger, :runtime_tools, :guardian, :bamboo]
extra_applications: [:logger, :runtime_tools, :guardian, :bamboo, :application_runner]
]
end

Expand Down
Loading

0 comments on commit db27775

Please sign in to comment.