This commit is contained in:
magdo
2026-02-17 21:17:42 +01:00
parent d90a6ed735
commit af57733506
17 changed files with 4194 additions and 59 deletions
+54 -10
View File
@@ -4,14 +4,16 @@
\begin{block}{Data Transfer Object}
\begin{itemize}
\item Adatok szállítására szolgáló objektum
\item Elválasztja az adatbázis sémát a kliens felőli interfésztől
\item Elválasztja az adatbázis sémát\\
a kliens felőli interfésztől
\item Kontroll az átadott adatok felett
\item Validáció és transzformáció helye
\end{itemize}
\end{block}
\begin{exampleblock}{Példa}
Felhasználó entitás tartalmaz jelszó hash-t, de a DTO nem adja ki.
Felhasználó entitás tartalmaz jelszó hash-t,\\
de a DTO nem adja ki.
\end{exampleblock}
\end{frame}
@@ -116,7 +118,7 @@ class UserResponseDTO {
\end{frame}
\begin{frame}[fragile]{DTO használata service-ben}
\begin{block}{UserService példa}
\begin{block}{UserService példa (1)}
\begin{lstlisting}[language=JavaScript]
const prisma = require('./prisma');
const bcrypt = require('bcrypt');
@@ -126,19 +128,26 @@ class UserService {
const hashedPassword = await bcrypt.hash(
createUserDTO.password, 10
); // Jelszó hash-elés
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}[fragile]{DTO használata service-ben (folyt.)}
\begin{block}{UserService példa (2)}
\begin{lstlisting}[language=JavaScript]
const user = await prisma.user.create({
data: {
email: createUserDTO.email,
password: hashedPassword,
name: createUserDTO.name
}// Mentés Prisma-val
} // Mentés Prisma-val
});
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}[fragile]{DTO használata service-ben (folyt.)}
\begin{block}{UserService példa folytatás}
\begin{block}{UserService példa (3)}
\begin{lstlisting}[language=JavaScript]
// DTO-vá alakítás visszaadás előtt
return UserResponseDTO.fromPrismaUser(user);
@@ -147,6 +156,13 @@ class UserService {
const users = await prisma.user.findMany();
return UserResponseDTO.fromManyPrismaUsers(users);
}
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}[fragile]{DTO használata service-ben (folyt.)}
\begin{block}{UserService példa (4)}
\begin{lstlisting}[language=JavaScript]
async getUserById(id) {
const user = await prisma.user.findUnique({
where: { id }
@@ -160,7 +176,7 @@ class UserService {
\end{frame}
\begin{frame}[fragile]{Express integráció DTO-val}
\begin{block}{REST endpoint}
\begin{block}{REST endpoint (POST)}
\begin{lstlisting}[language=JavaScript]
const express = require('express');
const userService = new UserService();
@@ -174,6 +190,13 @@ app.post('/api/users', async (req, res) => {
res.status(400).json({ error: error.message });
}
});
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}[fragile]{Express integráció DTO-val (folyt.)}
\begin{block}{REST endpoint (GET)}
\begin{lstlisting}[language=JavaScript]
app.get('/api/users', async (req, res) => {
const usersDTO = await userService.getAllUsers();
res.json(usersDTO);
@@ -364,7 +387,7 @@ class UserFilterDTO {
\end{frame}
\begin{frame}[fragile]{Szűrési DTO használata}
\begin{block}{Express endpoint szűréssel}
\begin{block}{Express endpoint szűréssel (1)}
\begin{lstlisting}[language=JavaScript]
app.get('/api/users', async (req, res) => {
const filterDTO = new UserFilterDTO(req.query);
@@ -374,6 +397,13 @@ app.get('/api/users', async (req, res) => {
skip: (filterDTO.page - 1) * filterDTO.pageSize,
take: filterDTO.pageSize
});
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}[fragile]{Szűrési DTO használata (folyt.)}
\begin{block}{Express endpoint szűréssel (2)}
\begin{lstlisting}[language=JavaScript]
const total = await prisma.user.count({ where });
const result = new PaginatedResponseDTO(
UserResponseDTO.fromManyPrismaUsers(users),
@@ -386,7 +416,7 @@ app.get('/api/users', async (req, res) => {
\end{frame}
\begin{frame}[fragile]{Mapper függvények}
\begin{block}{Alternatív megközelítés - Pure functions // dto/user.mapper.js}
\begin{block}{Alternatív megközelítés (1)}
\begin{lstlisting}[language=JavaScript]
function toUserResponseDTO(user) {
return {
@@ -398,6 +428,13 @@ function toUserResponseDTO(user) {
function toUserResponseDTOs(users) {
return users.map(toUserResponseDTO);
}
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}[fragile]{Mapper függvények (folyt.)}
\begin{block}{Alternatív megközelítés (2)}
\begin{lstlisting}[language=JavaScript]
module.exports = {
toUserResponseDTO,
toUserResponseDTOs
@@ -407,15 +444,22 @@ module.exports = {
\end{frame}
\begin{frame}[fragile]{Mapper használata}
\begin{block}{Service-ben}
\begin{block}{Service-ben (1)}
\begin{lstlisting}[language=JavaScript]
const { toUserResponseDTO, toUserResponseDTOs }
const { toUserResponseDTO, toUserResponseDTOs }
= require('./dto/user.mapper');
class UserService {
async getAllUsers() {
const users = await prisma.user.findMany();
return toUserResponseDTOs(users);
}
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}[fragile]{Mapper használata (folyt.)}
\begin{block}{Service-ben (2)}
\begin{lstlisting}[language=JavaScript]
async getUserById(id) {
const user = await prisma.user.findUnique({
where: { id }