listing

package
v0.0.0-...-fb57439 Latest Latest
Warning

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

Go to latest
Published: May 17, 2024 License: GPL-3.0 Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AccountEvent

type AccountEvent struct {
	UUID string `json:"uuid"`
	Name string `json:"name"`
}

type AdminDetailDto

type AdminDetailDto struct {
	*Entity
}

type AdminListDto

type AdminListDto struct {
	UUID                 string            `json:"uuid" bson:"_id,omitempty"`
	Business             Business          `json:"business" bson:"business"`
	Images               []Image           `json:"images" bson:"images"`
	Meta                 map[Locale]Meta   `json:"meta" bson:"meta"`
	CategoryUUIDs        []string          `json:"categoryUUIDs" bson:"categoryUUIDs"`
	Features             []Feature         `json:"features" bson:"features"`
	Prices               []Price           `json:"prices" bson:"prices"`
	Location             Location          `json:"location" bson:"location"`
	Boosts               []Boost           `json:"boosts" bson:"boosts"`
	Validation           Validation        `json:"validation" bson:"validation"`
	ExtraPaymentChannels []payment.Channel `json:"extraPaymentChannels" bson:"extra_payment_channels"`
	Currency             Currency          `json:"currency" bson:"currency"`
	Order                *int              `json:"order" bson:"order"`
	IsActive             bool              `json:"isActive" bson:"is_active"`
	IsDeleted            bool              `json:"isDeleted" bson:"is_deleted"`
	IsValid              bool              `json:"isValid" bson:"is_valid"`
	CreatedAt            time.Time         `json:"createdAt" bson:"created_at"`
	UpdatedAt            time.Time         `json:"updatedAt" bson:"updated_at"`
}

type BookingValidationFailEvent

type BookingValidationFailEvent struct {
	BookingUUID  string                     `json:"booking_uuid"`
	ListingUUID  string                     `json:"listing_uuid"`
	BusinessUUID string                     `json:"business_uuid"`
	BusinessName string                     `json:"business_name"`
	Errors       []*booking.ValidationError `json:"errors"`
}

type BookingValidationSuccessEvent

type BookingValidationSuccessEvent struct {
	BookingUUID  string        `json:"booking_uuid"`
	ListingUUID  string        `json:"listing_uuid"`
	BusinessUUID string        `json:"business_uuid"`
	BusinessName string        `json:"business_name"`
	Currency     Currency      `json:"currency"`
	TotalPrice   float64       `json:"total_price"`
	PricePerDays []PricePerDay `json:"price_per_days"`
}

type Boost

type Boost struct {
	UUID      string    `json:"uuid"`
	StartDate time.Time `json:"startDate"`
	EndDate   time.Time `json:"endDate"`
}

type Business

type Business struct {
	UUID     string `json:"uuid"`
	NickName string `json:"nickName"`
}

type BusinessDetailDto

type BusinessDetailDto struct {
	UUID                 string            `json:"uuid" bson:"_id,omitempty"`
	Images               []Image           `json:"images" bson:"images" validate:"required,min=1,max=30,dive,required"`
	Meta                 map[Locale]Meta   `json:"meta" bson:"meta" validate:"required,dive,required"`
	CategoryUUIDs        []string          `json:"categoryUUIDs" bson:"categoryUUIDs" validate:"required,min=1,max=30,dive,required"`
	Features             []Feature         `json:"features" bson:"features" validate:"required,min=1,max=30,dive,required"`
	Prices               []Price           `json:"prices" bson:"prices" validate:"required,min=1,max=100,dive,required"`
	Location             Location          `json:"location" bson:"location" validate:"required,dive,required"`
	Boosts               []Boost           `json:"boosts" bson:"boosts" validate:"required,min=0,max=30,dive,required"`
	Validation           *Validation       `json:"validation" bson:"validation" validate:"required,dive,required"`
	Currency             Currency          `json:"currency" bson:"currency" validate:"required,oneof=TRY USD EUR"`
	ExtraPaymentChannels []payment.Channel `json:"extraPaymentChannels" bson:"extra_payment_channels"`
	Order                *int              `json:"order" bson:"order" validate:"required,min=0,max=1000"`
	IsActive             bool              `json:"isActive" bson:"is_active"`
	IsValid              bool              `json:"isValid" bson:"is_valid"`
	CreatedAt            time.Time         `json:"createdAt" bson:"created_at"`
	UpdatedAt            time.Time         `json:"updatedAt" bson:"updated_at"`
}

type BusinessListDto

