microsite

package module
v0.0.0-...-6ca238a Latest Latest
Warning

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

Go to latest
Published: Mar 4, 2022 License: MIT Imports: 24 Imported by: 0

README

Microsite

Usage

Initialize microsite with a S3 instance, a QOR admin instance, microsite.QorMicroSite struct and an optional admin.Config.

microsite.Init(s3, adm, &microsite.QorMicroSite{}, &admin.Config{Name: "Microsites"})

If you need to customize QorMicroSite which is mandatory for handle microsite url callback(add or remove to/from sitemap etc.). Define your own struct like this

type QorMicroSite struct {
	microsite.QorMicroSite
}

and invoke the microsite.Init function like this

microsite.Init(s3, adm, &QorMicroSite{}, &admin.Config{Name: "Microsites"})

Then you can implement 2 functions to handle the url with sitemap like this. If an error occurred, the publish or unpublish action will be reverted.

func (site QorMicroSite) PublishCallBack(db *gorm.DB, siteURL string) error {
    // siteURL is the microsite URL online, you can add it to your sitemap according to your own business logic
    // HINT: you can validate the uniqueness of the url in the sitemap to avoid microsite overwrite the main path in your site.
	return nil
}

func (site QorMicroSite) UnPublishCallBack(db *gorm.DB, siteURL string) error {
    // siteURL is the URL of the microsite that about to unpublished. you can remove it from your sitemap
	return nil
}

To get the ready for publish or unpublish sites.

Since this microsite is designed for the independent frontend&backend infrastructure. so the old publish2 is no longer efficient. We have to explicitly trigger the "publish pages to s3" operation by a cronjob. So we made 2 functions to retrieve the sites that to be published or unpublished. so that your cronjob could invoke and do the publishing and unpublishing.

For publishing

Use TobePublishedMicrosites function. the last parameter is the status your project treat as "ready for publish". e.g. "Approved".

For unpublishing

Use TobeUnpublishedMicrosite function. the last parameter is the status your project treat as "ready for unpublish". usually it is "Published".

Documentation

Index

Constants

View Source
const (
	Action_preview   = "preview"
	Action_publish   = "publish"
	Action_republish = "republish"
	Action_unpublish = "unpublish"

	Status_draft       = "Draft"
	Status_published   = "Published"
	Status_unpublished = "Unpublished"
)

Variables

View Source
var (
	ZIP_PACKAGE_DIR = "microsite/zips/"
	FILE_LIST_DIR   = "microsite/"

	//default value os.TempDir()
	TempDir             string
	CountOfThreadUpload int = 5
)

Functions

func ChangeStatus

func ChangeStatus(argument *admin.ActionArgument, action string) (err error)

func Init

func Init(s3 oss.StorageInterface, adm *admin.Admin, siteStruct QorMicroSiteInterface, admConfig *admin.Config) *admin.Resource

func Publish

func Publish(db *gorm.DB, version QorMicroSiteInterface, printActivityLog bool) (err error)

func Republish

func Republish(db *gorm.DB, version QorMicroSiteInterface, printActivityLog bool) (err error)

func SetPrefixCollection

func SetPrefixCollection(paths []string)

SetPrefixCollection set collection of prefix for microsite, then select one for microsite

func ToPublishMicrosites

func ToPublishMicrosites(db *gorm.DB, readyForPublishStatus string) error

func ToUnpublishMicrosites

func ToUnpublishMicrosites(db *gorm.DB, unPublishStatus string) error

func Unpublish

func Unpublish(db *gorm.DB, version QorMicroSiteInterface, printActivityLog bool) (err error)

func UnzipPkgAndUpload

func UnzipPkgAndUpload(pkgURL, dest string) (files string, err error)

Types

type DeleteObjecter

type DeleteObjecter interface {
	DeleteObjects(paths []string) (err error)
}

type Package

type Package struct {
	mediaoss.OSS
}

Package microsite's packages struct

