\section{Repository} \begin{frame}{Repository minta lényege} \begin{block}{Mire jó?} \begin{itemize} \item Elválasztja az adat-hozzáférést az üzleti logikától \item Egységes API az adatok kezelésére \item Könnyebben tesztelhető kód \end{itemize} \end{block} \end{frame} \begin{frame}{IRepository és konkret repository} \begin{block}{IRepository} \begin{itemize} \item Absztrakt interfész CRUD műveletekkel \item Pl. \texttt{findAll}, \texttt{findById}, \texttt{create}, \texttt{update}, \texttt{delete} \end{itemize} \end{block} \begin{exampleblock}{Konkret repository} Az interfész implementációja (pl. \texttt{UserRepository}). \end{exampleblock} \end{frame} \begin{frame}[fragile]{IRepository példa (TypeScript)} \begin{lstlisting}[language=JavaScript] interface IRepository { findAll(): Promise; findById(id: number): Promise; create(data: T): Promise; update(id: number, data: Partial): Promise; delete(id: number): Promise; } \end{lstlisting} \end{frame} \begin{frame}[fragile]{Prisma repository példa} \begin{block}{Prisma Client} A Prisma Client kezeli a kapcsolatot és az SQL generálást. \end{block} \begin{lstlisting}[language=JavaScript] class UserRepository implements IRepository { constructor(private prisma: PrismaClient) {} findAll() { return this.prisma.user.findMany(); } findById(id: number) { return this.prisma.user.findUnique({ where: { id } }); } \end{lstlisting} \end{frame} \begin{frame}[fragile]{Prisma repository példa folytatás} \begin{lstlisting}[language=JavaScript] create(data: User) { return this.prisma.user.create({ data }); } update(id: number, data: Partial) { return this.prisma.user.update({ where: { id }, data }); } async delete(id: number) { await this.prisma.user.delete({ where: { id } }); } } \end{lstlisting} \end{frame} \begin{frame}{Mikor hasznos?} \begin{itemize} \item Ha több adatforrás van (SQL, API, cache) \item Ha szeretnél változtatható adat-hozzáférést \item Ha szükség van mock-olható IRepositories-re tesztekhez \end{itemize} \end{frame}