type BusinessListDto struct {
	UUID                 string            `json:"uuid" bson:"_id,omitempty"`
	Images               []Image           `json:"images" bson:"images"`
	Meta                 map[Locale]Meta   `json:"meta" bson:"meta"`
	Location             Location          `json:"location" bson:"location"`
	Boosts               []Boost           `json:"boosts" bson:"boosts"`
	Currency             Currency          `json:"currency" bson:"currency"`
	ExtraPaymentChannels []payment.Channel `json:"extraPaymentChannels" bson:"extra_payment_channels"`
	Order                *int              `json:"order" bson:"order"`
	IsActive             bool              `json:"isActive" bson:"is_active"`
	IsDeleted            bool              `json:"isDeleted" bson:"is_deleted"`
	IsValid              bool              `json:"isValid" bson:"is_valid"`
	CreatedAt            time.Time         `json:"createdAt" bson:"created_at"`
}

type CreatedEvent

type CreatedEvent struct {
	Entity           *Entity      `json:"entity"`
	Account          AccountEvent `json:"account"`
	BusinessNickName string       `json:"business_nick_name"`
}

type Currency

type Currency string
const (
	CurrencyTRY Currency = "TRY"
	CurrencyUSD Currency = "USD"
	CurrencyEUR Currency = "EUR"
)

type DeletedEvent

type DeletedEvent struct {
	UUID             string `json:"uuid"`
	BusinessNickName string `json:"business_nick_name"`
}

type DetailDto

type DetailDto struct {
	UUID                 string            `json:"uuid" bson:"_id,omitempty"`
	Business             Business          `json:"business" bson:"business"`
	Images               []Image           `json:"images" bson:"images"`
	Meta                 map[Locale]Meta   `json:"meta" bson:"meta"`
	CategoryUUIDs        []string          `json:"categoryUUIDs" bson:"categoryUUIDs"`
	Features             []Feature         `json:"features" bson:"features"`
	Prices               []Price           `json:"prices" bson:"prices"`
	Location             Location          `json:"location" bson:"location"`
	Boosts               []Boost           `json:"boosts" bson:"boosts"`
	Currency             Currency          `json:"currency" bson:"currency"`
	ExtraPaymentChannels []payment.Channel `json:"extraPaymentChannels" bson:"extra_payment_channels"`
	Validation           Validation        `json:"validation" bson:"validation"`
	CreatedAt            time.Time         `json:"createdAt" bson:"created_at"`
	UpdatedAt            time.Time         `json:"updatedAt" bson:"updated_at"`
}

type DisabledEvent

type DisabledEvent struct {
	UUID             string       `json:"uuid"`
	Account          AccountEvent `json:"account"`
	BusinessNickName string       `json:"business_nick_name"`
}

type EnabledEvent

type EnabledEvent struct {
	UUID             string       `json:"uuid"`
	Account          AccountEvent `json:"account"`
	BusinessNickName string       `json:"business_nick_name"`
}

type Entity

type Entity struct {
	UUID                 string            `json:"uuid" bson:"_id,omitempty"`
	Business             Business          `json:"business" bson:"business" validate:"required,dive,required"`
	Images               []Image           `json:"images" bson:"images" validate:"required,min=1,max=30,dive,required"`
	Meta                 map[Locale]Meta   `json:"meta" bson:"meta" validate:"required,dive,required"`
	CategoryUUIDs        []string          `json:"categoryUUIDs" bson:"categoryUUIDs" validate:"required,min=1,max=30,dive,required"`
	Features             []Feature         `json:"features" bson:"features" validate:"required,min=1,max=30,dive,required"`
	Prices               []Price           `json:"prices" bson:"prices" validate:"required,min=1,max=100,dive,required"`
	Location             Location          `json:"location" bson:"location" validate:"required,dive,required"`
	Boosts               []Boost           `json:"boosts" bson:"boosts" validate:"required,min=0,max=30,dive,required"`
	Validation           *Validation       `json:"validation" bson:"validation" validate:"required,dive,required"`
	Currency             Currency          `json:"currency" bson:"currency" validate:"required,oneof=TRY USD EUR"`
	ExtraPaymentChannels []payment.Channel `json:"extraPaymentChannels" bson:"extra_payment_channels" validate:"required,min=1,max=30,dive,required,oneof=at_the_door"`
	Order                *int              `json:"order" bson:"order" validate:"required,min=0,max=1000"`
	IsActive             bool              `json:"isActive" bson:"is_active"`
	IsDeleted            bool              `json:"isDeleted" bson:"is_deleted"`
	IsValid              bool              `json:"isValid" bson:"is_valid"`
	CreatedAt            time.Time         `json:"createdAt" bson:"created_at"`
	UpdatedAt            time.Time         `json:"updatedAt" bson:"updated_at"`
}

