negyedik gyakorlat + megoldasok
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
# Első Gyakorlat - MINTA Megoldás
|
||||
|
||||
Ez a mappa tartalmazza az első gyakorlat **teljes, működő megoldását**.
|
||||
|
||||
## Amit implementáltunk:
|
||||
|
||||
### 1. **Layered Architecture** (Rétegezett Architektúra)
|
||||
- **API Layer**: Controllers, Routers - HTTP kérések kezelése
|
||||
- **Application Layer**: Commands, Queries, Handlers - Üzleti logika
|
||||
- **Domain Layer**: Interfaces (Repository pattern)
|
||||
- **Infrastructure Layer**: Repositories - Adatkezelés (JSON file-ok)
|
||||
|
||||
### 2. **CQRS Pattern** (Command Query Responsibility Segregation)
|
||||
- **Commands**: Írási műveletek (Create, Update, Delete)
|
||||
- **Queries**: Olvasási műveletek (GetAll, GetById)
|
||||
- **Handlers**: Command és Query végrehajtók
|
||||
|
||||
### 3. **Repository Pattern**
|
||||
- `IUserRepository` és `IPostRepository` interfészek
|
||||
- `UserRepository` és `PostRepository` implementációk
|
||||
- Adatok tárolása JSON file-okban
|
||||
|
||||
## Struktúra
|
||||
|
||||
```
|
||||
src/
|
||||
├── API/
|
||||
│ ├── server.js # Express szerver
|
||||
│ ├── controllers/
|
||||
│ │ ├── userController.js # User endpoint logika
|
||||
│ │ └── postController.js # Post endpoint logika
|
||||
│ └── routers/
|
||||
│ ├── userRouter.js # User route-ok
|
||||
│ └── postRouter.js # Post route-ok
|
||||
├── Application/
|
||||
│ ├── users/
|
||||
│ │ ├── command/ # User írási műveletek
|
||||
│ │ │ ├── createUserCommand.js
|
||||
│ │ │ ├── createUserCommandHandler.js
|
||||
│ │ │ ├── updateUserCommand.js
|
||||
│ │ │ ├── updateUserCommandHandler.js
|
||||
│ │ │ ├── deleteUserCommand.js
|
||||
│ │ │ └── deleteUserCommandHandler.js
|
||||
│ │ └── query/ # User olvasási műveletek
|
||||
│ │ ├── getAllUsersQuery.js
|
||||
│ │ ├── getAllUsersQueryHandler.js
|
||||
│ │ ├── getUserByIdQuery.js
|
||||
│ │ └── getUserByIdQueryHandler.js
|
||||
│ └── blogs/
|
||||
│ ├── command/ # Post írási műveletek
|
||||
│ └── query/ # Post olvasási műveletek
|
||||
├── Domain/
|
||||
│ ├── IUserRepository.js # User repository interface
|
||||
│ └── IPostRepository.js # Post repository interface
|
||||
└── Infrastructure/
|
||||
├── userRepository.js # User repository implementáció
|
||||
├── postRepository.js # Post repository implementáció
|
||||
├── user.json # User adatok
|
||||
└── post.json # Post adatok
|
||||
```
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### Users
|
||||
- `GET /api/users` - Összes user lekérése
|
||||
- `GET /api/users/:id` - Egy user lekérése
|
||||
- `POST /api/users` - Új user létrehozása
|
||||
- `PUT /api/users/:id` - User módosítása
|
||||
- `DELETE /api/users/:id` - User törlése
|
||||
|
||||
### Posts
|
||||
- `GET /api/posts` - Összes post lekérése
|
||||
- `GET /api/posts/:id` - Egy post lekérése
|
||||
- `GET /api/posts/user/:userId` - User összes postja
|
||||
- `POST /api/posts` - Új post létrehozása
|
||||
- `PUT /api/posts/:id` - Post módosítása
|
||||
- `DELETE /api/posts/:id` - Post törlése
|
||||
|
||||
## Indítás
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm start
|
||||
```
|
||||
|
||||
A szerver elindul a `http://localhost:3000` címen.
|
||||
|
||||
## Példa Használat
|
||||
|
||||
### User létrehozása
|
||||
```bash
|
||||
curl -X POST http://localhost:3000/api/users \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"name": "John Doe",
|
||||
"email": "john@example.com",
|
||||
"age": 25
|
||||
}'
|
||||
```
|
||||
|
||||
### Post létrehozása
|
||||
```bash
|
||||
curl -X POST http://localhost:3000/api/posts \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"title": "My First Post",
|
||||
"content": "Hello World!",
|
||||
"author": "John Doe"
|
||||
}'
|
||||
```
|
||||
|
||||
## Tanulási Pontok
|
||||
|
||||
1. **Separation of Concerns**: Minden réteg saját felelősséggel rendelkezik
|
||||
2. **CQRS**: Írási és olvasási műveletek szétválasztása
|
||||
3. **Repository Pattern**: Adatkezelés absztrakciója
|
||||
4. **Dependency Injection**: Handler-ek megkapják a repository-t
|
||||
5. **Express.js**: RESTful API építése
|
||||
6. **File-based Storage**: JSON file-ok használata adatbázis helyett
|
||||
Reference in New Issue
Block a user