data

package
v0.0.0-...-618a704 Latest Latest
Warning

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

Go to latest
Published: Nov 30, 2021 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DefaultDataSource содержит строку соединения с БД по умолчанию
	DefaultDataSource = "postgres://postgres:postgres@localhost:5432/bond_recommender"
)

Variables

View Source
var (
	// ErrNotFound возвращается, если объект не был найден в БД
	ErrNotFound = errors.New("not found")

	// ErrAlreadyExists возвращается, если объект уже существует в БД
	ErrAlreadyExists = errors.New("already exists")
)

Functions

This section is empty.

Types

type Bond

type Bond struct {
	ID                 int          `gorm:"column:id; primaryKey"`
	IssuerID           int          `gorm:"column:issuer_id"`
	MoexID             int          `gorm:"column:moex_id; unique"`
	SecurityID         string       `gorm:"column:security_id; unique"`
	ShortName          string       `gorm:"column:short_name"`
	FullName           string       `gorm:"column:full_name"`
	ISIN               string       `gorm:"column:isin"`
	IsTraded           bool         `gorm:"column:is_traded"`
	QualifiedOnly      bool         `gorm:"column:qualified_only"`
	IsHighRisk         bool         `gorm:"column:high_risk"`
	Type               BondType     `gorm:"column:type"`
	PrimaryBoardID     string       `gorm:"column:primary_board_id"`
	MarketPriceBoardID string       `gorm:"column:market_price_board_id"`
	InitialFaceValue   float64      `gorm:"column:initial_face_value"`
	FaceUnit           string       `gorm:"column:face_unit"`
	IssueDate          sql.NullTime `gorm:"column:issue_date"`
	MaturityDate       sql.NullTime `gorm:"column:maturity_date"`
	ListingLevel       int          `gorm:"column:listing_level"`
	CouponFrequency    int          `gorm:"column:coupon_freq"`
	CreatedAt          time.Time    `gorm:"column:created"`
	UpdatedAt          time.Time    `gorm:"column:updated"`
	Issuer             Issuer
	Payments           []Payment `gorm:"foreignKey:BondID"`
}

Bond содержит данные облигаций

func (Bond) TableName

func (Bond) TableName() string

TableName задает название таблицы

type BondRepository

type BondRepository interface {
	// GetByID выполняет поиски облигации по полю Bond.ID
	// Если облигация не найдена, возвращается ошибка ErrNotFound
	GetByID(id int) (*Bond, error)

	// GetByMoexID выполняет поиски облигации по полю Bond.MoexID
	// Если облигация не найдена, возвращается ошибка ErrNotFound
	GetByMoexID(moexID int) (*Bond, error)

	// GetByISIN выполняет поиски облигации по полю Bond.ISIN
	// Если облигация не найдена, возвращается ошибка ErrNotFound
	GetByISIN(isin string) (*Bond, error)

	// GetBySecurityID выполняет поиски облигации по полю Bond.SecurityID
	// Если облигация не найдена, возвращается ошибка ErrNotFound
	GetBySecurityID(securityID string) (*Bond, error)

	// Create создает облигацию
	// Если облигация уже существует, то возвращается ErrAlreadyExists
	Create(args CreateBondArgs) (*Bond, error)

	// Update обновляет данные эмитента
	// Если эмитент не найден, возвращается ошибка ErrNotFound
	Update(id int, args UpdateBondArgs) (*Bond, error)

	// GetLastUpdateTime возвращает дату и время последней выгрузки данных
	GetLastUpdateTime() (*time.Time, error)
}

BondRepository отвечает за управление записями в таблице облигаций

type BondType

type BondType string

BondType содержит тип облигации

const (
	// SubfederalBond - субфедеральные облигации
	SubfederalBond BondType = BondType(moex.SubfederalBond)

	// OFZBond - ОФЗ
	OFZBond BondType = BondType(moex.OFZBond)

	// ExchangeBond - биржевые облигации
	ExchangeBond BondType = BondType(moex.ExchangeBond)

	// CBBond - облигации ЦБ
	CBBond BondType = BondType(moex.CBBond)

	// MunicipalBond - мунициальные облигации
	MunicipalBond BondType = BondType(moex.MunicipalBond)

	// CorporateBond - корпоративные облигации
	CorporateBond BondType = BondType(moex.CorporateBond)

	// IFIBond - облигации МФО
	IFIBond BondType = BondType(moex.IFIBond)

	// EuroBond - еврооблигации
	EuroBond BondType = BondType(moex.EuroBond)
)

