Skip to content

Commit dc00dfd

Browse files
chore: update readme for new release
1 parent 9ef32fa commit dc00dfd

4 files changed

Lines changed: 56 additions & 49 deletions

File tree

README-VIETNAMESE.md

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ Có gì đặc biệt khiến cho template này trở nên khác biệt so với
156156
│ ├── /ErrorCodes/ # Centralized error code definitions for the whole app
157157
│ ├── /Errors/ # Error result & problem details mappings
158158
│ ├── /Interfaces/ # Application-level interfaces (services, repos, abstractions)
159-
│ ├── /QueryStringProcessing/ # Parsing, validating & normalizing query parameters
159+
│ ├── /RequestHandler/ # Parsing, validating & normalizing request
160160
│ ├── /Security/ # Security helpers (permission attributes, role metadata)
161161
│ └── /Validators/ # Global validators used across features
162162
@@ -172,7 +172,7 @@ Có gì đặc biệt khiến cho template này trở nên khác biệt so với
172172
│ ├── /Mapping/ # Shared mapping used by multiple features.
173173
│ ├── /Projections/ # Common read-side DTO builders or lightweight view models.
174174
│ ├── /Requests/ # Shared command/query models (e.g., Upsert commands used by multiple operations).
175-
│ └── /Validators/ # Reusable FluentValidation rules shared across commands/queries.
175+
│ └── /Validations/ # Reusable FluentValidation rules shared across commands/queries.
176176
177177
├── Application.csproj # Application project definition
178178
└── DependencyInjection.cs # Registers all Application services into DI container
@@ -189,7 +189,7 @@ Có gì đặc biệt khiến cho template này trở nên khác biệt so với
189189
│ ├── /Interceptors/ # EF Core interceptors (audit, logging)
190190
│ ├── /Migrations/ # EF Core migration files
191191
│ ├── /Repositories/ # Repository implementations
192-
│ ├── /Seeds/ # Seed data for database initialization
192+
│ ├── /Seeders/ # Seed data for database initialization
193193
│ └── /Settings/ # DbContext, UnitOfWork, factories, settings
194194
195195
├── /Services # Infrastructure service implementations
@@ -254,7 +254,7 @@ Có gì đặc biệt khiến cho template này trở nên khác biệt so với
254254

255255
Các thứ cần để chạy ứng dụng:
256256

