package model import ( "errors" "time" ) type Position struct { Company Company Currency Currency Weight float64 CostBasis float64 Shares int } type TradeProduct int const ( StockTrade TradeProduct = iota // 0 OptionCallTrade // 1 OptionPutTrade // 2 CurrencyTrade // 3 BondTrade ) type TradeType bool const ( Buy TradeType = true Sell TradeType = false ) type Trade struct { Ticker Company Shares int Product TradeProduct Type TradeType Price float64 Currency string Date time.Time } type AddTradeRequest struct { TickerId int `json:"ticker_id"` Shares int `json:"shares"` Product int `json:"product"` Type bool `json:"type"` Price float64 `json:"price"` Currency string `json:"currency"` Date time.Time `json:"date"` } func (r *AddTradeRequest) Validate() error { if r.TickerId <= 0 { return errors.New("ticker id must be a positive integer") } if r.Shares <= 0 { return errors.New("shares must be a positive integer") } if r.Product < 0 || r.Product > 3 { return errors.New("product must be between 0 and 3") } if r.Price <= 0 { return errors.New("price must be a positive number") } if r.Currency == "" { return errors.New("currency is required") } if r.Date.IsZero() { return errors.New("date is required") } if r.Date.After(time.Now()) { return errors.New("date cannot be in the future") } return nil } // for now trades and none stock position will not be supported. type Portifolio struct { Positions []Position Trades []Trade }