type CashFlowItem

type CashFlowItem struct {
	BondID   int         `gorm:"column:bond_id"`
	Type     PaymentType `gorm:"column:type"`
	Date     time.Time   `gorm:"column:date"`
	ValueRub float64     `gorm:"column:value_rub"`
}

CashFlowItem представляет запись в таблице текущих выплат

func (CashFlowItem) TableName

func (CashFlowItem) TableName() string

TableName задает название таблицы

type CashFlowRepository

type CashFlowRepository interface {
	// List возвращает полный список текущих выплат для облигации
	// Направление сортировки - по возрастанию даты
	List(id int) ([]*CashFlowItem, error)

	// Rebuild выполняет перерасчет текущих выплат для всех облигаций
	Rebuild() error
}

CashFlowRepository отвечает за управление записями в таблице текущих выплат

type CollectionBondRef

type CollectionBondRef struct {
	CollectionID string `gorm:"column:collection_id"`
	Duration     int    `gorm:"column:duration"`
	BondID       int    `gorm:"column:bond_id"`
	Order        int    `gorm:"column:order"`
}

CollectionBondRef представляет запись в таблице связей "коллекция-облигация"

func (CollectionBondRef) TableName

func (CollectionBondRef) TableName() string

TableName задает название таблицы

type CollectionBondRefRepository

type CollectionBondRefRepository interface {
	// Rebuild выполняет перерасчет списка облигаций для отдельной коллекции
	Rebuild(collectionID string, duration int, filter string) error
}

CollectionBondRefRepository отвечает за управление записями в таблице связей "коллекция-облигация"

type CreateAmortizationPaymentArgs

type CreateAmortizationPaymentArgs struct {
	CreatePaymentArgs
}

CreateAmortizationPaymentArgs содержит параметры для создания выплаты по амортизации

type CreateBondArgs

type CreateBondArgs struct {
	IssuerID           int
	MoexID             int
	SecurityID         string
	ShortName          string
	FullName           string
	ISIN               string
	IsTraded           bool
	QualifiedOnly      bool
	IsHighRisk         bool
	Type               BondType
	PrimaryBoardID     string
	MarketPriceBoardID string
	InitialFaceValue   float64
	FaceUnit           string
	IssueDate          sql.NullTime
	MaturityDate       sql.NullTime
	ListingLevel       int
	CouponFrequency    int
}

CreateBondArgs содержит данные для создания облигации

type CreateCouponPaymentArgs

type CreateCouponPaymentArgs struct {
	CreatePaymentArgs
	RecordDate *time.Time
	StartDate  *time.Time
}

CreateCouponPaymentArgs содержит параметры для создания выплаты по купону

type CreateIssuerArgs

type CreateIssuerArgs struct {
	MoexID int
	Name   string
	INN    *string
	OKPO   *string
}

CreateIssuerArgs содержит данные для создания эмитента

type CreateMaturityPaymentArgs

type CreateMaturityPaymentArgs struct {
	CreatePaymentArgs
}

CreateMaturityPaymentArgs содержит параметры для создания выплаты по погашению

type CreateOfferArgs

type CreateOfferArgs struct {
	BondID     int
	IssueValue *float64
	Date       sql.NullTime
	StartDate  sql.NullTime
	EndDate    sql.NullTime
	FaceValue  *float64
	FaceUnit   string
	Price      *float64
	Value      *float64
	Agent      *string
	Type       *OfferType
}

CreateOfferArgs содержит параметры для создания оферты

type CreatePaymentArgs

type CreatePaymentArgs struct {
	BondID       int
	Date         time.Time
	Value        float64
	ValuePercent float64
	ValueRub     float64
}

CreatePaymentArgs содержит параметры для создания выплаты (общие для всех типов выплат)

type DB

type DB interface {
	// BeginTX начинает новую транзакцию
	BeginTX() (*TX, error)
}