func (*Entity) GetPrice

func (e *Entity) GetPrice(date time.Time) float64

func (*Entity) IsAvailable

func (e *Entity) IsAvailable(date time.Time) bool

func (*Entity) ToAdminDetail

func (e *Entity) ToAdminDetail() *AdminDetailDto

func (*Entity) ToAdminList

func (e *Entity) ToAdminList() *AdminListDto

func (*Entity) ToBusinessDetail

func (e *Entity) ToBusinessDetail() *BusinessDetailDto

func (*Entity) ToBusinessList

func (e *Entity) ToBusinessList() *BusinessListDto

func (*Entity) ToDetail

func (e *Entity) ToDetail() *DetailDto

func (*Entity) ToList

func (e *Entity) ToList() *ListDto

type Errors

type Errors interface {
	InvalidType() *i18np.Error
	InvalidBusiness() *i18np.Error
	InvalidMeta() *i18np.Error
	InvalidImages() *i18np.Error
	InvalidCategories() *i18np.Error
	MetaMinLength() *i18np.Error
	ImagesMinLength() *i18np.Error
	CategoriesMinLength() *i18np.Error
	InvalidPriceDate() *i18np.Error
	PriceDateConflict(time.Time, time.Time) *i18np.Error
	Failed(string) *i18np.Error
	InvalidUUID() *i18np.Error
	InvalidPeople() *i18np.Error
	NotFound() *i18np.Error
	MinAdult() *i18np.Error
	ValidateBookingNotAvailable(time.Time) *i18np.Error
	ValidateBookingAdult(int, int) *i18np.Error
	ValidateBookingKid(int, int) *i18np.Error
	ValidateBookingBaby(int, int) *i18np.Error
	ValidateBookingNotFound() *i18np.Error
}

type EventConfig

type EventConfig struct {
	Topics    config.Topics
	Publisher events.Publisher
}

type Events

type Events interface {
	Created(event CreatedEvent)
	Updated(event UpdatedEvent)
	Deleted(event DeletedEvent)
	Disabled(event DisabledEvent)
	Enabled(event EnabledEvent)
	ReOrder(event ReOrderEvent)
	Restore(event RestoreEvent)
	BookingValidationSuccess(event BookingValidationSuccessEvent)
	BookingValidationFail(event BookingValidationFailEvent)
}

func NewEvents

func NewEvents(cnf EventConfig) Events

type Factory

type Factory struct {
	Errors Errors
}

func NewFactory

func NewFactory() Factory

func (Factory) CreateSlugs

func (f Factory) CreateSlugs(trMeta *Meta, enMeta *Meta, olds ...Meta) map[Locale]Meta

func (Factory) IsZero

func (f Factory) IsZero() bool

func (Factory) New

func (f Factory) New(cnf NewConfig) *Entity

func (Factory) Validate

func (f Factory) Validate(entity Entity) *i18np.Error

type Feature

type Feature struct {
	CategoryInputUUID string      `json:"categoryInputUUID" bson:"category_input_uuid" validate:"required,uuid"`
	Value             interface{} `json:"value" bson:"value" validate:"required"`
	IsPayed           *bool       `json:"isPayed" bson:"is_payed" validate:"required"`
	Price             float64     `json:"price" bson:"price" validate:"omitempty,gt=0"`
}

type FilterEntity

type FilterEntity struct {
	Locale               string            `json:"-"`
	Query                string            `json:"query,omitempty" validate:"omitempty,max=100"`
	Price                *FilterPrice      `json:"price,omitempty" validate:"omitempty"`
	Currency             Currency          `json:"currency,omitempty" validate:"omitempty,oneof=TRY USD EUR"`
	Validation           *FilterValidation `json:"validation,omitempty" validate:"omitempty"`
	Coordinates          []float64         `json:"coordinates,omitempty" validate:"omitempty,min=2,max=2"`
	Distance             *float64          `json:"distance,omitempty" validate:"omitempty,gt=6,lt=19"`
	Features             []*FilterFeature  `json:"features,omitempty" validate:"omitempty,dive"`
	Categories           []string          `json:"categories,omitempty" validate:"omitempty,dive,object_id"`
	ExtraPaymentChannels []string          `json:"pays,omitempty" validate:"omitempty,dive,oneof=at_the_door"`
	Sort                 Sort              `json:"sort,omitempty" validate:"omitempty,oneof=most_recent nearest price"`
	Order                Order             `json:"order,omitempty" validate:"omitempty,oneof=asc desc"`
	StartDate            *time.Time        `json:"-"`
	EndDate              *time.Time        `json:"-"`
	StartDateStr         string            `json:"start_date" validate:"omitempty,datetime=2006-01-02"`
	EndDateStr           string            `json:"end_date" validate:"omitempty,datetime=2006-01-02"`
}

