ReanGD/go-web-search

View on GitHub
proxy/meta.go

Summary

Maintainability
A
0 mins
Test Coverage
package proxy

import (
    "database/sql"

    "github.com/ReanGD/go-web-search/database"
)

// Meta - proxy struct for database.Meta
type Meta struct {
    content         *Content
    redirectReferer *Meta
    redirectCnt     int
    origin          sql.NullInt64
    hostID          sql.NullInt64
    urlStr          string
    state           database.State
    statusCode      sql.NullInt64
}

// NewMeta - create Meta
func NewMeta(hostID sql.NullInt64, urlStr string, referer *Meta) *Meta {
    it := referer
    for it != nil {
        it.redirectCnt++
        it = it.redirectReferer
    }

    return &Meta{
        content:         nil,
        redirectReferer: referer,
        redirectCnt:     0,
        origin:          sql.NullInt64{Valid: false},
        hostID:          hostID,
        urlStr:          urlStr,
        state:           database.StateSuccess,
        statusCode:      sql.NullInt64{Valid: false}}
}

// SetState - set new state
func (in *Meta) SetState(state database.State) {
    if state != database.StateSuccess {
        in.content = nil
    }
    in.state = state
}

// SetStatusCode - set new status code
func (in *Meta) SetStatusCode(statusCode int) {
    in.statusCode = sql.NullInt64{Int64: int64(statusCode), Valid: true}
}

// SetContent - set new content
func (in *Meta) SetContent(content *Content) {
    in.content = content
}

// SetOrigin - set new content
func (in *Meta) SetOrigin(origin sql.NullInt64) {
    in.origin = origin
    if origin.Valid {
        in.content = nil
        in.state = database.StateDublicate
    }
}

// GetURL - get current URL
func (in *Meta) GetURL() string {
    return in.urlStr
}

// GetHostID - get field hostID
func (in *Meta) GetHostID() sql.NullInt64 {
    return in.hostID
}

// GetContent - get field content
func (in *Meta) GetContent() *Content {
    return in.content
}

// GetState - get field state
func (in *Meta) GetState() database.State {
    return in.state
}

// GetHash - get content hash
func (in *Meta) GetHash() string {
    if in.content == nil || in.state != database.StateSuccess {
        return ""
    }

    return in.content.hash
}

// GetReferer - get field redirectReferer
func (in *Meta) GetReferer() *Meta {
    return in.redirectReferer
}

// NeedWaitAfterRequest - Check is need wait after request by state
func (in *Meta) NeedWaitAfterRequest() bool {
    return in.state != database.StateDisabledByRobotsTxt
}

// GetMeta - get field meta converted for Db
func (in *Meta) GetMeta(urlID int64) *database.Meta {
    return &database.Meta{
        URL:         urlID,
        State:       in.state,
        Origin:      in.origin,
        RedirectCnt: in.redirectCnt,
        StatusCode:  in.statusCode}
}