const ( MustMatch KeywordType = "must_match" Wildcard KeywordType = "wildcard" And KeywordCondition = "and" Or KeywordCondition = "or" )
const ( DatabaseDriverPOSTGRES = "postgres" DatabaseDriverMSSQL = "mssql" DatabaseDriverMYSQL = "mysql" )
const DateFormat = "2006-01-02 15:04:05"
const EnvFileName = ".env"
const EnvTestFileName = "test.env"
const TimeFormat = "15:04:05"
const TimeFormatRegex = "^([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$"
var ArrayBetweenM = func(field string, min int, max int) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_ARRAY_SIZE_BETWEEN", Message: fmt.Sprintf("The %v field field must contain between %v and %v item(s)", field, min, max), Data: map[string]interface{}{ "min": min, "max": max, }, } }
var ArrayM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_ARRAY", Message: "The " + field + " field must be array format", } }
var ArrayMaxM = func(field string, max int) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_ARRAY_SIZE_MAX", Message: fmt.Sprintf("The %v field must not be greater than %v item(s)", field, max), Data: max, } }
var ArrayMinM = func(field string, min int) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_ARRAY_SIZE_MIN", Message: fmt.Sprintf("The %v field required at least %v items", field, min), Data: min, } }
var ArraySizeM = func(field string, size int) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_ARRAY_SIZE", Message: fmt.Sprintf("The %v field must contain %v item(s)", field, size), Data: size, } }
var Base64M = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "BASE64", Message: "The " + field + " must be base64 format", } }
var BooleanM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_TYPE", Message: "The " + field + " field must be boolean", } }
var DateTimeAfterM = func(field string, after string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_DATE_TIME", Message: fmt.Sprintf("The "+field+` field must be after "%s"`, after), } }
var DateTimeBeforeM = func(field string, before string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_DATE_TIME", Message: fmt.Sprintf("The "+field+` field must be before "%s"`, before), } }
var DateTimeM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_DATE_TIME", Message: "The " + field + ` field must be in "yyyy-MM-dd HH:mm:ss" format`, } }
var EmailM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_EMAIL", Message: fmt.Sprintf("The %v field must be Email Address", field), } }
var EmailServiceParserError = Error{ Status: http.StatusInternalServerError, Code: "EMAIL_PARSING_ERROR", Message: "can not parse email", }
var EmailServiceSendFailed = Error{ Status: http.StatusBadGateway, Code: "SEND_EMAIL_ERROR", Message: "can not send email", }
var ExistsM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "NOT_EXISTS", Message: "The " + field + " field's value is not exists", } }
var FloatNumberBetweenM = func(field string, min float64, max float64) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_NUMBER_MIN", Message: fmt.Sprintf("The %v field must be from %v to %v", field, min, max), } }
var FloatNumberMaxM = func(field string, size float64) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_NUMBER_MAX", Message: fmt.Sprintf("The %v field must be less than or equal %v", field, size), Data: size, } }
var FloatNumberMinM = func(field string, size float64) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_NUMBER_MIN", Message: fmt.Sprintf("The %v field must be greater than or equal %v", field, size), Data: size, } }
var IPM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_IP", Message: fmt.Sprintf("The %v field must be IP Address", field), } }
var InM = func(field string, rules string) *IValidMessage { split := strings.Split(rules, "|") msg := strings.Join(split, ", ") return &IValidMessage{ Name: field, Code: "INVALID_VALUE_NOT_IN_LIST", Message: "The " + field + " field must be one of " + msg, Data: split, } }
var JSONArrayM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_JSON_ARRAY", Message: "The " + field + " field must be array format", } }
var JSONM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_JSON", Message: "The " + field + " field must be json", } }
var JSONObjectEmptyM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_JSON", Message: "The " + field + " field cannot be empty object", } }
var JSONObjectM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_JSON", Message: "The " + field + " field must be json object", } }
var MQError = Error{ Status: http.StatusInternalServerError, Code: "MQ_ERROR", Message: "mq internal error"}
var NumberBetweenM = func(field string, min int64, max int64) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_NUMBER_MIN", Message: fmt.Sprintf("The %v field must be from %v to %v", field, min, max), } }
var NumberM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_TYPE", Message: "The " + field + " field cannot parse to number", } }
var NumberMaxM = func(field string, size int64) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_NUMBER_MAX", Message: fmt.Sprintf("The %v field must be less than or equal %v", field, size), Data: size, } }
var NumberMinM = func(field string, size int64) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_NUMBER_MIN", Message: fmt.Sprintf("The %v field must be greater than or equal %v", field, size), Data: size, } }
var ObjectEmptyM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_TYPE", Message: "The " + field + " field cannot be empty object", } }
var RequiredM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "REQUIRED", Message: "The " + field + " field is required", } }
var StrMaxM = func(field string, max int) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_STRING_SIZE_MAX", Message: fmt.Sprintf("The %v field must not be longer than %v character(s)", field, max), Data: max, } }
var StrMinM = func(field string, min int) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_STRING_SIZE_MIN", Message: fmt.Sprintf("The %v field must not be shorter than %v character(s)", field, min), Data: min, } }
var StringContainM = func(field string, substr string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_STRING_CONTAIN", Message: fmt.Sprintf("The %v field must contain %v", field, substr), Data: substr, } }
var StringEndWithM = func(field string, substr string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_STRING_END_WITH", Message: fmt.Sprintf("The %v field must end with %v", field, substr), Data: substr, } }
var StringLowercaseM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_STRING_LOWERCASE", Message: fmt.Sprintf("The %v field must be lowercase", field), } }
var StringM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_TYPE", Message: "The " + field + " field must be string", } }
var StringNotContainM = func(field string, substr string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_STRING_NOT_CONTAIN", Message: fmt.Sprintf("The %v field must not contain %v", field, substr), Data: substr, } }
var StringStartWithM = func(field string, substr string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_STRING_START_WITH", Message: fmt.Sprintf("The %v field must start with %v", field, substr), Data: substr, } }
var StringUppercaseM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_STRING_UPPERCASE", Message: fmt.Sprintf("The %v field must be uppercase", field), } }
var TimeAfterM = func(field string, after string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_TIME", Message: fmt.Sprintf("The "+field+` field must be after "%s"`, after), } }
var TimeBeforeM = func(field string, before string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_TIME", Message: fmt.Sprintf("The "+field+` field must be before "%s"`, before), } }
var TimeM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_TIME", Message: "The " + field + ` field must be in "HH:mm:ss"" format`, } }
var URLM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "INVALID_URL", Message: "The " + field + " field is not url", } }
var UniqueM = func(field string) *IValidMessage { return &IValidMessage{ Name: field, Code: "UNIQUE", Message: "The " + field + " field's value already exists", } }
func CaptureError(ctx IContext, level sentry.Level, err error, args ...interface{})
func CaptureErrorEcho(ctx echo.Context, level sentry.Level, err error)
func CaptureHTTPError(ctx IHTTPContext, level sentry.Level, err error, args ...interface{})
func CaptureSimpleError(level sentry.Level, err error, args ...interface{})
func Core(options *HTTPContextOptions) func(next echo.HandlerFunc) echo.HandlerFunc
func Crash(err error) error
func ErrorToJson(err error) (m map[string]jsonErr)
func Fake(a interface{}) error
func GetBodyString(c echo.Context) []byte
func HTTPMiddlewareCore(options *HTTPContextOptions) echo.MiddlewareFunc
func HTTPMiddlewareCreateLogger(next echo.HandlerFunc) echo.HandlerFunc
func HTTPMiddlewareFromCache(key func(IHTTPContext) string) echo.MiddlewareFunc
func HTTPMiddlewareHandleError(env IENV) echo.HTTPErrorHandler
func HTTPMiddlewareHandleNotFound(c echo.Context) error
func HTTPMiddlewareRateLimit(options *HTTPContextOptions) echo.MiddlewareFunc
func HTTPMiddlewareRecoverWithConfig(env IENV, config middleware.RecoverConfig) echo.MiddlewareFunc
func HTTPMiddlewareRequestID() echo.MiddlewareFunc
func IsError(err error) bool
IsError returns true if given error is validate error
func MockMiddleware(model interface{}, options *MockMiddlewareOptions) func(next echo.HandlerFunc) echo.HandlerFunc
func NewHTTPServer(options *HTTPContextOptions) *echo.Echo
func NewMockENV() *mockENV
func Recover(textError string)
func RequesterToStructPagination(items interface{}, options *PageOptions, requester func() (*RequestResponse, error)) (*PageResponse, IError)
func SetSearch(db *gorm.DB, keywordCondition *KeywordConditionWrapper) *gorm.DB
func SetSearchSimple(db *gorm.DB, q string, columns []string) *gorm.DB
func StartHTTPServer(e *echo.Echo, env IENV)
func WithHTTPContext(h HandlerFunc) echo.HandlerFunc
type ABCIContext struct { IContext }
func (A ABCIContext) GetMessageJSON(tx []byte) string
func (A ABCIContext) GetOperation(tx []byte) string
type ABCIContextOptions struct { ContextOptions *ContextOptions }
type ArchiveByteBody struct { File []byte Name string }
type ArchiverOptions struct { }
type BaseValidator struct {
// contains filtered or unexported fields
}
func (b *BaseValidator) AddValidator(errs ...*Valid)
func (b *BaseValidator) Error() IError
func (b *BaseValidator) GetValidator() *Valid
func (b *BaseValidator) IsArrayBetween(array interface{}, min int, max int, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsArrayMax(array interface{}, size int, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsArrayMin(array interface{}, size int, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsArraySize(array interface{}, size int, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsBase64(field *string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsBoolRequired(value interface{}, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsCustom(customFunc func() (bool, *IValidMessage)) (bool, *IValidMessage)
func (b *BaseValidator) IsDateTime(input *string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsDateTimeAfter(input *string, after *string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsDateTimeBefore(input *string, before *string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsEmail(field *string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsExists(ctx IContext, field *string, table string, column string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsExistsWithCondition( ctx IContext, table string, condition map[string]interface{}, fieldPath string, ) (bool, *IValidMessage)
func (b *BaseValidator) IsFloatNumberBetween(field *float64, min float64, max float64, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsFloatNumberMax(field *float64, max float64, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsFloatNumberMin(field *float64, min float64, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsIP(field *string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsJSONArray(field *json.RawMessage, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsJSONArrayMax(field *json.RawMessage, max int, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsJSONArrayMin(field *json.RawMessage, min int, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsJSONBoolPathRequired(json *json.RawMessage, path string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsJSONObject(field *json.RawMessage, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsJSONObjectNotEmpty(field *json.RawMessage, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsJSONObjectPath(j *json.RawMessage, path string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsJSONPathRequireNotEmpty(j *json.RawMessage, path string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsJSONPathRequired(j *json.RawMessage, path string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsJSONPathStrIn(json *json.RawMessage, path string, rules string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsJSONRequired(field *json.RawMessage, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsJSONStrPathRequired(json *json.RawMessage, path string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsMongoExistsWithCondition( ctx IContext, table string, filter interface{}, fieldPath string, ) (bool, *IValidMessage)
func (b *BaseValidator) IsMongoStrUnique(ctx IContext, table string, filter interface{}, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsNotEmptyObjectRequired(value interface{}, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsNumberBetween(field *int64, min int64, max int64, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsNumberMax(field *int64, max int64, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsNumberMin(field *int64, min int64, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsRequired(field interface{}, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsRequiredArray(array interface{}, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsStrIn(input *string, rules string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsStrMax(input *string, size int, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsStrMin(input *string, size int, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsStrRequired(field *string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsStrUnique(ctx IContext, field *string, table string, column string, except string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsStringContain(field *string, substr string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsStringEndWith(field *string, substr string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsStringLowercase(field *string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsStringNotContain(field *string, substr string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsStringNumber(field *string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsStringNumberMin(field *string, min int64, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsStringStartWith(field *string, substr string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsStringUppercase(field *string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsTime(input *string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsTimeAfter(input *string, after *string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsTimeBefore(input *string, before *string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsTimeRequired(field *time.Time, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) IsURL(field *string, fieldPath string) (bool, *IValidMessage)
func (b *BaseValidator) LoopJSONArray(j *json.RawMessage) []interface{}
func (b *BaseValidator) Merge(errs ...*Valid) IError
func (b *BaseValidator) Must(condition bool, msg *IValidMessage) bool
func (b *BaseValidator) SetPrefix(prefix string)
type ContextMock struct { mock.Mock MockRequester *MockRequester MockCache *MockCache MockMQ *MockMQ MockLog *MockLogger MockDBMongo *MockMongoDB MockDB *MockDatabase }
func NewMockContext() *ContextMock
func (m *ContextMock) Cache() ICache
func (m *ContextMock) Caches(name string) ICache
func (m *ContextMock) DB() *gorm.DB
func (m *ContextMock) DBMongo() IMongoDB
func (m *ContextMock) DBS(name string) *gorm.DB
func (m *ContextMock) DBSMongo(name string) IMongoDB
func (m *ContextMock) ENV() IENV
func (m *ContextMock) Log() ILogger
Log return the logger
func (m *ContextMock) MQ() IMQ
func (m *ContextMock) NewError(err error, errorType IError, args ...interface{}) IError
func (m *ContextMock) Requester() IRequester
func (m *ContextMock) SetType(t consts.ContextType)
func (m *ContextMock) Type() string
type ContextOptions struct { DB *gorm.DB DBS map[string]*gorm.DB MongoDB IMongoDB MongoDBS map[string]IMongoDB Cache ICache Caches map[string]ICache ENV IENV MQ IMQ DATA map[string]interface{} // contains filtered or unexported fields }
type ContextUser struct { ID string `json:"id,omitempty"` Email string `json:"email,omitempty"` Username string `json:"username,omitempty"` Name string `json:"name,omitempty"` Segment string `json:"segment,omitempty"` Data map[string]string `json:"data,omitempty"` }
type CronjobContext struct { IContext // contains filtered or unexported fields }
func (c CronjobContext) AddJob(job *gocron.Scheduler, handlerFunc func(ctx ICronjobContext) error)
func (c CronjobContext) Job() *gocron.Scheduler
func (c CronjobContext) Start()
type CronjobContextOptions struct { ContextOptions *ContextOptions TimeLocation *time.Location }
type Database struct { Driver string Name string Host string User string Password string Port string // contains filtered or unexported fields }
func NewDatabase(env *ENVConfig) *Database
func NewDatabaseWithConfig(env *ENVConfig, config *gorm.Config) *Database
func (db *Database) Connect() (*gorm.DB, error)
Connect to connect Database
type DatabaseCache struct { Host string Port string }
func NewCache(env *ENVConfig) *DatabaseCache
func (r DatabaseCache) Connect() (ICache, error)
type DatabaseMongo struct { Name string Host string UserName string Password string Port string }
func NewDatabaseMongo(env *ENVConfig) *DatabaseMongo
func (db *DatabaseMongo) Connect() (IMongoDB, error)
Connect to connect Database
type E2EContext struct { IContext }
type E2EContextOptions struct { ContextOptions *ContextOptions }
type ENVConfig struct { LogLevel logrus.Level LogHost string `mapstructure:"log_host"` LogPort string `mapstructure:"log_port"` Host string `mapstructure:"host"` ENV string `mapstructure:"env"` Service string `mapstructure:"service"` SentryDSN string `mapstructure:"sentry_dsn"` DBDriver string `mapstructure:"db_driver"` DBHost string `mapstructure:"db_host"` DBName string `mapstructure:"db_name"` DBUser string `mapstructure:"db_user"` DBPassword string `mapstructure:"db_password"` DBPort string `mapstructure:"db_port"` DBMongoHost string `mapstructure:"db_mongo_host"` DBMongoName string `mapstructure:"db_mongo_name"` DBMongoUserName string `mapstructure:"db_mongo_username"` DBMongoPassword string `mapstructure:"db_mongo_password"` DBMongoPort string `mapstructure:"db_mongo_port"` MQHost string `mapstructure:"mq_host"` MQUser string `mapstructure:"mq_user"` MQPassword string `mapstructure:"mq_password"` MQPort string `mapstructure:"mq_port"` CachePort string `mapstructure:"cache_port"` CacheHost string `mapstructure:"cache_host"` ABCIEndpoint string `mapstructure:"abci_endpoint"` DIDMethodDefault string `mapstructure:"did_method_default"` DIDKeyTypeDefault string `mapstructure:"did_key_type_default"` WinRMHost string `mapstructure:"winrm_host"` WinRMUser string `mapstructure:"winrm_user"` WinRMPassword string `mapstructure:"winrm_password"` S3Endpoint string `mapstructure:"s3_endpoint"` S3AccessKey string `mapstructure:"s3_access_key"` S3SecretKey string `mapstructure:"s3_secret_key"` S3Bucket string `mapstructure:"s3_bucket"` S3Region string `mapstructure:"s3_region"` S3IsHTTPS bool `mapstructure:"s3_https"` EmailServer string `mapstructure:"email_server"` EmailPort int `mapstructure:"email_port"` EmailUsername string `mapstructure:"email_username"` EmailPassword string `mapstructure:"email_password"` EmailSender string `mapstructure:"email_sender"` }
type ENVType struct {
// contains filtered or unexported fields
}
func (e ENVType) All() map[string]string
func (e ENVType) Bool(key string) bool
func (e ENVType) Config() *ENVConfig
func (e ENVType) Int(key string) int
func (e ENVType) IsDev() bool
IsDev config is Dev config
func (e ENVType) IsMock() bool
func (e ENVType) IsProd() bool
IsProd config is production config
func (e ENVType) IsTest() bool
IsTest config is Test config
func (e ENVType) String(key string) string
type Error struct { Status int `json:"-"` Code string `json:"code"` Message interface{} `json:"message"` Data interface{} `json:"-"` Fields interface{} `json:"fields,omitempty"` // contains filtered or unexported fields }
func (c Error) Error() string
func (c Error) GetCode() string
func (c Error) GetMessage() interface{}
func (c Error) GetStatus() int
func (c Error) JSON() interface{}
func (c Error) OriginalError() error
type FieldError struct { Code string `json:"code"` Message string `json:"message"` Fields interface{} `json:"fields,omitempty"` }
func (f FieldError) Error() string
func (f FieldError) GetCode() string
func (f FieldError) GetMessage() interface{}
func (FieldError) GetStatus() int
func (f FieldError) JSON() interface{}
func (f FieldError) OriginalError() error
func (f FieldError) OriginalErrorMessage() string
type File struct {
// contains filtered or unexported fields
}
func (f File) Name() string
func (f File) Value() []byte
type HTTPContext struct { echo.Context IContext // contains filtered or unexported fields }
func (c *HTTPContext) BindOnly(i interface{}) IError
func (c *HTTPContext) BindWithValidate(ctx IValidateContext) IError
func (c *HTTPContext) BindWithValidateMessage(ctx IValidateContext) IError
func (c *HTTPContext) GetMessage() string
func (c *HTTPContext) GetPageOptions() *PageOptions
func (c *HTTPContext) GetPageOptionsWithOptions(options *PageOptionsOptions) *PageOptions
func (c *HTTPContext) GetSignature() string
func (c HTTPContext) GetUserAgent() *user_agent.UserAgent
func (c *HTTPContext) Log() ILogger
func (c *HTTPContext) NewError(err error, errorType IError, args ...interface{}) IError
func (c *HTTPContext) WithSaveCache(data interface{}, key string, duration time.Duration) interface{}
type HTTPContextOptions struct { RateLimit *middleware.RateLimiterMemoryStoreConfig AllowOrigins []string ContextOptions *ContextOptions }
type HandlerFunc func(IHTTPContext) error
type IABCIContext interface { IContext GetOperation(tx []byte) string GetMessageJSON(tx []byte) string }
func NewABCIContext(options *ABCIContextOptions) IABCIContext
type IArchiver interface { FromURLs(fileName string, urls []string, options *ArchiverOptions) ([]byte, IError) FromBytes(fileName string, body []ArchiveByteBody, options *ArchiverOptions) ([]byte, IError) }
func NewArchiver(ctx IContext) IArchiver
type ICSV[T any] interface { //Reader ReadFromFile(data []byte, options *ICSVOptions) ([]T, error) ReadFromPath(path string, options *ICSVOptions) ([]T, error) ReadFromString(data string, options *ICSVOptions) ([]T, error) ReadFromURL(url string, options *ICSVOptions) ([]T, error) ReadFromFileMaps(data []byte, options *ICSVOptions) ([]map[string]interface{}, error) }
func NewCSV[T any](ctx IContext) ICSV[T]
type ICSVOptions struct { FirstRowIsHeader bool Separator string }
type ICache interface { Set(key string, value interface{}, expiration time.Duration) error SetJSON(key string, value interface{}, expiration time.Duration) error Get(dest interface{}, key string) error GetJSON(dest interface{}, key string) error Del(key string) error Close() }
type IContext interface { MQ() IMQ DB() *gorm.DB DBS(name string) *gorm.DB DBMongo() IMongoDB DBSMongo(name string) IMongoDB WinRM() IWinRM ENV() IENV Log() ILogger Type() consts.ContextType NewError(err error, errorType IError, args ...interface{}) IError Requester() IRequester Cache() ICache Caches(name string) ICache GetData(name string) interface{} GetAllData() map[string]interface{} SetData(name string, data interface{}) SetUser(user *ContextUser) GetUser() *ContextUser }
func NewContext(options *ContextOptions) IContext
type ICronjobContext interface { IContext Job() *gocron.Scheduler Start() AddJob(job *gocron.Scheduler, handlerFunc func(ctx ICronjobContext) error) }
func NewCronjobContext(options *CronjobContextOptions) ICronjobContext
type IE2EContext interface { IContext }
func NewE2EContext(options *E2EContextOptions) IE2EContext
type IENV interface { Config() *ENVConfig IsDev() bool IsTest() bool IsMock() bool IsProd() bool Bool(key string) bool Int(key string) int String(key string) string All() map[string]string }
func NewENVPath(path string) IENV
func NewEnv() IENV
type IEmail interface { SendHTML(from string, to []string, subject string, body string) IError SendHTMLWithAttach(from string, to []string, subject string, body string, file []byte, fileName string) IError SendText(from string, to []string, subject string, body string) IError ParseHTMLToString(path string, data interface{}) (string, IError) }
func NewEmail(ctx IContext) IEmail
type IError interface { Error() string GetCode() string GetStatus() int JSON() interface{} OriginalError() error GetMessage() interface{} }
func DBErrorToIError(err error) IError
func MockIError(args mock.Arguments, index int) IError
func NewValidatorFields(fields interface{}) IError
func RequesterToStruct(desc interface{}, requester func() (*RequestResponse, error)) IError
type IFile interface { Name() string Value() []byte }
func NewFile(name string, value []byte) IFile
type IHTTPContext interface { IContext echo.Context BindWithValidate(ctx IValidateContext) IError BindWithValidateMessage(ctx IValidateContext) IError BindOnly(i interface{}) IError GetSignature() string GetMessage() string GetPageOptions() *PageOptions GetPageOptionsWithOptions(options *PageOptionsOptions) *PageOptions GetUserAgent() *user_agent.UserAgent WithSaveCache(data interface{}, key string, duration time.Duration) interface{} }
func NewHTTPContext(ctx echo.Context, options *HTTPContextOptions) IHTTPContext
type ILogger interface { Info(args ...interface{}) Warn(args ...interface{}) Debug(args ...interface{}) DebugWithSkip(skip int, args ...interface{}) Error(message error, args ...interface{}) ErrorWithSkip(skip int, message error, args ...interface{}) }
type IMQ interface { Close() PublishJSON(name string, data interface{}, options *MQPublishOptions) error Consume(ctx IMQContext, name string, onConsume func(message amqp.Delivery), options *MQConsumeOptions) Conn() *amqp.Connection ReConnect() }
type IMQContext interface { IContext AddConsumer(handlerFunc func(ctx IMQContext)) Consume(name string, onConsume func(message amqp.Delivery), options *MQConsumeOptions) Start() }
func NewMQContext(options *MQContextOptions) IMQContext
func NewMQServer(options *MQContextOptions) IMQContext
type IMongoDB interface { DB() *mongo.Database Create(coll string, document interface{}, opts ...*options.InsertOneOptions) (*mongo.InsertOneResult, error) FindAggregate(dest interface{}, coll string, pipeline interface{}, opts ...*options.AggregateOptions) error FindAggregatePagination(dest interface{}, coll string, pipeline interface{}, pageOptions *PageOptions, opts ...*options.AggregateOptions) (*PageResponse, error) FindAggregateOne(dest interface{}, coll string, pipeline interface{}, opts ...*options.AggregateOptions) error Find(dest interface{}, coll string, filter interface{}, opts ...*options.FindOptions) error FindPagination(dest interface{}, coll string, filter interface{}, pageOptions *PageOptions, opts ...*options.FindOptions) (*PageResponse, error) FindOne(dest interface{}, coll string, filter interface{}, opts ...*options.FindOneOptions) error FindOneAndUpdate(dest interface{}, coll string, filter interface{}, update interface{}, opts ...*options.FindOneAndUpdateOptions) error UpdateOne(coll string, filter interface{}, update interface{}, opts ...*options.UpdateOptions) (*mongo.UpdateResult, error) Count(coll string, filter interface{}, opts ...*options.CountOptions) (int64, error) Drop(coll string) error DeleteOne(coll string, filter interface{}, opts ...*options.DeleteOptions) (*mongo.DeleteResult, error) DeleteMany(coll string, filter interface{}, opts ...*options.DeleteOptions) (*mongo.DeleteResult, error) FindOneAndDelete(coll string, filter interface{}, opts ...*options.FindOneAndDeleteOptions) error Close() Helper() IMongoDBHelper CreateIndex(coll string, models []mongo.IndexModel, opts ...*options.CreateIndexesOptions) ([]string, error) DropIndex(coll string, name string, opts ...*options.DropIndexesOptions) (*MongoDropIndexResult, error) DropAll(coll string, opts ...*options.DropIndexesOptions) (*MongoDropIndexResult, error) ListIndex(coll string, opts ...*options.ListIndexesOptions) ([]MongoListIndexResult, error) }
type IMongoDBHelper interface { Lookup(options *MongoLookupOptions) bson.M Set(options bson.M) bson.M Project(options bson.M) bson.M Size(expression string) bson.M Filter(options *MongoFilterOptions) bson.M Match(options bson.M) bson.M Unwind(field string) bson.M ReplaceRoot(options interface{}) bson.M Or(options []bson.M) bson.M }
func NewMongoHelper() IMongoDBHelper
type IMongoIndexBatch interface { Name() string Run() error }
type IMongoIndexer interface { Add(batch IMongoIndexBatch) Execute() error }
func NewMongoIndexer(ctx IContext) IMongoIndexer
type IRequester interface { Get(url string, options *RequesterOptions) (*RequestResponse, error) Delete(url string, options *RequesterOptions) (*RequestResponse, error) Post(url string, body interface{}, options *RequesterOptions) (*RequestResponse, error) Create(method RequesterMethodType, url string, body interface{}, options *RequesterOptions) (*RequestResponse, error) Put(url string, body interface{}, options *RequesterOptions) (*RequestResponse, error) Patch(url string, body interface{}, options *RequesterOptions) (*RequestResponse, error) }
func NewRequester(ctx IContext) IRequester
type IS3 interface { GetObject(path string, opts *ss3.GetObjectInput) (*ss3.GetObjectOutput, error) PutObject(objectName string, file io.ReadSeeker, opts *ss3.PutObjectInput, uploadOptions *UploadOptions) (*ss3.PutObjectOutput, error) PutObjectByURL(objectName string, url string, opts *ss3.PutObjectInput, uploadOptions *UploadOptions) (*ss3.PutObjectOutput, error) }
type ISeed interface { Run() error }
type IValidMessage struct { Name string `json:"-"` Code string `json:"code"` Message string `json:"message"` Data interface{} `json:"data,omitempty"` }
func (f IValidMessage) Error() string
type IValidate interface { Valid() IError }
type IValidateContext interface { Valid(ctx IContext) IError }
type IWinRM interface { Command(command string, isProduction bool) (*WinRMResult, IError) }
func NewWinRM(ctx IContext) IWinRM
type KeywordCondition string
type KeywordConditionWrapper struct { Condition KeywordCondition KeywordOptions []KeywordOptions }
func NewKeywordAndCondition(keywordOptions []KeywordOptions) *KeywordConditionWrapper
func NewKeywordOrCondition(keywordOptions []KeywordOptions) *KeywordConditionWrapper
type KeywordOptions struct { Type KeywordType Key string Value string }
func NewKeywordMustMatchOption(key string, value string) *KeywordOptions
func NewKeywordMustMatchOptions(keys []string, value string) []KeywordOptions
func NewKeywordWildCardOption(key string, value string) *KeywordOptions
func NewKeywordWildCardOptions(keys []string, value string) []KeywordOptions
type KeywordType string
Log is the logger utility with information of request context
type Logger struct { RequestID string HostName string Type consts.ContextType // contains filtered or unexported fields }
func NewLogger(ctx IContext) *Logger
NewLogger will create the logger with context from echo context
func NewLoggerSimple() *Logger
NewLoggerSimple return plain text simple logger
func (logger *Logger) Debug(args ...interface{})
Debug log debug level
func (logger *Logger) DebugWithSkip(skip int, args ...interface{})
func (logger *Logger) Error(message error, args ...interface{})
Error log error level
func (logger *Logger) ErrorWithSkip(skip int, message error, args ...interface{})
Error log error level
func (logger *Logger) Info(args ...interface{})
Info log information level
func (logger *Logger) Warn(args ...interface{})
Warn log warnning level
type MQ struct { Host string User string Password string Port string LogLevel logrus.Level }
func NewMQ(env *ENVConfig) *MQ
func (m *MQ) Connect() (IMQ, error)
ConnectDB to connect Database
func (m *MQ) ReConnect() (*amqp.Connection, error)
ConnectDB to connect Database
type MQConsumeOptions struct { Durable bool AutoDelete bool Exclusive bool NoWait bool Args amqp.Table AutoAck bool NoLocal bool Consumer string }
type MQContext struct { IContext }
func (c *MQContext) AddConsumer(handlerFunc func(ctx IMQContext))
func (c *MQContext) Consume(name string, onConsume func(message amqp.Delivery), options *MQConsumeOptions)
func (c *MQContext) Start()
type MQContextOptions struct { ContextOptions *ContextOptions }
type MQPublishOptions struct { Exchange string MessageID string Durable bool AutoDelete bool Exclusive bool Mandatory bool Immediate bool NoWait bool DeliveryMode uint8 Args amqp.Table }
type Map map[string]interface{}
type MockCache struct { mock.Mock }
func NewMockCache() *MockCache
func (m *MockCache) Close()
func (m *MockCache) Del(key string) error
func (m *MockCache) Get(dest interface{}, key string) error
func (m *MockCache) GetJSON(dest interface{}, key string) error
func (m *MockCache) Set(key string, value interface{}, expiration time.Duration) error
func (m *MockCache) SetJSON(key string, value interface{}, expiration time.Duration) error
type MockDatabase struct { Gorm *gorm.DB Mock sqlmock.Sqlmock }
func NewMockDatabase() *MockDatabase
type MockLogger struct { mock.Mock }
func NewMockLogger() *MockLogger
func (m *MockLogger) Debug(args ...interface{})
func (m *MockLogger) Error(message error, args ...interface{})
func (m *MockLogger) Info(args ...interface{})
func (m *MockLogger) Warn(args ...interface{})
type MockMQ struct { mock.Mock }
func NewMockMQ() *MockMQ
func (m *MockMQ) Close()
func (m *MockMQ) Conn() *amqp.Connection
func (m *MockMQ) Consume(name string, onConsume func(message amqp.Delivery), options *MQConsumeOptions) error
func (m *MockMQ) PublishJSON(name string, data interface{}, options *MQPublishOptions) error
type MockMiddlewareManual func(c IHTTPContext) error
type MockMiddlewareOptions struct { Wrapper MockMiddlewareWrapper Manual MockMiddlewareManual IsPagination bool IsDisabled bool }
type MockMiddlewareWrapper func(model interface{}) interface{}
type MockMongoDB struct { mock.Mock }
func NewMockMongoDB() *MockMongoDB
func (m *MockMongoDB) Close()
func (m *MockMongoDB) Count(coll string, filter interface{}, opts ...*options.CountOptions) (int64, error)
func (m *MockMongoDB) Create(coll string, document interface{}, opts ...*options.InsertOneOptions) (*mongo.InsertOneResult, error)
func (m *MockMongoDB) DB() *mongo.Database
func (m *MockMongoDB) DeleteMany(coll string, filter interface{}, opts ...*options.DeleteOptions) (*mongo.DeleteResult, error)
func (m *MockMongoDB) DeleteOne(coll string, filter interface{}, opts ...*options.DeleteOptions) (*mongo.DeleteResult, error)
func (m *MockMongoDB) Drop(coll string) error
func (m *MockMongoDB) Find(dest interface{}, coll string, filter interface{}, opts ...*options.FindOptions) error
func (m *MockMongoDB) FindAggregate(dest interface{}, coll string, pipeline interface{}, opts ...*options.AggregateOptions) error
func (m *MockMongoDB) FindAggregateOne(dest interface{}, coll string, pipeline interface{}, opts ...*options.AggregateOptions) error
func (m *MockMongoDB) FindAggregatePagination(dest interface{}, coll string, pipeline interface{}, pageOptions *PageOptions, opts ...*options.AggregateOptions) (*PageResponse, error)
func (m *MockMongoDB) FindOne(dest interface{}, coll string, filter interface{}, opts ...*options.FindOneOptions) error
func (m *MockMongoDB) FindOneAndDelete(coll string, filter interface{}, opts ...*options.FindOneAndDeleteOptions) error
func (m *MockMongoDB) FindOneAndUpdate(dest interface{}, coll string, filter interface{}, update interface{}, opts ...*options.FindOneAndUpdateOptions) error
func (m *MockMongoDB) FindPagination(dest interface{}, coll string, filter interface{}, pageOptions *PageOptions, opts ...*options.FindOptions) (*PageResponse, error)
func (m *MockMongoDB) Helper() IMongoDBHelper
func (m *MockMongoDB) UpdateOne(coll string, filter interface{}, update interface{}, opts ...*options.UpdateOptions) (*mongo.UpdateResult, error)
type MockMongoIndexBatch struct { mock.Mock }
func NewMockMongoIndexBatch() *MockMongoIndexBatch
func (m *MockMongoIndexBatch) Name() string
func (m *MockMongoIndexBatch) Run() error
type MockMongoIndexer struct { mock.Mock Batches []*MockMongoIndexBatch }
func NewMockMongoIndexer() *MockMongoIndexer
func (m *MockMongoIndexer) Add(batch *MockMongoIndexBatch)
func (m *MockMongoIndexer) Execute() error
type MockRequester struct { mock.Mock }
func NewMockRequester() *MockRequester
func (m *MockRequester) Delete(url string, options *RequesterOptions) (*RequestResponse, error)
func (m *MockRequester) Get(url string, options *RequesterOptions) (*RequestResponse, error)
func (m *MockRequester) Patch(url string, body interface{}, options *RequesterOptions) (*RequestResponse, error)
func (m *MockRequester) Post(url string, body interface{}, options *RequesterOptions) (*RequestResponse, error)
func (m *MockRequester) Put(url string, body interface{}, options *RequesterOptions) (*RequestResponse, error)
type MongoDB struct {
// contains filtered or unexported fields
}
func (m MongoDB) Close()
func (m MongoDB) Count(coll string, filter interface{}, opts ...*options.CountOptions) (int64, error)
func (m MongoDB) Create(coll string, document interface{}, opts ...*options.InsertOneOptions) (*mongo.InsertOneResult, error)
func (m MongoDB) CreateIndex(coll string, models []mongo.IndexModel, opts ...*options.CreateIndexesOptions) ([]string, error)
func (m MongoDB) DB() *mongo.Database
func (m MongoDB) DeleteMany(coll string, filter interface{}, opts ...*options.DeleteOptions) (*mongo.DeleteResult, error)
func (m MongoDB) DeleteOne(coll string, filter interface{}, opts ...*options.DeleteOptions) (*mongo.DeleteResult, error)
func (m MongoDB) Drop(coll string) error
func (m MongoDB) DropAll(coll string, opts ...*options.DropIndexesOptions) (*MongoDropIndexResult, error)
func (m MongoDB) DropIndex(coll string, name string, opts ...*options.DropIndexesOptions) (*MongoDropIndexResult, error)
func (m MongoDB) Find(dest interface{}, coll string, filter interface{}, opts ...*options.FindOptions) error
func (m MongoDB) FindAggregate(dest interface{}, coll string, pipeline interface{}, opts ...*options.AggregateOptions) error
func (m MongoDB) FindAggregateOne(dest interface{}, coll string, pipeline interface{}, opts ...*options.AggregateOptions) error
func (m MongoDB) FindAggregatePagination(dest interface{}, coll string, pipeline interface{}, pageOptions *PageOptions, opts ...*options.AggregateOptions) (*PageResponse, error)
func (m MongoDB) FindOne(dest interface{}, coll string, filter interface{}, opts ...*options.FindOneOptions) error
func (m MongoDB) FindOneAndDelete(coll string, filter interface{}, opts ...*options.FindOneAndDeleteOptions) error
func (m MongoDB) FindOneAndUpdate(dest interface{}, coll string, filter interface{}, update interface{}, opts ...*options.FindOneAndUpdateOptions) error
func (m MongoDB) FindPagination(dest interface{}, coll string, filter interface{}, pageOptions *PageOptions, opts ...*options.FindOptions) (*PageResponse, error)
func (m MongoDB) Helper() IMongoDBHelper
func (m MongoDB) ListIndex(coll string, opts ...*options.ListIndexesOptions) ([]MongoListIndexResult, error)
func (m MongoDB) UpdateOne(coll string, filter interface{}, update interface{}, opts ...*options.UpdateOptions) (*mongo.UpdateResult, error)
type MongoDropIndexResult struct { DropCount int64 `json:"drop_count" bson:"nIndexesWas"` }
type MongoFilterOptions struct { Input string As string Condition bson.M }
type MongoIndexer struct { Batches []IMongoIndexBatch // contains filtered or unexported fields }
func (i *MongoIndexer) Add(batch IMongoIndexBatch)
func (i *MongoIndexer) Execute() error
type MongoListIndexResult struct { Key map[string]int64 `json:"key" bson:"key"` Name string `json:"name" bson:"name"` Version int64 `json:"version" bson:"v"` }
type MongoLookupOptions struct { From string LocalField string ForeignField string As string }
type PageOptions struct { Q string Limit int64 Page int64 OrderBy []string }
func (p *PageOptions) SetOrderDefault(orders ...string)
type PageOptionsOptions struct { OrderByAllowed []string }
type PageResponse struct { Total int64 Limit int64 Count int64 Page int64 Q string OrderBy []string }
func Paginate(db *gorm.DB, model interface{}, options *PageOptions) (*PageResponse, error)
type Pagination struct { Page int64 `json:"page" example:"1"` Total int64 `json:"total" example:"45"` Limit int64 `json:"limit" example:"30"` Count int64 `json:"count" example:"30"` Items interface{} `json:"items"` }
func NewPagination(items interface{}, options *PageResponse) *Pagination
type RequestResponse struct { Data map[string]interface{} RawData []byte ErrorCode string StatusCode int Header http.Header ContentLength int64 TransferEncoding []string Uncompressed bool Trailer http.Header Request *http.Request TLS *tls.ConnectionState }
func RequestWrapper(dest interface{}, requester func() (*RequestResponse, error)) (*RequestResponse, error)
Deprecated: RequestWrapper is deprecated, use RequestToStruct or RequestToStructPagination instead.
type Requester struct {
// contains filtered or unexported fields
}
func (r Requester) Create(method RequesterMethodType, url string, body interface{}, options *RequesterOptions) (*RequestResponse, error)
func (r Requester) Delete(url string, options *RequesterOptions) (*RequestResponse, error)
func (r Requester) Get(url string, options *RequesterOptions) (*RequestResponse, error)
func (r Requester) Patch(url string, body interface{}, options *RequesterOptions) (*RequestResponse, error)
func (r Requester) Post(url string, body interface{}, options *RequesterOptions) (*RequestResponse, error)
func (r Requester) Put(url string, body interface{}, options *RequesterOptions) (*RequestResponse, error)
type RequesterMethodType string
const ( RequesterMethodTypeGET RequesterMethodType = http.MethodGet RequesterMethodTypeHEAD RequesterMethodType = http.MethodHead RequesterMethodTypePOST RequesterMethodType = http.MethodPost RequesterMethodTypePUT RequesterMethodType = http.MethodPut RequesterMethodTypePATCH RequesterMethodType = http.MethodPatch RequesterMethodTypeDELETE RequesterMethodType = http.MethodDelete RequesterMethodTypeOPTIONS RequesterMethodType = http.MethodOptions RequesterMethodTypeTRACE RequesterMethodType = http.MethodTrace )
type RequesterOptions struct { BaseURL string Timeout *time.Duration Headers http.Header Params xurl.Values RetryCount int IsMultipartForm bool IsURLEncode bool IsBodyRawByte bool }
type S3Config struct { Endpoint string AccessKey string SecretKey string Bucket string Region string IsHTTPS bool }
func NewS3(env *ENVConfig) *S3Config
func (r *S3Config) Connect() (IS3, error)
type Seeder struct { }
func NewSeeder() *Seeder
func (receiver Seeder) Add(seeder ISeed) error
type UploadOptions struct { Width int64 Height int64 Quality int64 }
Validator type
type Valid struct {
// contains filtered or unexported fields
}
func NewValid() *Valid
New creates new validator
func (v *Valid) Add(err ...error)
Add adds errors
func (v *Valid) Error() string
Error returns error if has error
func (v *Valid) GetCode() string
func (v *Valid) GetMessage() interface{}
func (v *Valid) GetStatus() int
func (v *Valid) JSON() interface{}
func (v *Valid) Must(x bool, msg *IValidMessage) bool
Must checks x must not an error or true if bool and return true if valid
msg must be error or string
func (v *Valid) OriginalError() error
func (v *Valid) OriginalErrorMessage() string
func (v *Valid) Valid() IError
Valid returns true if no error
Error is the validate error
type ValidError struct {
// contains filtered or unexported fields
}
func (err *ValidError) Error() string
Error implements error interface
func (err *ValidError) Errors() []error
Errors returns errors
func (err *ValidError) Strings() []string
Strings returns errors in strings
type Validator struct{}
func (cv *Validator) Validate(i interface{}) error
type WinRM struct {
// contains filtered or unexported fields
}
func (w *WinRM) Command(command string, isProduction bool) (*WinRMResult, IError)
type WinRMResult struct { Result string `json:"result"` }