orm

package
v0.10.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 11, 2023 License: MIT Imports: 3 Imported by: 1

README

DALgo ORM

Object-Relational Mapping (ORM) is a technique that lets you query and manipulate data from a database using an object-oriented paradigm.

This ORM works hand to hand with DALgo DAL.

Firs of all you need to define fields of your data objects:

package schema

import (
	"github.com/strongo/dalgo/dal"
    "github.com/strongo/dalgo/orm"
)

type UserFields struct {
	Email     orm.FieldDefinition[string]
	FirstName orm.FieldDefinition[string]
	LastName  orm.FieldDefinition[string]
}

type UserCollection struct {
    Fields UserFields
}
func (v UserCollection) CollectionRef() dal.CollectionRef {
	return dal.CollectionRef{Name: "Users"}
}

// This will be used to query data
var Users = UserCollection{
	Fields: UserFields{
        Email:     orm.NewFieldDefinition("email", orm.KindString),
        FirstName: orm.NewFieldDefinition("first_name", orm.KindString),
        LastName:  orm.NewFieldDefinition("last_name", orm.KindString),
    },
} 

Now you can create queries to database using strongly typed code.

For example imaging we'd like to select a user with specific email:

package example

import (
    "github.com/strongo/dalgo/dal"
    "github.com/strongo/dalgo/orm"
)

func QueryUserIDByEmail(email string) *dal.Query {
    return schema.Users.Query().
        Where(schema.Users.Field.Email.EqualTo("test@example.com")).
        Limit(1).
        SelectKeysOnly(schema.Users.IDKind())
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Collection added in v0.2.27

type Collection interface {
	CollectionRef() dal.CollectionRef
	Fields() []Field
}

type Field

type Field interface {
	Name() string
	Type() string
	IsRequired() bool
	CompareTo(operator dal.Operator, v dal.Expression) dal.Condition
}

Field defines field

type FieldDefinition added in v0.2.27

type FieldDefinition[T any] struct {
	// contains filtered or unexported fields
}

func NewField added in v0.2.27

func NewField[T any](name string, options ...FieldOption[T]) FieldDefinition[T]

func NewFieldWithType added in v0.2.27

func NewFieldWithType[T any](name, valueType string, options ...FieldOption[T]) FieldDefinition[T]

func (FieldDefinition[T]) CompareTo added in v0.2.27

func (v FieldDefinition[T]) CompareTo(operator dal.Operator, expression dal.Expression) dal.Condition

func (FieldDefinition[T]) DefaultValue added in v0.2.27

func (v FieldDefinition[T]) DefaultValue() T

func (FieldDefinition[T]) EqualTo added in v0.2.27

func (v FieldDefinition[T]) EqualTo(value T) dal.Condition

func (FieldDefinition[T]) IsRequired added in v0.2.27

func (v FieldDefinition[T]) IsRequired() bool

func (FieldDefinition[T]) Name added in v0.2.27

func (v FieldDefinition[T]) Name() string

func (FieldDefinition[T]) Type added in v0.2.27

func (v FieldDefinition[T]) Type() string

type FieldOption added in v0.2.27

type FieldOption[T any] func(f FieldDefinition[T]) FieldDefinition[T]

func Default added in v0.2.27

func Default[T any](value T) FieldOption[T]

func Required added in v0.2.27

func Required[T any]() FieldOption[T]

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL