@chill-sharp/ui-core 1.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/chillsharp-current-user-preferences/SKILL.md +70 -0
- package/.agents/skills/chillsharp-ui-template/SKILL.md +18 -0
- package/README.md +103 -0
- package/chill-sharp-ui-core.d.ts.map +1 -0
- package/doc/AIAssistedDevelopment/README.md +185 -0
- package/doc/AttachmentModel/README.md +173 -0
- package/doc/AuthenticationModel/README.md +213 -0
- package/doc/AuthenticationModel/how-to-integreate-auth-minimal-api.md +293 -0
- package/doc/ChillSharpClient.md +464 -0
- package/doc/ClientGeneration/README.md +172 -0
- package/doc/ComplianceGuide/README.md +178 -0
- package/doc/Configuration/README.md +94 -0
- package/doc/CurrentUserPreferences.md +114 -0
- package/doc/DateTimePolicy/README.md +154 -0
- package/doc/DateTimeSerialization.md +423 -0
- package/doc/Endpoints.md +260 -0
- package/doc/HowTo/01-simple-blog-sqlite.md +153 -0
- package/doc/HowTo/02-blog-schema-labels.md +140 -0
- package/doc/HowTo/03-authentication.md +218 -0
- package/doc/HowTo/04-blog-posts-one-to-many.md +194 -0
- package/doc/HowTo/05-docker-env-variables.md +274 -0
- package/doc/HowTo/06-chunk-transactions-autocomplete.md +196 -0
- package/doc/Mcp/ChatGPT.md +291 -0
- package/doc/Mcp/README.md +799 -0
- package/doc/MenuGuide/README.md +49 -0
- package/doc/ModelPreparation.md +255 -0
- package/doc/PermissionModel/README.md +277 -0
- package/doc/README.md +228 -0
- package/doc/ReferenceExistence.md +130 -0
- package/doc/RegisterContext.md +217 -0
- package/doc/UiCore/CRUD.md +170 -0
- package/doc/UiCore/README.md +13 -0
- package/doc/ValidationModel/README.md +117 -0
- package/doc/it/AIAssistedDevelopment/README.md +185 -0
- package/doc/it/AttachmentModel/README.md +173 -0
- package/doc/it/AuthenticationModel/README.md +171 -0
- package/doc/it/AuthenticationModel/how-to-integreate-auth-minimal-api.md +292 -0
- package/doc/it/ChillSharpClient.md +464 -0
- package/doc/it/ClientGeneration/README.md +152 -0
- package/doc/it/ComplianceGuide/README.md +178 -0
- package/doc/it/Configuration/README.md +94 -0
- package/doc/it/CurrentUserPreferences.md +114 -0
- package/doc/it/DateTimePolicy/README.md +154 -0
- package/doc/it/DateTimeSerialization.md +423 -0
- package/doc/it/Endpoints.md +260 -0
- package/doc/it/HowTo/01-simple-blog-sqlite.md +152 -0
- package/doc/it/HowTo/02-blog-schema-labels.md +139 -0
- package/doc/it/HowTo/03-authentication.md +221 -0
- package/doc/it/HowTo/04-blog-posts-one-to-many.md +193 -0
- package/doc/it/HowTo/05-docker-env-variables.md +268 -0
- package/doc/it/HowTo/06-chunk-transactions-autocomplete.md +196 -0
- package/doc/it/Mcp/ChatGPT.md +291 -0
- package/doc/it/Mcp/README.md +799 -0
- package/doc/it/MenuGuide/README.md +49 -0
- package/doc/it/ModelPreparation.md +254 -0
- package/doc/it/PermissionModel/README.md +190 -0
- package/doc/it/README.md +172 -0
- package/doc/it/ReferenceExistence.md +130 -0
- package/doc/it/RegisterContext.md +218 -0
- package/doc/it/UiCore/CRUD.md +170 -0
- package/doc/it/UiCore/README.md +13 -0
- package/doc/it/ValidationModel/README.md +117 -0
- package/fesm2022/chill-sharp-ui-core.mjs +16725 -0
- package/fesm2022/chill-sharp-ui-core.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/chill-sharp-ui-root.component.d.ts +6 -0
- package/lib/chill-sharp-ui-root.component.d.ts.map +1 -0
- package/lib/chill-sharp-ui.routes.d.ts +3 -0
- package/lib/chill-sharp-ui.routes.d.ts.map +1 -0
- package/lib/chill.config.d.ts +5 -0
- package/lib/chill.config.d.ts.map +1 -0
- package/lib/layouts/auth-shell.component.d.ts +8 -0
- package/lib/layouts/auth-shell.component.d.ts.map +1 -0
- package/lib/layouts/workspace-page.component.d.ts +49 -0
- package/lib/layouts/workspace-page.component.d.ts.map +1 -0
- package/lib/lib/chill-form.component.d.ts +151 -0
- package/lib/lib/chill-form.component.d.ts.map +1 -0
- package/lib/lib/chill-i18n-button-label.component.d.ts +27 -0
- package/lib/lib/chill-i18n-button-label.component.d.ts.map +1 -0
- package/lib/lib/chill-i18n-label.component.d.ts +30 -0
- package/lib/lib/chill-i18n-label.component.d.ts.map +1 -0
- package/lib/lib/chill-json-input.component.d.ts +31 -0
- package/lib/lib/chill-json-input.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-boolean-control.component.d.ts +12 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-boolean-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-editor-control.component.d.ts +17 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-editor-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-lookup-control.component.d.ts +45 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-lookup-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-scalar-control.component.d.ts +19 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-scalar-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-select-control.component.d.ts +12 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-select-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-textarea-control.component.d.ts +13 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-textarea-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input.component.d.ts +452 -0
- package/lib/lib/chill-polymorphic-input.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-boolean-control.component.d.ts +7 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-boolean-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-lookup-control.component.d.ts +7 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-lookup-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-number-control.component.d.ts +7 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-number-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-temporal-control.component.d.ts +8 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-temporal-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-value-control.component.d.ts +7 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-value-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output.component.d.ts +75 -0
- package/lib/lib/chill-polymorphic-output.component.d.ts.map +1 -0
- package/lib/lib/chill-table.component.d.ts +434 -0
- package/lib/lib/chill-table.component.d.ts.map +1 -0
- package/lib/lib/chill-text-editor-dialog.component.d.ts +14 -0
- package/lib/lib/chill-text-editor-dialog.component.d.ts.map +1 -0
- package/lib/lib/crud-configuration.utils.d.ts +4 -0
- package/lib/lib/crud-configuration.utils.d.ts.map +1 -0
- package/lib/lib/culture-name-options.d.ts +3 -0
- package/lib/lib/culture-name-options.d.ts.map +1 -0
- package/lib/lib/date-format-options.d.ts +3 -0
- package/lib/lib/date-format-options.d.ts.map +1 -0
- package/lib/lib/iana-time-zone-options.d.ts +3 -0
- package/lib/lib/iana-time-zone-options.d.ts.map +1 -0
- package/lib/lib/notice-transition.directive.d.ts +17 -0
- package/lib/lib/notice-transition.directive.d.ts.map +1 -0
- package/lib/lib/schema-property-dialog.component.d.ts +74 -0
- package/lib/lib/schema-property-dialog.component.d.ts.map +1 -0
- package/lib/models/chill-auth.models.d.ts +176 -0
- package/lib/models/chill-auth.models.d.ts.map +1 -0
- package/lib/models/chill-menu.models.d.ts +12 -0
- package/lib/models/chill-menu.models.d.ts.map +1 -0
- package/lib/models/chill-schema.models.d.ts +141 -0
- package/lib/models/chill-schema.models.d.ts.map +1 -0
- package/lib/models/workspace-dialog.models.d.ts +16 -0
- package/lib/models/workspace-dialog.models.d.ts.map +1 -0
- package/lib/models/workspace-task.models.d.ts +36 -0
- package/lib/models/workspace-task.models.d.ts.map +1 -0
- package/lib/pages/confirm-reset-page.component.d.ts +21 -0
- package/lib/pages/confirm-reset-page.component.d.ts.map +1 -0
- package/lib/pages/crud/attachment-upload-dialog.component.d.ts +24 -0
- package/lib/pages/crud/attachment-upload-dialog.component.d.ts.map +1 -0
- package/lib/pages/crud/crud-page.component.d.ts +244 -0
- package/lib/pages/crud/crud-page.component.d.ts.map +1 -0
- package/lib/pages/login-page.component.d.ts +21 -0
- package/lib/pages/login-page.component.d.ts.map +1 -0
- package/lib/pages/permissions/auth-role-dialog.component.d.ts +29 -0
- package/lib/pages/permissions/auth-role-dialog.component.d.ts.map +1 -0
- package/lib/pages/permissions/auth-search-select.component.d.ts +28 -0
- package/lib/pages/permissions/auth-search-select.component.d.ts.map +1 -0
- package/lib/pages/permissions/auth-user-dialog.component.d.ts +35 -0
- package/lib/pages/permissions/auth-user-dialog.component.d.ts.map +1 -0
- package/lib/pages/permissions/permission-editor.component.d.ts +55 -0
- package/lib/pages/permissions/permission-editor.component.d.ts.map +1 -0
- package/lib/pages/permissions/permissions-page.component.d.ts +38 -0
- package/lib/pages/permissions/permissions-page.component.d.ts.map +1 -0
- package/lib/pages/permissions/role-permission.component.d.ts +43 -0
- package/lib/pages/permissions/role-permission.component.d.ts.map +1 -0
- package/lib/pages/permissions/user-permission.component.d.ts +43 -0
- package/lib/pages/permissions/user-permission.component.d.ts.map +1 -0
- package/lib/pages/register-page.component.d.ts +24 -0
- package/lib/pages/register-page.component.d.ts.map +1 -0
- package/lib/pages/reset-password-page.component.d.ts +18 -0
- package/lib/pages/reset-password-page.component.d.ts.map +1 -0
- package/lib/provide-chill-sharp-ui-core.d.ts +8 -0
- package/lib/provide-chill-sharp-ui-core.d.ts.map +1 -0
- package/lib/services/chill.service.d.ts +249 -0
- package/lib/services/chill.service.d.ts.map +1 -0
- package/lib/services/workspace-dialog.service.d.ts +22 -0
- package/lib/services/workspace-dialog.service.d.ts.map +1 -0
- package/lib/services/workspace-layout.service.d.ts +13 -0
- package/lib/services/workspace-layout.service.d.ts.map +1 -0
- package/lib/services/workspace-task-registry.service.d.ts +35 -0
- package/lib/services/workspace-task-registry.service.d.ts.map +1 -0
- package/lib/services/workspace-toolbar.service.d.ts +23 -0
- package/lib/services/workspace-toolbar.service.d.ts.map +1 -0
- package/lib/services/workspace.service.d.ts +114 -0
- package/lib/services/workspace.service.d.ts.map +1 -0
- package/lib/storage-keys.d.ts +5 -0
- package/lib/storage-keys.d.ts.map +1 -0
- package/lib/tasks/crud-task/crud-task.component.d.ts +33 -0
- package/lib/tasks/crud-task/crud-task.component.d.ts.map +1 -0
- package/lib/tasks/goto-url-task/goto-url-task.component.d.ts +31 -0
- package/lib/tasks/goto-url-task/goto-url-task.component.d.ts.map +1 -0
- package/lib/workspace/confirm-message-dialog.component.d.ts +16 -0
- package/lib/workspace/confirm-message-dialog.component.d.ts.map +1 -0
- package/lib/workspace/entity-options-dialog.component.d.ts +29 -0
- package/lib/workspace/entity-options-dialog.component.d.ts.map +1 -0
- package/lib/workspace/external-task-api.d.ts +2 -0
- package/lib/workspace/external-task-api.d.ts.map +1 -0
- package/lib/workspace/user-profile-dialog.component.d.ts +30 -0
- package/lib/workspace/user-profile-dialog.component.d.ts.map +1 -0
- package/lib/workspace/workspace-dialog-host.component.d.ts +26 -0
- package/lib/workspace/workspace-dialog-host.component.d.ts.map +1 -0
- package/lib/workspace/workspace-menu-item-dialog.component.d.ts +61 -0
- package/lib/workspace/workspace-menu-item-dialog.component.d.ts.map +1 -0
- package/lib/workspace/workspace-menu.component.d.ts +104 -0
- package/lib/workspace/workspace-menu.component.d.ts.map +1 -0
- package/lib/workspace/workspace-taskbar.component.d.ts +14 -0
- package/lib/workspace/workspace-taskbar.component.d.ts.map +1 -0
- package/package.json +54 -0
- package/public-api.d.ts +56 -0
- package/public-api.d.ts.map +1 -0
- package/service-worker/chill-sharp-service-worker.js +166 -0
- package/styles/core-theme.scss +1268 -0
- package/template-customization/upgrade.ps1.template +342 -0
- package/template-customization/upgrade.sh.template +271 -0
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
# ChillSharp.Client
|
|
2
|
+
|
|
3
|
+
Versione originale in inglese: [English](../ChillSharpClient.md)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
`ChillSharp.Client` è la libreria client .NET per chiamare un host ChillSharp da app console, lavoratori, test, app desktop o altri servizi .NET.
|
|
7
|
+
|
|
8
|
+
Usalo quando il consumer è .NET. Per i framework browser o l'automazione Python, utilizzare i client generici in `extra-libs/` o generare un client specifico dell'host da OpenAPI.
|
|
9
|
+
|
|
10
|
+
## Installa
|
|
11
|
+
|
|
12
|
+
Fare riferimento al progetto o al pacchetto `ChillSharp.Client` dall'applicazione .NET che utilizza.
|
|
13
|
+
|
|
14
|
+
```xml
|
|
15
|
+
<ProjectReference Include="..\ChillSharp.Client\ChillSharp.Client.csproj" />
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Quindi importa gli spazi dei nomi client:
|
|
19
|
+
|
|
20
|
+
```csharp
|
|
21
|
+
using ChillSharp.Client;
|
|
22
|
+
using ChillSharp.Client.Dto;
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
I metodi dell'account di autenticazione utilizzano contratti di richiesta e risposta da `ChillSharp.Auth.Contracts`:
|
|
26
|
+
|
|
27
|
+
```csharp
|
|
28
|
+
using ChillSharp.Auth.Contracts;
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
I metodi I18n utilizzano contratti da `ChillSharp.I18n.Contracts`:
|
|
32
|
+
|
|
33
|
+
```csharp
|
|
34
|
+
using ChillSharp.I18n.Contracts;
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Crea un cliente
|
|
38
|
+
|
|
39
|
+
L'URL di base normale è l'endpoint principale di ChillSharp:
|
|
40
|
+
|
|
41
|
+
```csharp
|
|
42
|
+
var client = new ChillSharpClient("http://localhost:5000/api/chill");
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Puoi anche passare la root dell'host. Il client aggiunge il percorso `api/chill` predefinito:
|
|
46
|
+
|
|
47
|
+
```csharp
|
|
48
|
+
var client = new ChillSharpClient("http://localhost:5000");
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Per un percorso di base API personalizzato:
|
|
52
|
+
|
|
53
|
+
```csharp
|
|
54
|
+
var client = new ChillSharpClient(
|
|
55
|
+
"http://localhost:5000",
|
|
56
|
+
new ChillSharpClientOptions { ApiBasePath = "backend" });
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Questo risolve l'API principale come:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
http://localhost:5000/backend/chill
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Cultura
|
|
66
|
+
|
|
67
|
+
Passa una cultura predefinita durante la lettura di schemi o testo i18n:
|
|
68
|
+
|
|
69
|
+
```csharp
|
|
70
|
+
var client = new ChillSharpClient(
|
|
71
|
+
"http://localhost:5000/api/chill",
|
|
72
|
+
CultureName: "it-IT");
|
|
73
|
+
|
|
74
|
+
var schema = client.GetSchema("Model.Blog", "default");
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Puoi comunque sovrascrivere la cultura per chiamata allo schema:
|
|
78
|
+
|
|
79
|
+
```csharp
|
|
80
|
+
var englishSchema = client.GetSchema("Model.Blog", "default", "en-GB");
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Autenticazione
|
|
84
|
+
|
|
85
|
+
Se l'API è protetta, esegui l'autenticazione con uno di questi modelli.
|
|
86
|
+
|
|
87
|
+
Utilizza un token al portatore esistente:
|
|
88
|
+
|
|
89
|
+
```csharp
|
|
90
|
+
var client = new ChillSharpClient(
|
|
91
|
+
"http://localhost:5000/api/chill",
|
|
92
|
+
AuthToken: accessToken);
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Utilizza le credenziali e consenti al client di accedere su richiesta:
|
|
96
|
+
|
|
97
|
+
```csharp
|
|
98
|
+
var client = new ChillSharpClient(
|
|
99
|
+
"http://localhost:5000/api/chill",
|
|
100
|
+
UserName: "admin",
|
|
101
|
+
Password: "Pass123$");
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Registrati o accedi tramite gli endpoint dell'account di autenticazione:
|
|
105
|
+
|
|
106
|
+
```csharp
|
|
107
|
+
var client = new ChillSharpClient("http://localhost:5000/api/chill");
|
|
108
|
+
|
|
109
|
+
var token = client.LoginAuthAccount(new LoginAuthIdentityRequest
|
|
110
|
+
{
|
|
111
|
+
UserNameOrEmail = "admin",
|
|
112
|
+
Password = "Pass123$"
|
|
113
|
+
});
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Il client archivia il token di accesso restituito e il token di aggiornamento. Le chiamate autenticate successivamente riutilizzano il token di accesso e lo aggiornano automaticamente quando possibile.
|
|
117
|
+
|
|
118
|
+
Per forzare l'aggiornamento:
|
|
119
|
+
|
|
120
|
+
```csharp
|
|
121
|
+
client.RefreshAuthAccount();
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Per revocare la sessione corrente:
|
|
125
|
+
|
|
126
|
+
```csharp
|
|
127
|
+
client.LogoutAuthAccount();
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Operazioni dell'entità principale
|
|
131
|
+
|
|
132
|
+
Le chiamate alle entità ChillSharp utilizzano `ChillDtoEntity`.
|
|
133
|
+
|
|
134
|
+
Creare:
|
|
135
|
+
|
|
136
|
+
```csharp
|
|
137
|
+
var blog = new ChillDtoEntity
|
|
138
|
+
{
|
|
139
|
+
ChillType = "Model.Blog"
|
|
140
|
+
};
|
|
141
|
+
blog.Properties["Title"] = "My first blog";
|
|
142
|
+
blog.Properties["Description"] = "Created through ChillSharp.Client";
|
|
143
|
+
|
|
144
|
+
var created = client.Create(blog);
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Trovare:
|
|
148
|
+
|
|
149
|
+
```csharp
|
|
150
|
+
var found = client.Find(new ChillDtoEntity
|
|
151
|
+
{
|
|
152
|
+
ChillType = "Model.Blog",
|
|
153
|
+
Guid = created.Guid
|
|
154
|
+
});
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Aggiornamento:
|
|
158
|
+
|
|
159
|
+
```csharp
|
|
160
|
+
created.Properties["Title"] = "Updated blog";
|
|
161
|
+
var updated = client.Update(created);
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Eliminare:
|
|
165
|
+
|
|
166
|
+
```csharp
|
|
167
|
+
client.Delete(updated);
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Convalida senza salvare:
|
|
171
|
+
|
|
172
|
+
```csharp
|
|
173
|
+
var errors = client.Validate(blog);
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Interrogazione e ricerca
|
|
177
|
+
|
|
178
|
+
Utilizza `Query` quando l'host espone un tipo di query di entità:
|
|
179
|
+
|
|
180
|
+
```csharp
|
|
181
|
+
var query = new ChillDtoQuery
|
|
182
|
+
{
|
|
183
|
+
ChillType = "Query.BlogQuery",
|
|
184
|
+
Pagination = new ChillPagination
|
|
185
|
+
{
|
|
186
|
+
Page = 1,
|
|
187
|
+
PageResults = 20
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
query.Properties["FullTextSearch"] = "release notes";
|
|
192
|
+
|
|
193
|
+
var result = client.Query(query);
|
|
194
|
+
foreach (var item in result.Results)
|
|
195
|
+
{
|
|
196
|
+
Console.WriteLine(item.Label);
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Utilizza `Lookup` per la ricerca generica di entità di testo completo:
|
|
201
|
+
|
|
202
|
+
```csharp
|
|
203
|
+
var lookup = client.Lookup(new ChillDtoQuery
|
|
204
|
+
{
|
|
205
|
+
ChillType = "Model.Blog",
|
|
206
|
+
Properties =
|
|
207
|
+
{
|
|
208
|
+
["FullTextSearch"] = "release"
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
`FullTextSearch` effettua ricerche contro ChillSharp `FullTextContent`. Il testo senza virgolette senza selettori avanzati è normalizzato, suddiviso in spazi bianchi e abbinato a AND, quindi ogni token deve essere presente. Le parentesi più gli operatori `and`/`or` autonomi al di fuori delle virgolette consentono la ricerca booleana raggruppata. Cerca le parole letterali `and` o `or` racchiudendole tra virgolette corrispondenti. Le virgolette singole o doppie corrispondenti cercano una frase normalizzata con i limiti delle parole:
|
|
214
|
+
|
|
215
|
+
| Cerca testo | Significato |
|
|
216
|
+
| --- | --- |
|
|
217
|
+
| | Record di corrispondenza contenenti sia `release` che `notes`. |
|
|
218
|
+
| | Abbina record contenenti sia `release` che `notes` oppure record contenenti `memo`. |
|
|
219
|
+
| | Cerca la parola chiave letterale `and` anziché l'operatore booleano. |
|
|
220
|
+
| | Abbina la frase esatta come parole intere, ad esempio `bla bla la nazione bla bla`, ma non `bla bla della nazione bla bla`. |
|
|
221
|
+
| `"*la nazione"` o `"%la nazione"` | Rilassa il confine sinistro, in modo che `della nazione` possa corrispondere. |
|
|
222
|
+
| `"la nazione*"` o `"la nazione%"` | Rilassa il confine destro, in modo che un suffisso possa corrispondere. |
|
|
223
|
+
| `"la*nazione"` o `"la%nazione"` | Tratta il carattere jolly centrale come un separatore di token e applica la normale corrispondenza dei token AND. |
|
|
224
|
+
|
|
225
|
+
## Operazioni batch
|
|
226
|
+
|
|
227
|
+
Utilizzare `Chunk` per inviare diverse operazioni in una chiamata HTTP.
|
|
228
|
+
|
|
229
|
+
```csharp
|
|
230
|
+
var operations = new List<ChillOperation>
|
|
231
|
+
{
|
|
232
|
+
new() { Index = 0, Verb = ChillOperationVerb.TRANSACTION },
|
|
233
|
+
new()
|
|
234
|
+
{
|
|
235
|
+
Index = 1,
|
|
236
|
+
Verb = ChillOperationVerb.CREATE,
|
|
237
|
+
Entity = new ChillDtoEntity
|
|
238
|
+
{
|
|
239
|
+
ChillType = "Model.Blog",
|
|
240
|
+
Properties =
|
|
241
|
+
{
|
|
242
|
+
["Title"] = "Batch blog"
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
new() { Index = 2, Verb = ChillOperationVerb.COMMIT }
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
var processed = client.Chunk(operations);
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Utilizzare un wrapper di transazione/commit quando è necessario eseguire il commit delle operazioni di scrittura insieme.
|
|
253
|
+
|
|
254
|
+
## Schema e menù
|
|
255
|
+
|
|
256
|
+
Leggi i metadati dello schema:
|
|
257
|
+
|
|
258
|
+
```csharp
|
|
259
|
+
var schema = client.GetSchema("Model.Blog", "default");
|
|
260
|
+
var schemaList = client.GetSchemaList();
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Gestisci le opzioni dell'entità:
|
|
264
|
+
|
|
265
|
+
```csharp
|
|
266
|
+
var options = client.GetEntityOptions("Model.Blog");
|
|
267
|
+
options.HandleAttachments = true;
|
|
268
|
+
client.SetEntityOptions(options);
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
Leggi i nodi del menu:
|
|
272
|
+
|
|
273
|
+
```csharp
|
|
274
|
+
var rootItems = client.GetMenu();
|
|
275
|
+
var children = client.GetMenu(rootItems[0].Guid);
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Crea o aggiorna una voce di menu:
|
|
279
|
+
|
|
280
|
+
```csharp
|
|
281
|
+
var item = client.SetMenu(new ChillDtoMenuItem
|
|
282
|
+
{
|
|
283
|
+
PositionNo = 10,
|
|
284
|
+
Title = "Blogs",
|
|
285
|
+
ComponentName = "CRUD",
|
|
286
|
+
MenuHierarchy = "CONTENT.BLOGS"
|
|
287
|
+
});
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Elimina una voce di menu e i suoi discendenti:
|
|
291
|
+
|
|
292
|
+
```csharp
|
|
293
|
+
client.DeleteMenu(item.Guid);
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
Le operazioni di scrittura dello schema richiedono l'accesso alla gestione dello schema sugli host protetti.
|
|
297
|
+
|
|
298
|
+
## Gestione autenticazione
|
|
299
|
+
|
|
300
|
+
Gli assistenti per la gestione dell'autenticazione sono disponibili quando l'host registra `ChillSharp.Auth`.
|
|
301
|
+
|
|
302
|
+
```csharp
|
|
303
|
+
var users = client.GetAuthUsers();
|
|
304
|
+
var roles = client.GetAuthRoles();
|
|
305
|
+
var permissions = client.GetAuthPermissions();
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
Crea un utente di autenticazione gestita:
|
|
309
|
+
|
|
310
|
+
```csharp
|
|
311
|
+
var user = client.CreateAuthUser(new CreateAuthUserRequest
|
|
312
|
+
{
|
|
313
|
+
ExternalId = "external-user-id",
|
|
314
|
+
UserName = "editor",
|
|
315
|
+
DisplayName = "Editor",
|
|
316
|
+
IsActive = true,
|
|
317
|
+
MenuHierarchy = "CONTENT"
|
|
318
|
+
});
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
Crea un ruolo e assegnalo:
|
|
322
|
+
|
|
323
|
+
```csharp
|
|
324
|
+
var role = client.CreateAuthRole(new CreateAuthRoleRequest
|
|
325
|
+
{
|
|
326
|
+
Name = "Editors",
|
|
327
|
+
IsActive = true,
|
|
328
|
+
MenuHierarchy = "CONTENT"
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
client.AssignAuthRole(user.Guid, role.Guid);
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
Per schermate di amministrazione più ricche, utilizza gli helper aggregati:
|
|
335
|
+
|
|
336
|
+
```csharp
|
|
337
|
+
var managedUser = client.GetAuthManagedUser(user.Guid);
|
|
338
|
+
var roleList = client.GetAuthRoleList();
|
|
339
|
+
var moduleList = client.GetAuthModuleList();
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
##I18n
|
|
343
|
+
|
|
344
|
+
Leggere un testo localizzato:
|
|
345
|
+
|
|
346
|
+
```csharp
|
|
347
|
+
var text = client.GetText(new GetTextRequest
|
|
348
|
+
{
|
|
349
|
+
LabelGuid = labelGuid,
|
|
350
|
+
CultureName = "it-IT",
|
|
351
|
+
PrimaryDefaultText = "Hello"
|
|
352
|
+
});
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
Leggi diversi testi:
|
|
356
|
+
|
|
357
|
+
```csharp
|
|
358
|
+
var texts = client.GetTexts(requests);
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
Crea o aggiorna un testo:
|
|
362
|
+
|
|
363
|
+
```csharp
|
|
364
|
+
client.SetText(new SetTextRequest
|
|
365
|
+
{
|
|
366
|
+
LabelGuid = labelGuid,
|
|
367
|
+
CultureName = "it-IT",
|
|
368
|
+
Value = "Ciao"
|
|
369
|
+
});
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
## Allegati
|
|
373
|
+
|
|
374
|
+
Carica un file e allegalo a un'entità:
|
|
375
|
+
|
|
376
|
+
```csharp
|
|
377
|
+
var files = client.UploadAttachment(
|
|
378
|
+
created,
|
|
379
|
+
@"C:\temp\contract.pdf",
|
|
380
|
+
title: "Contract");
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
Elenca gli allegati per un'entità:
|
|
384
|
+
|
|
385
|
+
```csharp
|
|
386
|
+
var attachments = client.GetAttachments(created);
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
Scarica un allegato:
|
|
390
|
+
|
|
391
|
+
```csharp
|
|
392
|
+
var bytes = client.DownloadAttachment(attachments[0].Guid);
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
Scarica direttamente in un file:
|
|
396
|
+
|
|
397
|
+
```csharp
|
|
398
|
+
client.DownloadAttachmentToFile(
|
|
399
|
+
attachments[0].Guid,
|
|
400
|
+
@"C:\temp\downloaded-contract.pdf");
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
Il caricamento degli allegati e il download privato richiedono il modulo degli allegati e la configurazione di autenticazione appropriata.
|
|
404
|
+
|
|
405
|
+
## HttpClient personalizzato
|
|
406
|
+
|
|
407
|
+
Utilizza una factory personalizzata quando i test o l'integrazione dell'host richiedono intestazioni, gestori o certificati speciali:
|
|
408
|
+
|
|
409
|
+
```csharp
|
|
410
|
+
var client = new ChillSharpClient(
|
|
411
|
+
"http://localhost:5000/api/chill",
|
|
412
|
+
() =>
|
|
413
|
+
{
|
|
414
|
+
var httpClient = new HttpClient();
|
|
415
|
+
httpClient.DefaultRequestHeaders.Add("X-Test-User", "integration-user");
|
|
416
|
+
return httpClient;
|
|
417
|
+
});
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
La factory viene richiamata per ogni richiesta. Elimina eventuali risorse esterne in base alla strategia `HttpClient` della tua applicazione.
|
|
421
|
+
|
|
422
|
+
## Errori
|
|
423
|
+
|
|
424
|
+
Gli errori del server e gli errori di trasporto sono racchiusi in `ChillClientException`.
|
|
425
|
+
|
|
426
|
+
```csharp
|
|
427
|
+
try
|
|
428
|
+
{
|
|
429
|
+
client.Create(blog);
|
|
430
|
+
}
|
|
431
|
+
catch (ChillClientException ex)
|
|
432
|
+
{
|
|
433
|
+
Console.WriteLine(ex.Message);
|
|
434
|
+
}
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
Per gli errori HTTP, il messaggio di eccezione include il codice di stato e il corpo della risposta, se disponibile.
|
|
438
|
+
|
|
439
|
+
## Risoluzione dell'endpoint
|
|
440
|
+
|
|
441
|
+
Da un URL principale che termina con `/chill`, il client risolve automaticamente gli endpoint del modulo:
|
|
442
|
+
|
|
443
|
+
| Modulo | Endpoint risolto |
|
|
444
|
+
| --- | --- |
|
|
445
|
+
| Nucleo | |
|
|
446
|
+
| Aut. | |
|
|
447
|
+
| Schema | |
|
|
448
|
+
| I18n | |
|
|
449
|
+
| Allegato | |
|
|
450
|
+
|
|
451
|
+
Per esempio:
|
|
452
|
+
|
|
453
|
+
```csharp
|
|
454
|
+
var client = new ChillSharpClient("http://localhost:5000/api/chill");
|
|
455
|
+
client.GetMenu(); // calls /api/chill-schema/get-menu
|
|
456
|
+
client.LoginAuthAccount(...); // calls /api/chill-auth/login
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
## Documentazione correlata
|
|
460
|
+
|
|
461
|
+
- [Modello di autenticazione/README.md](./AuthenticationModel/README.md)
|
|
462
|
+
- [MenuGuide/README.md](../MenuGuide/README.md)
|
|
463
|
+
- [Modelloallegato/README.md](./AttachmentModel/README.md)
|
|
464
|
+
- [ClientGeneration/README.md](./ClientGeneration/README.md)
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Generare Librerie Client
|
|
2
|
+
|
|
3
|
+
Versione originale in inglese: [English](../../ClientGeneration/README.md)
|
|
4
|
+
|
|
5
|
+
Questa sezione spiega come generare librerie client non-.NET per un host ChillSharp.
|
|
6
|
+
|
|
7
|
+
Target coperti qui:
|
|
8
|
+
|
|
9
|
+
- TypeScript
|
|
10
|
+
- Python
|
|
11
|
+
|
|
12
|
+
Per client generici gia pronti inclusi in questo repository, vedi:
|
|
13
|
+
|
|
14
|
+
- [../../../ext/chill-sharp-ts-client/README.md](../../../ext/chill-sharp-ts-client/README.md)
|
|
15
|
+
- [../../../ext/chill-sharp-react-client/README.md](../../../ext/chill-sharp-react-client/README.md)
|
|
16
|
+
- [../../../ext/chill-sharp-vue-client/README.md](../../../ext/chill-sharp-vue-client/README.md)
|
|
17
|
+
- [../../../ext/chill-sharp-ng-client/README.md](../../../ext/chill-sharp-ng-client/README.md)
|
|
18
|
+
- [../../../ext/chill-sharp-py-client/README.md](../../../ext/chill-sharp-py-client/README.md)
|
|
19
|
+
|
|
20
|
+
Questi pacchetti sono wrapper generici della HTTP API standard di ChillSharp. Il resto di questo documento copre la generazione di client specifici per host a partire da OpenAPI.
|
|
21
|
+
|
|
22
|
+
## Vincolo Importante
|
|
23
|
+
|
|
24
|
+
ChillSharp non pubblica automaticamente un documento OpenAPI da solo.
|
|
25
|
+
|
|
26
|
+
La generazione client dipende quindi dal fatto che l'applicazione host ne esponga uno tramite il normale tooling Swagger/OpenAPI di ASP.NET Core.
|
|
27
|
+
|
|
28
|
+
## 1. Esporre OpenAPI Nell'Host
|
|
29
|
+
|
|
30
|
+
Aggiungi la generazione Swagger all'applicazione host:
|
|
31
|
+
|
|
32
|
+
```csharp
|
|
33
|
+
builder.Services.AddEndpointsApiExplorer();
|
|
34
|
+
builder.Services.AddSwaggerGen();
|
|
35
|
+
|
|
36
|
+
var app = builder.Build();
|
|
37
|
+
|
|
38
|
+
app.UseSwagger();
|
|
39
|
+
app.UseSwaggerUI();
|
|
40
|
+
app.MapChillApi();
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Con questa configurazione, un documento Swagger JSON standard e di solito disponibile a:
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
/swagger/v1/swagger.json
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Esempio:
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
http://localhost:5000/swagger/v1/swagger.json
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## 2. Decidere Cosa Deve Coprire Il Client Generato
|
|
56
|
+
|
|
57
|
+
Un host ChillSharp puo esporre varie superfici:
|
|
58
|
+
|
|
59
|
+
- core Chill API
|
|
60
|
+
- endpoint auth/account
|
|
61
|
+
- endpoint di gestione auth
|
|
62
|
+
- endpoint i18n
|
|
63
|
+
|
|
64
|
+
Se tutti i moduli sono registrati nello stesso host e Swagger e abilitato globalmente, il documento OpenAPI generato puo includerli tutti.
|
|
65
|
+
|
|
66
|
+
## 3. Generare Un Client TypeScript
|
|
67
|
+
|
|
68
|
+
Un'opzione pratica e `openapi-generator-cli`.
|
|
69
|
+
|
|
70
|
+
Installalo o usalo tramite il package manager che preferisci, poi esegui:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
openapi-generator-cli generate \
|
|
74
|
+
-i http://localhost:5000/swagger/v1/swagger.json \
|
|
75
|
+
-g typescript-fetch \
|
|
76
|
+
-o generated/ts-client
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Altri generatori TypeScript utili includono:
|
|
80
|
+
|
|
81
|
+
- `typescript-axios`
|
|
82
|
+
- `typescript-angular`
|
|
83
|
+
|
|
84
|
+
Esempio:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
openapi-generator-cli generate \
|
|
88
|
+
-i http://localhost:5000/swagger/v1/swagger.json \
|
|
89
|
+
-g typescript-axios \
|
|
90
|
+
-o generated/ts-client
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## 4. Generare Un Client Python
|
|
94
|
+
|
|
95
|
+
Usando lo stesso documento OpenAPI:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
openapi-generator-cli generate \
|
|
99
|
+
-i http://localhost:5000/swagger/v1/swagger.json \
|
|
100
|
+
-g python \
|
|
101
|
+
-o generated/python-client
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Questo produce un pacchetto Python con model request e wrapper API basati sulla descrizione OpenAPI pubblicata.
|
|
105
|
+
|
|
106
|
+
## 5. Note Specifiche Dell'Host
|
|
107
|
+
|
|
108
|
+
I client generati sono accurati solo quanto il documento OpenAPI dell'host.
|
|
109
|
+
|
|
110
|
+
Questo significa che:
|
|
111
|
+
|
|
112
|
+
- se l'host non espone Swagger, non c'e nulla da cui generare
|
|
113
|
+
- se l'host esclude alcuni controller, quegli endpoint non compariranno nel client generato
|
|
114
|
+
- se auth e abilitata, il client generato dovra comunque essere configurato per gestire i bearer token
|
|
115
|
+
|
|
116
|
+
## 6. Workflow Consigliato
|
|
117
|
+
|
|
118
|
+
Per TypeScript e Python, il workflow consigliato e:
|
|
119
|
+
|
|
120
|
+
1. build dell'host ChillSharp
|
|
121
|
+
2. aggiungere Swagger/OpenAPI all'host
|
|
122
|
+
3. avviare l'host localmente o in CI
|
|
123
|
+
4. esportare `/swagger/v1/swagger.json`
|
|
124
|
+
5. generare la libreria client
|
|
125
|
+
6. pubblicare o committare il client generato secondo il workflow del progetto
|
|
126
|
+
|
|
127
|
+
## 7. Quando Preferire `ChillSharp.Client`
|
|
128
|
+
|
|
129
|
+
Se il consumer e .NET, preferisci `ChillSharp.Client`.
|
|
130
|
+
|
|
131
|
+
Usa client generati TypeScript o Python quando:
|
|
132
|
+
|
|
133
|
+
- il frontend e browser-based e non .NET
|
|
134
|
+
- ti servono automazioni o integrazioni Python
|
|
135
|
+
- vuoi client fortemente tipizzati in ambienti non-.NET
|
|
136
|
+
|
|
137
|
+
Se non ti servono tipi generati specifici dell'host, puoi anche usare i client generici presenti in `ext/`:
|
|
138
|
+
|
|
139
|
+
- `ext/chill-sharp-ts-client`
|
|
140
|
+
- `ext/chill-sharp-react-client`
|
|
141
|
+
- `ext/chill-sharp-vue-client`
|
|
142
|
+
- `ext/chill-sharp-ng-client`
|
|
143
|
+
- `ext/chill-sharp-py-client`
|
|
144
|
+
|
|
145
|
+
## 8. Indicazioni Di Stabilita
|
|
146
|
+
|
|
147
|
+
Se prevedi di generare client regolarmente:
|
|
148
|
+
|
|
149
|
+
- mantieni stabili le route pubbliche dell'host
|
|
150
|
+
- versiona l'API
|
|
151
|
+
- rigenera i client come parte del workflow di release
|
|
152
|
+
- tratta i cambi di shape OpenAPI come cambiamenti di contratto pubblico
|