Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions core/schema_reflect_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package elemental

import (
"go.mongodb.org/mongo-driver/bson/primitive"
"reflect"
)

// Inbuilt types

var Slice = reflect.Slice
var Map = reflect.Map
var Struct = reflect.Struct
var Interface = reflect.Interface
var Array = reflect.Array
var Bool = reflect.Bool
var Int = reflect.Int
var Int32 = reflect.Int32
var Int64 = reflect.Int64
var Uint = reflect.Uint
var Uint8 = reflect.Uint8
var Uint16 = reflect.Uint16
var Uint32 = reflect.Uint32
var Uint64 = reflect.Uint64
var Float32 = reflect.Float32
var Float64 = reflect.Float64
var String = reflect.String

// Custom types

var ObjectID = reflect.TypeOf(primitive.NilObjectID).Kind()
2 changes: 1 addition & 1 deletion core/schema_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ type SchemaOptions struct {
}

type Field struct {
Type reflect.Kind // Type of the field. Can be any of the reflect.Kind types
Type reflect.Kind // Type of the field. Can be of reflect.Kind, an alias defined within elemental such as elemental.String or a custom reflection
Schema *Schema // Defines a subschema for the field if it is a subdocument
Required bool // Whether the field is required or not when creating a new document
Default any // Default value for the field when creating a new document
Expand Down
3 changes: 1 addition & 2 deletions tests/core_audit_test.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package tests

import (
"reflect"
"testing"

pc "github.com/akalanka47000/go-modkit/parallel_convey"
Expand All @@ -19,7 +18,7 @@ func TestCoreAudit(t *testing.T) {

KingdomModel := elemental.NewModel[Kingdom](entity, elemental.NewSchema(map[string]elemental.Field{
"Name": {
Type: reflect.String,
Type: elemental.String,
Required: true,
},
})).SetDatabase(t.Name())
Expand Down
3 changes: 1 addition & 2 deletions tests/core_middleware_test.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package tests

import (
"reflect"
"testing"

elemental "github.com/elcengine/elemental/core"
Expand All @@ -21,7 +20,7 @@ func TestCoreMiddleware(t *testing.T) {

CastleModel := elemental.NewModel[Castle]("Castle-For-Middleware", elemental.NewSchema(map[string]elemental.Field{
"Name": {
Type: reflect.String,
Type: elemental.String,
Required: true,
},
})).SetDatabase(t.Name())
Expand Down
17 changes: 8 additions & 9 deletions tests/core_schema_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package tests

import (
"fmt"
"reflect"
"regexp"
"testing"

Expand Down Expand Up @@ -31,7 +30,7 @@ func TestCoreSchemaOptions(t *testing.T) {
Convey("Collection should be a plural of the model name if not specified", func() {
CastleModel := elemental.NewModel[Castle]("Castle", elemental.NewSchema(map[string]elemental.Field{
"Name": {
Type: reflect.String,
Type: elemental.String,
Required: true,
},
})).SetDatabase(t.Name())
Expand All @@ -44,7 +43,7 @@ func TestCoreSchemaOptions(t *testing.T) {
collectionOptions.SetSizeInBytes(1024)
KingdomModel := elemental.NewModel[Kingdom]("Kingdom-Temporary", elemental.NewSchema(map[string]elemental.Field{
"Name": {
Type: reflect.String,
Type: elemental.String,
Required: true,
},
}, elemental.SchemaOptions{
Expand All @@ -58,7 +57,7 @@ func TestCoreSchemaOptions(t *testing.T) {
DATABASE := fmt.Sprintf("%s_%s", t.Name(), "temporary_1")
MonsterModel := elemental.NewModel[Monster]("Monster-Temporary", elemental.NewSchema(map[string]elemental.Field{
"Name": {
Type: reflect.String,
Type: elemental.String,
Required: true,
},
}, elemental.SchemaOptions{
Expand All @@ -79,7 +78,7 @@ func TestCoreSchemaOptions(t *testing.T) {
Convey("Required field with default", func() {
Model := elemental.NewModel[User](uuid.NewString(), elemental.NewSchema(map[string]elemental.Field{
"Name": {
Type: reflect.String,
Type: elemental.String,
Required: true,
Default: "Placeholder",
},
Expand All @@ -94,7 +93,7 @@ func TestCoreSchemaOptions(t *testing.T) {
Convey("Min check", func() {
Model := elemental.NewModel[User](uuid.NewString(), elemental.NewSchema(map[string]elemental.Field{
"Age": {
Type: reflect.Int,
Type: elemental.Int,
Min: 10,
},
}))
Expand All @@ -111,7 +110,7 @@ func TestCoreSchemaOptions(t *testing.T) {
Convey("Max check", func() {
Model := elemental.NewModel[User](uuid.NewString(), elemental.NewSchema(map[string]elemental.Field{
"Age": {
Type: reflect.Int,
Type: elemental.Int,
Max: 120,
},
}))
Expand All @@ -128,7 +127,7 @@ func TestCoreSchemaOptions(t *testing.T) {
Convey("Length check", func() {
Model := elemental.NewModel[User](uuid.NewString(), elemental.NewSchema(map[string]elemental.Field{
"Name": {
Type: reflect.String,
Type: elemental.String,
Length: 10,
},
}))
Expand All @@ -142,7 +141,7 @@ func TestCoreSchemaOptions(t *testing.T) {
Convey("Regex check", func() {
Model := elemental.NewModel[User](uuid.NewString(), elemental.NewSchema(map[string]elemental.Field{
"Name": {
Type: reflect.String,
Type: elemental.String,
Regex: regexp.MustCompile("^[A-Z]+$"),
},
}))
Expand Down
3 changes: 1 addition & 2 deletions tests/core_triggers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package tests

import (
"context"
"reflect"
"testing"
"time"

Expand All @@ -20,7 +19,7 @@ func TestCoreTriggers(t *testing.T) {

CastleModel := elemental.NewModel[Castle]("Castle-For-Triggers", elemental.NewSchema(map[string]elemental.Field{
"Name": {
Type: reflect.String,
Type: elemental.String,
Required: true,
},
})).SetDatabase(t.Name())
Expand Down
35 changes: 17 additions & 18 deletions tests/fixtures/fixtures.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
package fixtures

import (
"reflect"
"time"

elemental "github.com/elcengine/elemental/core"
Expand Down Expand Up @@ -70,23 +69,23 @@ const DefaultUserAge = 18

var UserModel = elemental.NewModel[User]("User", elemental.NewSchema(map[string]elemental.Field{
"Name": {
Type: reflect.String,
Type: elemental.String,
Required: true,
Index: options.Index().SetUnique(true),
},
"Age": {
Type: reflect.Int,
Type: elemental.Int,
Default: DefaultUserAge,
},
"Occupation": {
Type: reflect.String,
Type: elemental.String,
},
"Weapons": {
Type: reflect.Slice,
Type: elemental.Slice,
Default: []string{},
},
"Retired": {
Type: reflect.Bool,
Type: elemental.Bool,
Default: false,
},
}, elemental.SchemaOptions{
Expand All @@ -95,30 +94,30 @@ var UserModel = elemental.NewModel[User]("User", elemental.NewSchema(map[string]

var MonsterModel = elemental.NewModel[Monster]("Monster", elemental.NewSchema(map[string]elemental.Field{
"Name": {
Type: reflect.String,
Type: elemental.String,
Required: true,
},
"Category": {
Type: reflect.String,
Type: elemental.String,
},
"Weaknesses": {
Type: reflect.Struct,
Type: elemental.Struct,
Schema: lo.ToPtr(elemental.NewSchema(map[string]elemental.Field{
"Oils": {
Type: reflect.Slice,
Type: elemental.Slice,
},
"Signs": {
Type: reflect.Slice,
Type: elemental.Slice,
Default: []string{"Igni"},
},
"Decoctions": {
Type: reflect.Slice,
Type: elemental.Slice,
},
"Bombs": {
Type: reflect.Slice,
Type: elemental.Slice,
},
"InvulnerableTo": {
Type: reflect.Slice,
Type: elemental.Slice,
Default: []string{"Steel"},
},
})),
Expand All @@ -129,7 +128,7 @@ var MonsterModel = elemental.NewModel[Monster]("Monster", elemental.NewSchema(ma

var KingdomModel = elemental.NewModel[Kingdom]("Kingdom", elemental.NewSchema(map[string]elemental.Field{
"Name": {
Type: reflect.String,
Type: elemental.String,
Required: true,
},
}, elemental.SchemaOptions{
Expand All @@ -138,11 +137,11 @@ var KingdomModel = elemental.NewModel[Kingdom]("Kingdom", elemental.NewSchema(ma

var BestiaryModel = elemental.NewModel[Bestiary]("Bestiary", elemental.NewSchema(map[string]elemental.Field{
"Monster": {
Type: reflect.Struct,
Type: elemental.Struct,
Ref: "Monster",
},
"Kingdom": {
Type: reflect.Struct,
Type: elemental.Struct,
Ref: "Kingdom",
},
}, elemental.SchemaOptions{
Expand All @@ -151,7 +150,7 @@ var BestiaryModel = elemental.NewModel[Bestiary]("Bestiary", elemental.NewSchema

var BestiaryWithIDModel = elemental.NewModel[BestiaryWithID]("BestiaryWithID", elemental.NewSchema(map[string]elemental.Field{
"MonsterID": {
Type: reflect.String,
Type: elemental.String,
Ref: "Monster",
IsRefID: true,
},
Expand Down