DB предоставляет доступ к репозиториям БД

func New

func New(options ...Option) (DB, error)

New создает новый объект DB

type Issuer

type Issuer struct {
	ID        int       `gorm:"column:id; primaryKey"`
	MoexID    int       `gorm:"column:moex_id; unique"`
	Name      string    `gorm:"column:name"`
	INN       *string   `gorm:"column:inn; unique"`
	OKPO      *string   `gorm:"column:okpo"`
	CreatedAt time.Time `gorm:"column:created"`
	UpdatedAt time.Time `gorm:"column:updated"`
	Bonds     []Bond    `gorm:"foreignKey:IssuerID"`
}

Issuer содержит данные эмитента

func (Issuer) TableName

func (Issuer) TableName() string

TableName задает название таблицы

type IssuerRepository

type IssuerRepository interface {
	// GetByID выполняет поиски эмитента по полю Issuer.ID
	// Если эмитент не найден, возвращается ошибка ErrNotFound
	GetByID(id int) (*Issuer, error)

	// GetByMoexID выполняет поиски эмитента по полю Issuer.MoexID
	// Если эмитент не найден, возвращается ошибка ErrNotFound
	GetByMoexID(moexID int) (*Issuer, error)

	// GetByINN выполняет поиски эмитента по полю Issuer.INN
	// Если эмитент не найден, возвращается ошибка ErrNotFound
	GetByINN(inn string) (*Issuer, error)

	// Create создает эмитента
	// Если эмитент уже существует, то возвращается ErrAlreadyExists
	Create(args CreateIssuerArgs) (*Issuer, error)

	// Update обновляет данные эмитента
	// Если эмитент не найден, возвращается ошибка ErrNotFound
	// Если эмитент не найден, возвращается ошибка ErrNotFound
	Update(id int, args UpdateIssuerArgs) (*Issuer, error)
}

IssuerRepository отвечает за управление записями в таблице эмитентов

type MarketData

type MarketData struct {
	ID              int       `gorm:"column:id; primaryKey"`
	BondID          int       `gorm:"column:bond_id"`
	Time            time.Time `gorm:"column:time"`
	FaceValue       *float64  `gorm:"column:face_value"`
	Currency        *string   `gorm:"column:currency"`
	Last            *float64  `gorm:"column:last"`
	LastChange      *float64  `gorm:"column:last_change"`
	ClosePrice      *float64  `gorm:"column:close_price"`
	LegalClosePrice *float64  `gorm:"column:legal_close_price"`
	AccruedInterest *float64  `gorm:"column:accrued_interest"`
	Bond            Bond
}

MarketData содержит последние рыночные данные по облигации

func (MarketData) TableName

func (MarketData) TableName() string

TableName задает название таблицы

type MarketDataRepository

type MarketDataRepository interface {
	// Get возвращает запись для указанной облигации
	// Если указанной записи не существует, то возвращается ошибка ErrNotFound
	Get(bondID int) (*MarketData, error)

	// Put записывает рыночные данные для указанной облигации
	// Если рыночные данные уже существуют, они обновляются
	Put(bondID int, args PutMarketDataArgs) (*MarketData, error)
}

MarketDataRepository отвечает за управление записями в таблице рыночных данных

type Offer

type Offer struct {
	ID         int          `gorm:"column:id; primaryKey"`
	BondID     int          `gorm:"column:bond_id"`
	IssueValue *float64     `gorm:"issue_value"`
	Date       sql.NullTime `gorm:"date"`
	StartDate  sql.NullTime `gorm:"start_date"`
	EndDate    sql.NullTime `gorm:"end_date"`
	FaceValue  *float64     `gorm:"face_value"`
	FaceUnit   string       `gorm:"face_unit"`
	Price      *float64     `gorm:"column:price"`
	Value      *float64     `gorm:"column:value"`
	Agent      *string      `gorm:"column:agent"`
	Type       *OfferType   `gorm:"column:type"`
	CreatedAt  time.Time    `gorm:"column:created"`
	UpdatedAt  time.Time    `gorm:"column:updated"`
	Bond       Bond
}

Offer содержит данные по офертам

func (Offer) TableName

func (Offer) TableName() string

