     end
   end
 
-  @spec update(HELL.PK.t, File.update_params) :: {:ok, File.t} | {:error, :notfound | Ecto.Changeset.t}
+  @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, Ecto.Changeset.t}
+  @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, Ecto.Changeset.t}
+  @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


    :ok
  end
end

  import Ecto.Query, only: [where: 3]

  @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}