257-
- [Net 8](https://dotnet.microsoft.com/en-us/download/dotnet/8.0)
257+
- [.NET 10](https://dotnet.microsoft.com/en-us/download/dotnet/10.0)
258258
- [Docker](https://www.docker.com/)
259259

260260
Bước thứ 1 :point_up: :
@@ -287,21 +287,25 @@ cd Dockers/MinioS3
287287
Đổi tên username và password ở file .env nếu cần thiết, lát nữa các bạn sẽ dùng nó để đăng nhập vào web manager đó.
288288

289289
```
290-
MINIO_ROOT_USER=the_template_storage
291-
MINIO_ROOT_PASSWORD=storage@the_template1
292-
290+
MINIO_ROOT_USER=minioadmin
291+
MINIO_ROOT_PASSWORD=Admin@123
293292
```
294293

295294
Dùng lệnh sau đây để chạy Amazon S3 service
296295

297296
```
298297
docker-compose up -d
298+
```
299+
300+
Phiên bản docker compose cũ
299301

302+
```
303+
docker-compose up -d
300304
```
301305

302306
Truy cập http://localhost:9001 và đăng nhập
303307

304-
![S3 login](/Screenshots/S3-login.png)
308+
![S3 login](/Screenshots/minio-login.png)
305309

306310
Tạo ra cặp key
307311

@@ -311,14 +315,14 @@ Chỉnh lại setting ở your appsettings.json
311315

312316
```json
313317
"S3AwsSettings": {
314-
"ServiceUrl": "http://localhost:9000",
315-
"AccessKey": "",
316-
"SecretKey": "",
317-
"BucketName": "the-template-project",
318-
"PublicUrl": "http://localhost:9000",
319-
"PreSignedUrlExpirationInMinutes": 1440,
320-
"Protocol": 1
321-
},
318+
"ServiceUrl": "http://localhost:9000",
319+
"AccessKey": "",
320+
"SecretKey": "",
321+
"BucketName": "the-template-project",
322+
"PublicUrl": "http://localhost:9000",
323+
"PreSignedUrlExpirationInMinutes": 1440,
324+
"Protocol": 1
325+
},
322326
```
323327

324328
Bước cuối nha
@@ -543,7 +547,7 @@ GET /api/users/filter[$or][0][$and][0][claims][claimValue][$eq]=admin&filter[$or
543547
}
544548
```
545549

546-
Các bạn có thể tìm hiểu thêm một số link sau đây
550+
Các bạn có thể tìm hiểu thêm một số link sau đây
547551

548552
[https://docs.strapi.io/dev-docs/api/rest/filters-locale-publication#filtering](https://docs.strapi.io/dev-docs/api/rest/filters-locale-publication#filtering)\
549553
[https://docs.strapi.io/dev-docs/api/rest/filters-locale-publication#complex-filtering](https://docs.strapi.io/dev-docs/api/rest/filters-locale-publication#complex-filtering)\
@@ -554,7 +558,7 @@ Mình thiết kế input đầu vào dựa trên [Strapi filter](https://docs.st
554558
Mình đã nhúng sẳn filter tự động vào tất cả các hàm lấy danh sách chỉ cần gọi
555559

556560
```csharp
557-
unitOfWork.DynamicReadOnlyRepository<User>()
561+
unitOfWork.ReadonlyRepository<User>()
558562
```
559563

560564
<div id='pagination'/>
@@ -567,7 +571,7 @@ Offset and cursor pagination được tích hợp sẳn trong template.
567571

568572
```csharp
569573
var response = await unitOfWork
570-
.DynamicReadOnlyRepository<User>(true)
574+
.ReadonlyRepository<User>(true)
571575
.PagedListAsync(
572576
new ListUserSpecification(),
573577
query,
@@ -580,7 +584,7 @@ var response = await unitOfWork
580584

581585
```csharp
582586
var response = await unitOfWork
583-
.DynamicReadOnlyRepository<User>(true)
587+
.ReadonlyRepository<User>(true)
584588
.CursorPagedListAsync(
585589
new ListUserSpecification(),
586590
query,
@@ -629,11 +633,9 @@ var response = await unitOfWork
629633
### Khởi tạo dữ liệu mặc định
630634

631635
```
632-
cd Infrastructure/Data/Seeds/
636+
cd Infrastructure/Data/Seeders/
633637
```
634638

635-
Ở file `DataSeeder.cs` hàm StartAsync
636-
637639
<div id='TranslationError'/>
638640

639641
### Dịch lỗi
@@ -649,7 +651,7 @@ cd Infrastructure/Data/Seeds/
649651
(ví dụ: `Permissions.en.json`, `Messages.vi.json`).
650652

651653
3. **(Tùy chọn nhưng khuyến dùng) Đồng bộ hóa dữ liệu dịch**
652-
Gọi endpoint để tự động thêm các mục còn thiếu và xóa các mục không còn sử dụng:
654+
Sau khi chỉnh sửa bản dịch (thêm mới hoặc xóa) gọi endpoint để tự động thêm các mục còn thiếu và xóa các mục không còn sử dụng:
653655

654656
```rest
655657
GET /api/localizations/sync

README.md

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ What makes this Clean Architecture template stand out from the rest on Github?
144144
│ ├── /Interfaces/ # Application-level interfaces (services, repos, abstractions)
145145
│ ├── /QueryStringProcessing/ # Parsing, validating & normalizing query parameters
146146
│ ├── /Security/ # Security helpers (permission attributes, role metadata)
147-
│ └── /Validators/ # Global validators used across features
147+
│ └── /Validators/ # FluentValidator custom abstract class
148148
149149
├── /Features # Vertical slices styles (CQRS + MediatR)
150150
│ ├── /AuditLogs/ # Commands & queries to manage audit logs
@@ -158,10 +158,10 @@ What makes this Clean Architecture template stand out from the rest on Github?
158158
│ ├── /Mapping/ # Shared mapping used by multiple features.
159159
│ ├── /Projections/ # Common read-side DTO builders or lightweight view models.
160160
│ ├── /Requests/ # Shared command/query models (e.g., Upsert commands used by multiple operations).
161-
│ └── /Validators/ # Reusable FluentValidation rules shared across commands/queries.
161+
│ └── /Validations/ # Reusable FluentValidation rules shared across commands/queries.
162162
163163
├── Application.csproj # Application project definition
164-
└── DependencyInjection.cs # Registers all Application services into DI container
164+
└── DependencyInjection.cs # Registers all Application services into DI container
165165
166166
```
167167

@@ -175,8 +175,8 @@ What makes this Clean Architecture template stand out from the rest on Github?
175175
│ ├── /Interceptors/ # EF Core interceptors (audit, logging)
176176
│ ├── /Migrations/ # EF Core migration files
177177
│ ├── /Repositories/ # Repository implementations
178-
│ ├── /Seeds/ # Seed data for database initialization
179-
│ └── /Settings/ # DbContext, UnitOfWork, factories, settings
178+
│ ├── /Seeders/ # Seed data for database initialization
179+
│ └── /Settings/ # Database IOptions
180180
181181
├── /Services # Infrastructure service implementations
182182
@@ -191,7 +191,7 @@ What makes this Clean Architecture template stand out from the rest on Github?
191191
192192
├── /Converters # converters for project
193193
194-
├── /Endpoints # HTTP endpoint definitions (minimal APIs or controllers)
194+
├── /Endpoints # HTTP endpoint definitions (minimal APIs)
195195
196196
├── /Extensions # API extension methods (Swagger, CORS, routing, etc.)
197197
@@ -240,7 +240,7 @@ What makes this Clean Architecture template stand out from the rest on Github?
240240

241241
The following prerequisites are required to build and run the solution:
242242

243-
- [Net 8](https://dotnet.microsoft.com/en-us/download/dotnet/8.0)
243+
- [.NET 10](https://dotnet.microsoft.com/en-us/download/dotnet/10.0)
244244
- [Docker](https://www.docker.com/)
245245

246246
The first step :point_up: :
@@ -270,24 +270,31 @@ cd Dockers/MinioS3
270270
271271
```
272272

273-
change mino username and password at .env if needed and you're gonna use it for logging in Web UI Manager
273+
change minio username and password at .env if needed and you're gonna use it for logging in Web UI Manager
274274

275275
```
276-
MINIO_ROOT_USER=the_template_storage
277-
MINIO_ROOT_PASSWORD=storage@the_template1
276+
MINIO_ROOT_USER=minioadmin
277+
MINIO_ROOT_PASSWORD=Admin@123
278278
279279
```
280280

281281
To Run Amazon S3 service for media file storage.
282282

283+
```
284+
docker compose up -d
285+
286+
```
287+
288+
Old docker compose version
289+
283290
```
284291
docker-compose up -d
285292
286293
```
287294

288295
Access Minio S3 Web UI at http://localhost:9001 and login
289296

290-
![S3 login](/Screenshots/S3-login.png)
297+
![S3 login](/Screenshots/minio-login.png)
291298

292299
Create a pairs of key like
293300

@@ -297,14 +304,14 @@ input the keys at your appsettings.json
297304

298305
```json
299306
"S3AwsSettings": {
300-
"ServiceUrl": "http://localhost:9000",
301-
"AccessKey": "***",
302-
"SecretKey": "***",
303-
"BucketName": "the-template-project",
304-
"PublicUrl": "http://localhost:9000",
305-
"PreSignedUrlExpirationInMinutes": 1440,
306-
"Protocol": 1
307-
},
307+
"ServiceUrl": "http://localhost:9000",
308+
"AccessKey": "***",
309+
"SecretKey": "***",
310+
"BucketName": "the-template-project",
311+
"PublicUrl": "http://localhost:9000",
312+
"PreSignedUrlExpirationInMinutes": 1440,
313+
"Protocol": 1
314+
},
308315
```
309316

310317
The final step
@@ -547,7 +554,7 @@ I designed filter input based on [Strapi filter](https://docs.strapi.io/dev-docs
547554
To Apply dynamic filter, you just call any list method at
548555

549556
```csharp
550-
unitOfWork.DynamicReadOnlyRepository<User>()
557+
unitOfWork.ReadonlyRepository<User>()
551558
```
552559

553560
### 8.2.5. Pagination
@@ -558,7 +565,7 @@ To Enable offset pagination just add this line
558565

559566
```csharp
560567
var response = await unitOfWork
561-
.DynamicReadOnlyRepository<User>()
568+
.ReadonlyRepository<User>()
562569
.PagedListAsync(
563570
new ListUserSpecification(),
564571
query,
@@ -571,7 +578,7 @@ To Enable cursor pagination just add this line
571578

572579
```csharp
573580
var response = await unitOfWork
574-
.DynamicReadOnlyRepository<User>()
581+
.ReadonlyRepository<User>()
575582
.CursorPagedListAsync(
576583
new ListUserSpecification(),
577584
query,
@@ -620,11 +627,9 @@ var response = await unitOfWork
620627
Seeding for entities center in
621628

622629
```
623-
cd Infrastructure/Data/Seeds/
630+
cd Infrastructure/Data/Seeders/
624631
```
625632

626-
`DataSeeder.cs` at StartAsync
627-
628633
### 10. Translate messages
629634

630635
To translate error messages, role names, or permission names, follow these steps:

Screenshots/S3-login.png

-367 KB
Binary file not shown.

Screenshots/minio-login.png

329 KB
Loading

0 commit comments

Comments
 (0)