TableName задает название таблицы

type OfferRepository

type OfferRepository interface {
	// Create создает новую выплату по оферте
	// Если указанная оферта уже существует, то возвращается ошибка ErrAlreadyExists
	Create(args CreateOfferArgs) (*Offer, error)
}

OfferRepository отвечает за управление записями в таблице оферт

type OfferType

type OfferType string

OfferType содержит тип оферты

const (
	// GenericOffer - оферта
	GenericOffer OfferType = "offer"

	// CompletedGenericOffer - состоявшаяся оферта
	CompletedGenericOffer OfferType = "completed_offer"

	// CanceledGenericOffer - отмененнная оферта
	CanceledGenericOffer OfferType = "canceled_offer"

	// DefaultGenericOffer - дефолт оферты
	DefaultGenericOffer OfferType = "default_offer"

	// TechDefaultGenericOffer - технический дефолт оферты
	TechDefaultGenericOffer OfferType = "tech_default_offer"

	// MaturityOffer - оферта-погашение
	MaturityOffer OfferType = "maturity"

	// CanceledMaturityOffer - отмененнная оферта-погашение
	CanceledMaturityOffer OfferType = "canceled_maturity"
)

type Option

type Option func(c *dbContextConfig) error

Option конфигурирует контекст БД

func WithDataSource

func WithDataSource(dsn string) Option

WithDataSource задает строку соединения с БД

func WithLogger

func WithLogger(log *log.Logger) Option

WithLogger задает логгер

type Payment

type Payment struct {
	ID               int          `gorm:"column:id; primaryKey"`
	BondID           int          `gorm:"column:bond_id"`
	Type             PaymentType  `gorm:"column:type"`
	Date             time.Time    `gorm:"column:date"`
	Value            float64      `gorm:"column:value"`
	ValuePercent     float64      `gorm:"column:value_percent"`
	ValueRub         float64      `gorm:"column:value_rub"`
	CouponRecordDate sql.NullTime `gorm:"column:coupon_record_date"`
	CouponStartDate  sql.NullTime `gorm:"column:coupon_start_date"`
	CreatedAt        time.Time    `gorm:"column:created"`
	UpdatedAt        time.Time    `gorm:"column:updated"`
	Bond             Bond
}

Payment содержит данные по выплатам (погашения, купоны, амортизации)

func (Payment) TableName

func (Payment) TableName() string

TableName задает название таблицы

type PaymentListQuery

type PaymentListQuery struct {
	BondID int
	Types  []PaymentType
	Since  *time.Time
}

PaymentListQuery содержит параметры запроса списка выплат

type PaymentRepository

type PaymentRepository interface {
	// List возвращает полный список выплат, удовлетворяющих фильтру
	// Направление сортировки - по возрастанию даты
	List(query PaymentListQuery) ([]*Payment, error)

	// Get возвращает выплату по ее параметрам
	// Если указанной выплаты не существует, то возвращается ошибка ErrNotFound
	Get(bondID int, date time.Time, paymentType PaymentType) (*Payment, error)

	// CreateCoupon создает новую выплату по купону
	// Если указанная выплата уже существует, то возвращается ошибка ErrAlreadyExists
	CreateCoupon(args CreateCouponPaymentArgs) (*Payment, error)

	// CreateAmortization создает новую выплату по амортизации
	// Если указанная выплата уже существует, то возвращается ошибка ErrAlreadyExists
	CreateAmortization(args CreateAmortizationPaymentArgs) (*Payment, error)

	// CreateMaturity создает новую выплату по погашению
	// Если указанная выплата уже существует, то возвращается ошибка ErrAlreadyExists
	CreateMaturity(args CreateMaturityPaymentArgs) (*Payment, error)

	// Last возвращает последнюю выгруженную выплату указанного типа
	// Если выплат указанного типа не существует, то возвращается ошибка ErrNotFound
	Last(t PaymentType) (*Payment, error)
}

PaymentRepository отвечает за управление записями в таблице выплат

type PaymentType

type PaymentType string

PaymentType содерижт тип выплаты

const (
	MaturityPayment     PaymentType = "M"
	CouponPayment       PaymentType = "C"
	AmortizationPayment PaymentType = "A"
)

