 
   import Ecto.Query, only: [where: 3]
 
-  @spec create(File.creation_params) :: {:ok, File.t} | {:error, Ecto.Changeset.t}
+  @spec create(File.creation_params) ::
+    {:ok, File.t}
+    | {:error, :file_exists | Ecto.Changeset.t}
   def create(params) do
     params
     |> File.create_changeset()
     |> Repo.insert()
+    |> parse_errors()
   end
 
   @spec find(HELL.PK.t) :: {:ok, File.t} | {:error, :notfound}


    :ok
  end
end
    end
  end

  @spec update(HELL.PK.t, v.update_params) ::
    {:ok, File.t}
    | {:error, :file_exists | :notfound | Ecto.Changeset.t}
  def update(file_id, params) do
    with {:ok, file} <- find(file_id) do
      file
      |> File.update_changeset(params)
      |> Repo.update()
      |> parse_errors()
    end
  end

  @spec move(File.t, String.t) ::
    {:ok, File.t}
    | {:error, :file_exists | Ecto.Changeset.t}
  def move(file, file_path) do
    file
    |> File.update_changeset(%{file_path: file_path})
    |> Repo.update()
    |> parse_errors()
  end

  @spec rename(File.t, String.t) ::
    {:ok, File.t}
    | {:error, :file_exists | Ecto.Changeset.t}
  def rename(file, file_name) do
    file
    |> File.update_changeset(%{name: file_name})
    |> Repo.update()
    |> parse_errors()
  end

  @spec delete(HELL.PK.t) :: no_return