func (*FilterEntity) GetPerfectDistance

func (e *FilterEntity) GetPerfectDistance() float64

func (*FilterEntity) Parse

func (e *FilterEntity) Parse()

type FilterFeature

type FilterFeature struct {
	CategoryInputUUID string      `json:"categoryInputUUID" validate:"required,object_id"`
	Value             interface{} `json:"value" validate:"required"`
}

type FilterPrice

type FilterPrice struct {
	Min *float64 `json:"min" validate:"omitempty,gt=0"`
	Max *float64 `json:"max" validate:"omitempty,gt=0"`
}

type FilterValidation

type FilterValidation struct {
	Adult     *int  `json:"adult" validate:"omitempty,gt=0"`
	Kid       *int  `json:"kid" validate:"omitempty,gt=0"`
	Baby      *int  `json:"baby" validate:"omitempty,gt=0"`
	Family    *bool `json:"family" validate:"omitempty"`
	Pet       *bool `json:"pet" validate:"omitempty"`
	Smoke     *bool `json:"smoke" validate:"omitempty"`
	Alcohol   *bool `json:"alcohol" validate:"omitempty"`
	Party     *bool `json:"party" validate:"omitempty"`
	Unmarried *bool `json:"unmarried" validate:"omitempty"`
	Guest     *bool `json:"guest" validate:"omitempty"`
}

type I18nDetail

type I18nDetail struct {
	Locale string
	Slug   string
}

type Image

type Image struct {
	Url   string `json:"url" bson:"url" validate:"required,url"`
	Order *int16 `json:"order" bson:"order" validate:"required,min=0,max=20"`
}

type ListDto

type ListDto struct {
	UUID                 string            `json:"uuid" bson:"_id,omitempty"`
	Business             Business          `json:"business" bson:"business"`
	Images               []Image           `json:"images" bson:"images"`
	Meta                 map[Locale]Meta   `json:"meta" bson:"meta"`
	Prices               []Price           `json:"prices" bson:"prices"`
	Currency             Currency          `json:"currency" bson:"currency"`
	Location             Location          `json:"location" bson:"location"`
	ExtraPaymentChannels []payment.Channel `json:"extraPaymentChannels" bson:"extra_payment_channels"`
}

type ListingPriceValidationDto

type ListingPriceValidationDto struct {
	Price     float64 `json:"price" validate:"required,gt=0"`
	StartDate string  `json:"startDate" validate:"required,datetime=2006-01-02"`
	EndDate   string  `json:"endDate" validate:"required,datetime=2006-01-02"`
}

func (*ListingPriceValidationDto) ToEntity

func (d *ListingPriceValidationDto) ToEntity() Price

type Locale

type Locale string
const (
	LocaleEN Locale = "en"
	LocaleTR Locale = "tr"
)

func (Locale) String

func (l Locale) String() string

type Location

type Location struct {
	Country     string    `json:"country" validate:"required,max=255,min=3"`
	City        string    `json:"city" validate:"required,max=255,min=3"`
	Street      string    `json:"street" validate:"required,max=255,min=3"`
	Address     string    `json:"address" validate:"required,max=255,min=3"`
	IsStrict    *bool     `json:"isStrict" bson:"is_strict" validate:"required"`
	Coordinates []float64 `json:"coordinates" bson:"coordinates" validate:"required,min=2,max=2,dive,required,min=-180,max=180"`
}

type Meta

type Meta struct {
	Description string `json:"description"  validate:"required,max=255,min=3"`
	Title       string `json:"title" validate:"required,max=255,min=3"`
	Slug        string `json:"slug"`
}

type NewConfig

type NewConfig struct {
	Business             Business
	Images               []Image
	Meta                 map[Locale]Meta
	CategoryUUIDs        []string
	Features             []Feature
	Prices               []ListingPriceValidationDto
	ExtraPaymentChannels []payment.Channel
	Location             Location
	Boosts               []Boost
	Validation           *Validation
	ForCreate            bool
	Currency             Currency
}

type Order

type Order string
const (
	OrderAsc  Order = "asc"
	OrderDesc Order = "desc"
)

func (Order) IsValid

func (o Order) IsValid() bool

type Price

type Price struct {
	StartDate time.Time `json:"startDate" bson:"start_date"`
	EndDate   time.Time `json:"endDate" bson:"end_date"`
	Price     float64   `json:"price" bson:"price"`
}