type QorMicroSite

type QorMicroSite struct {
	gorm.Model

	publish2.Version
	publish2.Schedule

	Name       string
	PrefixPath string
	URL        string
	Status     string
	Package    Package `gorm:"size:65536" media_library:"url:/microsite/zips/{{primary_key}}/{{short_hash}}/{{filename}}"`
}

QorMicroSite default qor microsite setting struct

func GetSites

func GetSites(db *gorm.DB, targetStatus string) ([]QorMicroSite, error)

func (*QorMicroSite) BeforeCreate

func (site *QorMicroSite) BeforeCreate(db *gorm.DB) (err error)

func (*QorMicroSite) BeforeDelete

func (site *QorMicroSite) BeforeDelete(db *gorm.DB) (err error)

func (*QorMicroSite) BeforeUpdate

func (site *QorMicroSite) BeforeUpdate(db *gorm.DB) (err error)

func (*QorMicroSite) ConfigureQorResourceBeforeInitialize

func (site *QorMicroSite) ConfigureQorResourceBeforeInitialize(res resource.Resourcer)

func (QorMicroSite) GetCreatedAt

func (site QorMicroSite) GetCreatedAt() time.Time

func (QorMicroSite) GetFileList

func (site QorMicroSite) GetFileList() (arr []string)

func (QorMicroSite) GetFilesPathWithSiteURL

func (site QorMicroSite) GetFilesPathWithSiteURL() (arr []string)

func (QorMicroSite) GetFilesPreviewURL

func (site QorMicroSite) GetFilesPreviewURL() (arr []string)

func (QorMicroSite) GetId

func (site QorMicroSite) GetId() uint

GetMicroSiteID will return a site's ID

func (QorMicroSite) GetMicroSitePackage

func (site QorMicroSite) GetMicroSitePackage() *Package

GetMicroSitePackage get microsite package

func (QorMicroSite) GetMicroSiteURL

func (site QorMicroSite) GetMicroSiteURL() string

GetMicroSiteURL will return a site's URL

func (QorMicroSite) GetPrefixPath

func (site QorMicroSite) GetPrefixPath() string

func (QorMicroSite) GetPreviewURL

func (site QorMicroSite) GetPreviewURL() string

func (QorMicroSite) GetStatus

func (site QorMicroSite) GetStatus() string

func (QorMicroSite) GetVersionName

func (site QorMicroSite) GetVersionName() string

func (QorMicroSite) PublishCallBack

func (site QorMicroSite) PublishCallBack(db *gorm.DB, sitePath string) error

func (*QorMicroSite) SetScheduledEndAt

func (site *QorMicroSite) SetScheduledEndAt(t *time.Time)

func (*QorMicroSite) SetStatus

func (site *QorMicroSite) SetStatus(status string)

func (*QorMicroSite) SetVersionPriority

func (site *QorMicroSite) SetVersionPriority(versionPriority string)

func (*QorMicroSite) TableName

func (site *QorMicroSite) TableName() string

func (QorMicroSite) UnPublishCallBack

func (site QorMicroSite) UnPublishCallBack(db *gorm.DB, sitePath string) error

type QorMicroSiteInterface

type QorMicroSiteInterface interface {
	GetId() uint
	GetMicroSiteURL() string
	GetPrefixPath() string
	GetMicroSitePackage() *Package
	GetFileList() []string
	GetFilesPathWithSiteURL() []string
	GetFilesPreviewURL() []string
	GetPreviewURL() string
	GetVersionName() string
	SetVersionPriority(string)
	GetStatus() string
	TableName() string
	GetCreatedAt() time.Time
	PublishCallBack(db *gorm.DB, sitePath string) error
	UnPublishCallBack(db *gorm.DB, sitePath string) error

	SetStatus(string)
	SetScheduledEndAt(*time.Time)
}

QorMicroSiteInterface defined QorMicroSite itself's interface

Jump to

Keyboard shortcuts

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