go-duck-cli 1.4.18 → 1.4.19

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "go-duck-cli",
3
- "version": "1.4.18",
3
+ "version": "1.4.19",
4
4
  "description": "The Ultimate Evolutionary Go Microservice Scaffolder.",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -34,7 +34,6 @@
34
34
  "generator",
35
35
  "go-duck"
36
36
  ],
37
-
38
37
  "repository": {
39
38
  "type": "git",
40
39
  "url": "git+https://github.com/heavenscode/go-duck.git"
@@ -4,6 +4,7 @@ import (
4
4
  "net/http"
5
5
  "strconv"
6
6
  "strings"
7
+ "regexp"
7
8
  {{#if isSearchable}}
8
9
  "context"
9
10
  {{/if}}
@@ -215,10 +216,10 @@ func (ctrl *{{capitalize name}}Controller) GetAll(c *gin.Context) {
215
216
  db, _ := c.Get("tenantMongoDB")
216
217
  tenantDB := db.(*mongo.Database)
217
218
 
218
- // PostgREST-lite Filter Translation (Simple eq check for now)
219
+ // PostgREST-lite Filter Translation
219
220
  filter := bson.M{}
220
221
  for k, v := range c.Request.URL.Query() {
221
- if k != "page" && k != "size" && k != "federated" {
222
+ if k != "page" && k != "size" && k != "federated" && k != "sort" && k != "eager" {
222
223
  filter[k] = v[0]
223
224
  }
224
225
  }
@@ -298,6 +299,30 @@ func (ctrl *{{capitalize name}}Controller) GetAll(c *gin.Context) {
298
299
 
299
300
  var entities []models.{{capitalize name}}
300
301
  query := tenantDB.WithContext(ctx)
302
+
303
+ // Dynamic Eager Loading
304
+ if c.DefaultQuery("eager", "false") == "true" {
305
+ {{#each relationships}}
306
+ {{#if (eq from.entity ../name)}}
307
+ query = query.Preload("{{capitalize to.entity}}")
308
+ {{else}}
309
+ query = query.Preload("{{capitalize from.entity}}")
310
+ {{/if}}
311
+ {{/each}}
312
+ }
313
+
314
+ // Dynamic Filtering (JPA-style)
315
+ for k, v := range c.Request.URL.Query() {
316
+ if k != "page" && k != "size" && k != "federated" && k != "sort" && k != "eager" {
317
+ // Convert camelCase to snake_case for PostgreSQL
318
+ var matchFirstCap = regexp.MustCompile("(.)([A-Z][a-z]+)")
319
+ var matchAllCap = regexp.MustCompile("([a-z0-9])([A-Z])")
320
+ snake := matchFirstCap.ReplaceAllString(k, "${1}_${2}")
321
+ snake = matchAllCap.ReplaceAllString(snake, "${1}_${2}")
322
+ query = query.Where(strings.ToLower(snake)+" = ?", v[0])
323
+ }
324
+ }
325
+
301
326
  if sortParam != "" {
302
327
  query = query.Order(strings.ReplaceAll(sortParam, ",", " "))
303
328
  }