type PutMarketDataArgs

type PutMarketDataArgs struct {
	Time            time.Time
	FaceValue       *float64
	Currency        *string
	Last            *float64
	LastChange      *float64
	ClosePrice      *float64
	LegalClosePrice *float64
	AccruedInterest *float64
}

PutMarketDataArgs содержит параметры для записи рыночных данных

type Report

type Report struct {
	Bond                 Bond       `gorm:"embedded;embeddedPrefix:bond_"`
	Issuer               Issuer     `gorm:"embedded;embeddedPrefix:issuer_"`
	MarketData           MarketData `gorm:"embedded;embeddedPrefix:marketdata_"`
	DaysTillMaturity     int        `gorm:"column:days_till_maturity"`
	Currency             string     `gorm:"column:currency"`
	OpenPrice            float64    `gorm:"column:open_price"`
	OpenAccruedInterest  float64    `gorm:"column:open_accrued_interest"`
	OpenFaceValue        float64    `gorm:"column:open_face_value"`
	OpenFee              float64    `gorm:"column:open_fee"`
	OpenValue            float64    `gorm:"column:open_value"`
	CouponPayments       float64    `gorm:"column:coupon_payments"`
	AmortizationPayments float64    `gorm:"column:amortization_payments"`
	MaturityPayment      float64    `gorm:"column:maturity_payments"`
	Taxes                float64    `gorm:"column:taxes"`
	Revenue              float64    `gorm:"column:revenue"`
	ProfitLoss           float64    `gorm:"column:profit_loss"`
	RelativeProfitLoss   float64    `gorm:"column:relative_profit_loss"`
	InterestRate         float64    `gorm:"column:interest_rate"`
}

Report содержит данные отчета по облигации

func (Report) TableName

func (Report) TableName() string

TableName задает название таблицы

type ReportRepository

type ReportRepository interface {
	// Get возвращает отчет по облигации
	// Если данные по указанной облигации не найдены, то возвращается ErrNotFound
	Get(id int) (*Report, error)

	// List возвращает отчеты по облигациям, которые удовлетворяют указанному подзапросу
	List(limit int, filter string, values ...interface{}) ([]*Report, error)

	// Rebuild выполняет перерасчет отчетов по облигациям
	Rebuild() error
}

ReportRepository отвечает за управление записями в таблице отчетов по облигациям

type SearchIndex

type SearchIndex struct {
	ID     int    `gorm:"column:id; primaryKey"`
	BondID int    `gorm:"column:bond_id"`
	Vector string `gorm:"column:vector; type:tsvector"`
}

SearchIndex содержит данные для поиска облигаций

func (SearchIndex) TableName

func (SearchIndex) TableName() string

TableName задает название таблицы

type SearchRepository

type SearchRepository interface {
	// Exec выполняет поиск по поисковому индексу
	Exec(filter string, skip, limit int) (bonds []*Bond, totalCount int, err error)

	// Rebuild выполняет пересборку поискового индекса
	Rebuild() error
}

SearchRepository предоставляет доступ к данным поискового индекса

type TX

type TX struct {
	Issuers                  IssuerRepository
	Bonds                    BondRepository
	Payments                 PaymentRepository
	Offers                   OfferRepository
	MarketData               MarketDataRepository
	Search                   SearchRepository
	CashFlow                 CashFlowRepository
	Reports                  ReportRepository
	CollectionBondReferences CollectionBondRefRepository
	// contains filtered or unexported fields
}

TX представляет транзакцию БД

func (*TX) Close

func (tx *TX) Close()

Close завершает транзакцию

func (*TX) Commit

func (tx *TX) Commit() error

Commit фиксирует транзакцию

type UpdateBondArgs

type UpdateBondArgs struct {
	IsTraded           bool
	QualifiedOnly      bool
	PrimaryBoardID     string
	MarketPriceBoardID string
	IssueDate          sql.NullTime
	MaturityDate       sql.NullTime
}

UpdateBondArgs содержит данные для создания облигации

type UpdateIssuerArgs

type UpdateIssuerArgs struct {
	Name string
	INN  *string
	OKPO *string
}

UpdateIssuerArgs содержит данные для обновления эмитента

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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