mobone

package module
v2.0.8 Latest Latest
Warning

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

Go to latest
Published: Jan 16, 2025 License: MIT Imports: 7 Imported by: 0

README

Mobone

Пакет для работы с базой PostgreSQL

Пакет получает структуру через которую можно создавать, обновлять или удалять записи в базе Для структур предусмотрены следующие интерфейсы:

  • ListModelI для поиска товаров (ListColumnMap какие поля вернуть, DefaultSortColumns сортировка)
  • GetModelI для получения одного товара (ListColumnMap какие поля вернуть, PKColumnMap primary поля, по ним идет поиск)
  • CreateModelI для создания записи (CreateColumnMap какие поля записать в базу, ReturningColumnMap какие поля должны вернуться)
  • UpdateModelI для обновления записи (UpdateColumnMap, какие поля обновить, PKColumnMap primary поля по которым будет поиск)

Для работы необходимо создать нужные структуры по этим интерфейсам

Примеры структур

для ListModelI и GetModelI
package model

import "time"

type Select struct {
	Id        int
	Name      string
	Test      bool
	Json      string
	CreatedAt time.Time
	UpdatedAt time.Time
}

func (m *Select) ListColumnMap() map[string]any {
	return map[string]any{
		"id":         &m.Id,
		"name":       &m.Name,
		"test":       &m.Test,
		"json":       &m.Json,
		"created_at": &m.CreatedAt,
		"updated_at": &m.UpdatedAt,
	}
}

func (m *Select) PKColumnMap() map[string]any {
	return map[string]any{
		"id": m.Id,
	}
}

func (m *Select) DefaultSortColumns() []string {
	return []string{"id"}
}
для CreateModelI и UpdateModelI
package model

import "time"

type Upsert struct {
	Id        int
	Name      string
	Test      bool
	Json      string
	CreatedAt time.Time
	UpdatedAt time.Time
}

func (m *Upsert) CreateColumnMap() map[string]any {
	result := make(map[string]any, 5)

	result["name"] = m.Name
	result["test"] = m.Test
	result["json"] = m.Json
	result["created_at"] = m.CreatedAt
	result["updated_at"] = m.UpdatedAt

	return result
}

func (m *Upsert) UpdateColumnMap() map[string]any {
	return m.CreateColumnMap()
}

func (m *Upsert) ReturningColumnMap() map[string]any {
	return nil
}

func (m *Upsert) PKColumnMap() map[string]any {
	return map[string]any{
		"id": m.Id,
	}
}

Примеры по использованию методов Mobone

Получение одного элемента
m := &model.Select{
    Id: 1,
}

modelStore := mobone.ModelStore{pgxPool, queryBuilder, "tableName"}

found, err := modelStore.Get(context.Background(), m)

после запроса в поля Select будут внесены записи в соответствии с ListColumnMap()

Получение списка
conditions := map[string]any{
    "Name": "Test Model",
}
conditionExps := map[string][]any{}

items := make([]*model.Select, 0)

modelStore := mobone.ModelStore{pgxPool, queryBuilder, "tableName"}

totalCount, err := modelStore.List(context.Background(), mobone.ListParams{
    Conditions:           conditions,
    ConditionExpressions: conditionExps,
    Page:                 0,
    PageSize:             5,
    WithTotalCount:       false,
    OnlyCount:            false,
    Sort:                 []string{"id"},
}, func(add bool) mobone.ListModelI {
    item := &model.Select{}
    if add {
        items = append(items, item)
    }
    return item
})

после запроса в поля Select будут внесены записи в соответствии с ListColumnMap()

  • Page начинается с 0
Создание записи
upsertModel := &model.Upsert{
    Name:      "Test Model",
    Test:      true,
    Json:      `{"test": true}`,
    CreatedAt: time.Now(),
    UpdatedAt: time.Now(),
}

modelStore := mobone.ModelStore{pgxPool, queryBuilder, "tableName"}

err := modelStore.Create(context.Background(), upsertModel)

после записи в базу в Upsert вернутся поля указанные в его ReturningColumnMap()

Обновление записи
upsertModel := &model.Upsert{
    Id:   1,
    Name: "Test Model",
    Test: false,
    Json: `{"test": false}`,
}

modelStore := mobone.ModelStore{pgxPool, queryBuilder, "tableName"}

err := modelStore.Update(context.Background(), upsertModel)

Для обновления, поиск записи производится по полям указанным в PKColumnMap()

Удаление записи
modelStore := mobone.ModelStore{pgxPool, queryBuilder, "tableName"}

deleteModel := &model.Upsert{
    Id: 1,
}

err := modelStore.Delete(context.Background(), deleteModel)

Для удаления, поиск записи производится по полям указанным в PKColumnMap()

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CreateModelI

type CreateModelI interface {
	CreateColumnMap() map[string]any
	ReturningColumnMap() map[string]any
}

type DeleteModelI added in v2.0.7

type DeleteModelI interface {
	PKColumnMap() map[string]any
}

type GetModelI

type GetModelI interface {
	ListColumnMap() map[string]any
	PKColumnMap() map[string]any
}

type ListModelI

type ListModelI interface {
	ListColumnMap() map[string]any
	DefaultSortColumns() []string
}

type ListParams

type ListParams struct {
	Conditions           map[string]any
	ConditionExpressions map[string][]any
	Distinct             bool
	Columns              []string
	Page                 int64
	PageSize             int64
	WithTotalCount       bool
	OnlyCount            bool
	Sort                 []string
}

type ModelStore

type ModelStore struct {
	Con       *pgxpool.Pool
	QB        squirrel.StatementBuilderType
	TableName string
}

func (*ModelStore) Create

func (s *ModelStore) Create(ctx context.Context, m CreateModelI) error

func (*ModelStore) CreateIfNotExist

func (s *ModelStore) CreateIfNotExist(ctx context.Context, m UpdateCreateModelI) error

func (*ModelStore) Delete

func (s *ModelStore) Delete(ctx context.Context, m DeleteModelI) error

func (*ModelStore) Get

func (s *ModelStore) Get(ctx context.Context, m GetModelI) (bool, error)

func (*ModelStore) List

func (s *ModelStore) List(ctx context.Context, params ListParams, itemConstructor func(add bool) ListModelI) (int64, error)

func (*ModelStore) Update

func (s *ModelStore) Update(ctx context.Context, m UpdateModelI) error

func (*ModelStore) UpdateOrCreate

func (s *ModelStore) UpdateOrCreate(ctx context.Context, m UpdateCreateModelI) error

type UpdateCreateModelI

type UpdateCreateModelI interface {
	UpdateModelI
	CreateModelI
}

type UpdateModelI

type UpdateModelI interface {
	UpdateColumnMap() map[string]any
	PKColumnMap() map[string]any
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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