// This file was generated automatically by Qleany's generator, edit at your own risk! 
// If you do, be careful to not overwrite it when you run the generator again.
#pragma once

#include <QObject>
#include "{{ snake_name }}.h"
#include "{{ contracts_export_header_file }}" 
#include <qleany/contracts/repository/interface_generic_repository.h>
#include <qleany/contracts/repository/interface_repository.h>
#include <qleany/common/result.h>

using namespace Qleany;

namespace {{ application_cpp_domain_name }}::Contracts::Repository
{

class {{ contracts_export }} Interface{{ name }}Repository
    : public virtual Qleany::Contracts::Repository::InterfaceGenericRepository<{{ application_cpp_domain_name }}::Domain::{{ name }}>,
      public Qleany::Contracts::Repository::InterfaceRepository
{
  public:
    virtual ~Interface{{ name }}Repository()
    {
    }
    {% if foreign_entities %}
    virtual Result<{{ application_cpp_domain_name }}::Domain::{{ name }}> update({{ application_cpp_domain_name }}::Domain::{{ name }} &&entity) = 0;
    virtual Result<{{ application_cpp_domain_name }}::Domain::{{ name }}> getWithDetails(int entityId) = 0;
    {% endif %}
    {% for loader_function in loader_function_list_for_interface %}
    {{ loader_function }}
    {% endfor %}
    virtual Result<QHash<int, QList<int>>> removeInCascade(QList<int> ids) = 0;
    virtual Result<QHash<int, QList<int>>> changeActiveStatusInCascade(QList<int> ids, bool active) = 0;


};
} // namespace {{ application_cpp_domain_name }}::Contracts::Repository