type PricePerDay

type PricePerDay struct {
	Date  time.Time `json:"date"`
	Price float64   `json:"price"`
}

type ReOrderEvent

type ReOrderEvent struct {
	UUID             string       `json:"uuid"`
	Account          AccountEvent `json:"account"`
	NewOrder         int          `json:"new_order"`
	BusinessNickName string       `json:"business_nick_name"`
}

type Repository

type Repository interface {
	Create(ctx context.Context, entity *Entity) (*Entity, *i18np.Error)
	Update(ctx context.Context, entity *Entity) *i18np.Error
	Delete(ctx context.Context, listingUUID string) *i18np.Error
	Restore(ctx context.Context, listingUUID string) *i18np.Error
	Disable(ctx context.Context, listingUUID string) *i18np.Error
	Enable(ctx context.Context, listingUUID string) *i18np.Error
	MarkValid(ctx context.Context, listingUUID string) *i18np.Error
	MarkInvalid(ctx context.Context, listingUUID string) *i18np.Error
	ReOrder(ctx context.Context, listingUUID string, order int) *i18np.Error
	View(ctx context.Context, detail I18nDetail) (*Entity, *i18np.Error)
	GetByUUID(ctx context.Context, listingUUID string) (*Entity, bool, *i18np.Error)
	AdminView(ctx context.Context, listingUUID string) (*Entity, *i18np.Error)
	BusinessView(ctx context.Context, listingUUID string) (*Entity, *i18np.Error)
	Filter(ctx context.Context, filter FilterEntity, listConfig list.Config) (*list.Result[*Entity], *i18np.Error)
	FilterByBusiness(ctx context.Context, businessNickName string, filter FilterEntity, listConfig list.Config) (*list.Result[*Entity], *i18np.Error)
	AdminFilter(ctx context.Context, filter FilterEntity, listConfig list.Config) (*list.Result[*Entity], *i18np.Error)
	ListMy(ctx context.Context, businessUUID string, listConfig list.Config) (*list.Result[*Entity], *i18np.Error)
}

func NewRepo

func NewRepo(collection *mongo.Collection, factory Factory) Repository

type RestoreEvent

type RestoreEvent struct {
	UUID             string `json:"uuid"`
	BusinessNickName string `json:"business_nick_name"`
}

type Sort

type Sort string
const (
	SortByMostRecent Sort = "most_recent"
	SortByNearest    Sort = "nearest"
	SortByPrice      Sort = "price"
)

func (Sort) IsValid

func (s Sort) IsValid() bool

type UpdatedEvent

type UpdatedEvent struct {
	Old              *Entity      `json:"old"`
	Entity           *Entity      `json:"entity"`
	Account          AccountEvent `json:"account"`
	BusinessNickName string       `json:"business_nick_name"`
}

type Validation

type Validation struct {
	MinAdult    *int  `json:"minAdult" bson:"min_adult" validate:"required,min=1,max=50,ltefield=MaxAdult"`
	MaxAdult    *int  `json:"maxAdult" bson:"max_adult" validate:"required,min=0,max=50,gtefield=MinAdult"`
	MinKid      *int  `json:"minKid" bson:"min_kid" validate:"required,min=0,max=50,ltefield=MaxKid"`
	MaxKid      *int  `json:"maxKid" bson:"max_kid" validate:"required,min=0,max=50,gtefield=MinKid"`
	MinBaby     *int  `json:"minBaby" bson:"min_baby" validate:"required,min=0,max=50,ltefield=MaxBaby"`
	MaxBaby     *int  `json:"maxBaby" bson:"max_baby" validate:"required,min=0,max=50,gtefield=MinBaby"`
	MinDate     *int  `json:"minDate" bson:"min_date" validate:"required,min=0,max=50,ltefield=MaxDate"`
	MaxDate     *int  `json:"maxDate" bson:"max_date" validate:"required,min=0,max=50,gtefield=MinDate"`
	OnlyFamily  *bool `json:"onlyFamily" bson:"only_family" validate:"required"`
	NoPet       *bool `json:"noPet" bson:"no_pet" validate:"required"`
	NoSmoke     *bool `json:"noSmoke" bson:"no_smoke" validate:"required"`
	NoAlcohol   *bool `json:"noAlcohol" bson:"no_alcohol" validate:"required"`
	NoParty     *bool `json:"noParty" bson:"no_party" validate:"required"`
	NoUnmarried *bool `json:"noUnmarried" bson:"no_unmarried" validate:"required"`
	NoGuest     *bool `json:"noGuest" bson:"no_guest" validate:"required"`
}

Jump to

Keyboard shortcuts

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