aboutsummaryrefslogtreecommitdiff
path: root/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/README.md
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2024-11-11 01:12:29 +0800
committerYuqian Yang <crupest@crupest.life>2024-12-19 21:42:01 +0800
commitf9aa02ec1a4c24e80a206857d4f68198bb027bb4 (patch)
tree5994f0a62733b13f9f330e3515260ae20dc4a0bd /dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/README.md
parent7b4d49e4bbdff6ddf1f8f7e937130e700024d5e9 (diff)
downloadcrupest-f9aa02ec1a4c24e80a206857d4f68198bb027bb4.tar.gz
crupest-f9aa02ec1a4c24e80a206857d4f68198bb027bb4.tar.bz2
crupest-f9aa02ec1a4c24e80a206857d4f68198bb027bb4.zip
HALF WORK: 2024.12.19
Re-organize file structure.
Diffstat (limited to 'dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/README.md')
-rw-r--r--dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/README.md47
1 files changed, 47 insertions, 0 deletions
diff --git a/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/README.md b/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/README.md
new file mode 100644
index 0000000..b008ea7
--- /dev/null
+++ b/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/README.md
@@ -0,0 +1,47 @@
+# CRUD Technic Notes
+
+## Overview
+
+The ultimate CRUD scaffold finally comes.
+
+## Database Pipeline
+
+### Select
+
+1. Create select `what`, where clause, order clause, `Offset` and `Limit`.
+2. Check clauses' related columns are valid.
+3. Generate sql string and param list.
+4. Convert param list to `Dapper` dynamic params with proper type conversion in `IColumnTypeInfo`.
+5. Execute sql and get `dynamic`s.
+6. (Optional) Convert `dynamic`s to `TEntity`s.
+
+### Insert
+
+1. Create insert clause.
+2. Check clauses' related columns are valid.
+3. Create a real empty insert clause.
+4. For each column:
+ 1. If insert item exists and value is not null but the column `IsGenerated` is true, throw exception.
+ 2. If insert item does not exist or value is `null`, use default value generator to generate value. However, `DbNullValue` always means use `NULL` for that column.
+ 3. If value is `null` and the column `IsAutoIncrement` is true, skip to next column.
+ 4. Coerce null to `DbNullValue`.
+ 5. Run validator to validate the value.
+ 6. If value is `DbNullValue`, `IsNotNull` is true, throw exception.
+ 7. Add column and value to real insert clause.
+5. Generate sql string and param list.
+6. Convert param list to `Dapper` dynamic params with proper type conversion in `IColumnTypeInfo`.
+7. Execute sql and return `KeyColumn` value.
+
+### Update
+
+1. Create update clause, where clause.
+2. Check clauses' related columns are valid. Then generate sql string and param list.
+3. Create a real empty update clause.
+4. For each column:
+ 1. If update item exists and value is not null but the column `IsNoUpdate` is true, throw exception.
+ 2. Invoke validator to validate the value.
+ 3. If `IsNotNull` is true and value is `DbNullValue`, throw exception.
+ 4. Add column and value to real update clause.
+5. Generate sql string and param list.
+6. Convert param list to `Dapper` dynamic params with proper type conversion in `IColumnTypeInfo`.
+7. Execute sql and return count of affected rows.