__PACKAGE__

import io.getquill.NamingStrategy
__SQL_IDIOM_IMPORT__
__MONAD_IMPORT__
__BEAN_CLASS_IMPORT__
__ID_CLASS_IMPORT__
__REPOSITORY_TRAIT_IMPORT__
__REPOSITORY_MACRO_TRAIT_IMPORT__
__REPOSITORY_IMPORT__
__EXECUTION_CONTEXT_IMPORT__

final class __REPOSITORY_NAME____ALIAS_GENERIC_DECLARATION__(
    protected val context: __CONTEXT_ALIAS__[__GENERIC_DECLARATION__],
    protected val tableName: String = "__TABLE_NAME__"
)
  extends __REPOSITORY_TRAIT_SIMPLE_NAME__ {

  protected def dynamicSchema: context.DynamicEntityQuery[__BEAN__] = dSchema

  private implicit val dSchema: context.DynamicEntityQuery[__BEAN__] = {
      __IMPORT_CONTEXT__
      context.dynamicQuerySchema[__BEAN__](tableName__COLUMN_MAPPING__)
    }

  override def all__EXECUTION_CONTEXT__: __MONAD__[Seq[__BEAN__]] =
__TRY_START__
      context.all[__BEAN__]
__TRY_END__

  override def create(entity: __BEAN__, generateId: Boolean = true)__EXECUTION_CONTEXT__: __MONAD__[__ID__] =
__TRY_START__
        if (generateId) {
          context.createAndGenerateId[__ID__, __BEAN__](entity)
        } else {
          context.create[__ID__, __BEAN__](entity)
        }
__TRY_END__

  override def createAndRead(entity: __BEAN__, generateId: Boolean = true)__EXECUTION_CONTEXT__: __MONAD__[__BEAN__] =
__TRY_START__
  __CONTEXT_TRANSACTION_START__
        if (generateId) {
          context.createWithGenerateIdAndRead[__ID__, __BEAN__](entity)
        } else {
          context.createAndRead[__ID__, __BEAN__](entity)
        }
  __CONTEXT_TRANSACTION_END__
__TRY_END__

  override def createOrUpdate(entity: __BEAN__, generateId: Boolean = true)__EXECUTION_CONTEXT__: __MONAD__[__ID__] =
__TRY_START__
  __CONTEXT_TRANSACTION_START__
          if (generateId) {
            context.createAndGenerateIdOrUpdate[__ID__, __BEAN__](entity)
          } else {
             context.createOrUpdate[__ID__, __BEAN__](entity)
          }
  __CONTEXT_TRANSACTION_END__
__TRY_END__

  override def createOrUpdateAndRead(entity: __BEAN__, generateId: Boolean = true)__EXECUTION_CONTEXT__: __MONAD__[__BEAN__] =
__TRY_START__
  __CONTEXT_TRANSACTION_START__
          if (generateId) {
            context.createWithGenerateIdOrUpdateAndRead[__ID__, __BEAN__](entity)
          } else {
             context.createOrUpdateAndRead[__ID__, __BEAN__](entity)
          }
  __CONTEXT_TRANSACTION_END__
__TRY_END__

  override def read(id: __ID__)__EXECUTION_CONTEXT__: __MONAD__[Option[__BEAN__]] =
__TRY_START__
      context.read[__ID__, __BEAN__](id)
__TRY_END__

  override def readUnsafe(id: __ID__)__EXECUTION_CONTEXT__: __MONAD__[__BEAN__] =
__TRY_START__
        context.readUnsafe[__ID__, __BEAN__](id)
__TRY_END__

  override def update(entity: __BEAN__)__EXECUTION_CONTEXT__: __MONAD__[__UPDATE__] =
__TRY_START__
      context.update[__ID__, __BEAN__](entity)
__TRY_END__

  override def updateAndRead(entity: __BEAN__)__EXECUTION_CONTEXT__: __MONAD__[__BEAN__] =
__TRY_START__
  __CONTEXT_TRANSACTION_START__
        context.updateAndRead[__ID__, __BEAN__](entity)
  __CONTEXT_TRANSACTION_END__
__TRY_END__

  override def delete(id: __ID__)__EXECUTION_CONTEXT__: __MONAD__[__UPDATE__] =
__TRY_START__
      context.delete[__ID__, __BEAN__](id)
__TRY_END__

   override def deleteAll__EXECUTION_CONTEXT__: __MONAD__[__UPDATE__] =
   __TRY_START__
         context.deleteAll
  __TRY_END__

}
