Skip to content

Latest commit

 

History

History
81 lines (63 loc) · 2.32 KB

README.md

File metadata and controls

81 lines (63 loc) · 2.32 KB

Финализация моделей данных (фильтрация полей модели в зависомости от тегов)

Теги финализации:

group:"group1,group2...groupN" - группы при которых поле включается в результирующую модель

exclude:"equal:FileName" - условия исключения поля (equal - сравнение значения текущего поля с значение поля FileName в текущей модели данных)

export:"FileName" - используется для замены значения поля значение поля вложенной структуры (только для структур)

Пример:

package main

import (
	"time"
	
	"github.com/itrabbit/just"	
	"github.com/itrabbit/just/components/finalizer"
)

// Структура телефонного номера
type PhoneNumber struct{
	E164 string `json:"e164"` 
}

// Структура пользователя
type User struct {
	ID          uint64          `json:"id"`
	Phone       *PhoneNumber    `json:"phone,omitempty" group:"private" export:"E164"`
	CreatedAt   time.Time       `json:"created_at" group:"private"`
	UpdatedAt   time.Time       `json:"update_at" group:"private" exclude:"equal:CreatedAt"`
}

func main() {
	// Создаем приложение
	a := just.New()
	
	// Производим замену стандартных сериализаторов
	finalizer.ReplaceSerializers(a)	
    
    // Обработка GET запроса
    a.GET("/{group:enum(public,private)}", func(c *just.Context) just.IResponse {
    	now := time.Now()
    	return c.Serializer().
    		    Response(200, finalizer.Input(
    		    	&User{
    		    		ID: 1,
    		    		Phone: &PhoneNumber{
    		    			E164: "+79000000000",
    		    		},
    		    		CreatedAt: now,
    		    		UpdatedAt: now,
    		    	}, 
    		    	c.ParamDef("group", "public"),
    		    ))
    })
 
    // Запускаем приложение
    a.Run(":80")
}

Результат GET запроса http://localhost/public

{
    "id": 1
}

Результат GET запроса http://localhost/private

{
    "id": 1,
    "phone": "+79000000000",
    "created_at": "2017-12-11T22:23:36.709146+05:00"    
}