import { PrismaClient, {{MODEL_NAME}} } from '@prisma/client'
import { {{MODEL_NAME}}SavePayload, {{MODEL_NAME}}UpdatePayload } from './{{MODULE_NAME}}-interfaces'

export default class {{MODEL_NAME}}Repository {
  constructor(private readonly client: PrismaClient) {}

  public all(): Promise<Array<{{MODEL_NAME}}>> {
    return this.client.{{MODULE_NAME}}.findMany({
    })
  }

  public get(id: number): Promise<{{MODEL_NAME}} | null> {
    return this.client.{{MODULE_NAME}}.findFirst({
      where: { id },
    })
  }

  public save(data: {{MODEL_NAME}}SavePayload): Promise<{{MODEL_NAME}}> { 
    return this.client.{{MODULE_NAME}}.create({
      data,
    })
  }

  public update(id: number, data: {{MODEL_NAME}}UpdatePayload): Promise<{{MODEL_NAME}}> {
    return this.client.{{MODULE_NAME}}.update({
      where: { id },
      data,
    })
  }

  public delete(id: number): Promise<{{MODEL_NAME}}> {
    return this.client.{{MODULE_NAME}}.delete({
      where: { id },
    })
  }
}
