feat: add orders

This commit is contained in:
yanghao05
2025-04-10 21:42:13 +08:00
parent 5a63eee1ce
commit 8baab46132
20 changed files with 979 additions and 1 deletions

View File

@@ -0,0 +1,259 @@
// Code generated by go-enum DO NOT EDIT.
// Version: -
// Revision: -
// Build Date: -
// Built By: -
package fields
import (
"database/sql/driver"
"errors"
"fmt"
"strconv"
"strings"
)
const (
// OrderStatusPending is a OrderStatus of type Pending.
OrderStatusPending OrderStatus = iota
// OrderStatusPaid is a OrderStatus of type Paid.
OrderStatusPaid
// OrderStatusRefunding is a OrderStatus of type Refunding.
OrderStatusRefunding
// OrderStatusRefunded is a OrderStatus of type Refunded.
OrderStatusRefunded
// OrderStatusCancelled is a OrderStatus of type Cancelled.
OrderStatusCancelled
// OrderStatusCompleted is a OrderStatus of type Completed.
OrderStatusCompleted
)
var ErrInvalidOrderStatus = fmt.Errorf("not a valid OrderStatus, try [%s]", strings.Join(_OrderStatusNames, ", "))
const _OrderStatusName = "pendingpaidrefundingrefundedcancelledcompleted"
var _OrderStatusNames = []string{
_OrderStatusName[0:7],
_OrderStatusName[7:11],
_OrderStatusName[11:20],
_OrderStatusName[20:28],
_OrderStatusName[28:37],
_OrderStatusName[37:46],
}
// OrderStatusNames returns a list of possible string values of OrderStatus.
func OrderStatusNames() []string {
tmp := make([]string, len(_OrderStatusNames))
copy(tmp, _OrderStatusNames)
return tmp
}
// OrderStatusValues returns a list of the values for OrderStatus
func OrderStatusValues() []OrderStatus {
return []OrderStatus{
OrderStatusPending,
OrderStatusPaid,
OrderStatusRefunding,
OrderStatusRefunded,
OrderStatusCancelled,
OrderStatusCompleted,
}
}
var _OrderStatusMap = map[OrderStatus]string{
OrderStatusPending: _OrderStatusName[0:7],
OrderStatusPaid: _OrderStatusName[7:11],
OrderStatusRefunding: _OrderStatusName[11:20],
OrderStatusRefunded: _OrderStatusName[20:28],
OrderStatusCancelled: _OrderStatusName[28:37],
OrderStatusCompleted: _OrderStatusName[37:46],
}
// String implements the Stringer interface.
func (x OrderStatus) String() string {
if str, ok := _OrderStatusMap[x]; ok {
return str
}
return fmt.Sprintf("OrderStatus(%d)", x)
}
// IsValid provides a quick way to determine if the typed value is
// part of the allowed enumerated values
func (x OrderStatus) IsValid() bool {
_, ok := _OrderStatusMap[x]
return ok
}
var _OrderStatusValue = map[string]OrderStatus{
_OrderStatusName[0:7]: OrderStatusPending,
_OrderStatusName[7:11]: OrderStatusPaid,
_OrderStatusName[11:20]: OrderStatusRefunding,
_OrderStatusName[20:28]: OrderStatusRefunded,
_OrderStatusName[28:37]: OrderStatusCancelled,
_OrderStatusName[37:46]: OrderStatusCompleted,
}
// ParseOrderStatus attempts to convert a string to a OrderStatus.
func ParseOrderStatus(name string) (OrderStatus, error) {
if x, ok := _OrderStatusValue[name]; ok {
return x, nil
}
return OrderStatus(0), fmt.Errorf("%s is %w", name, ErrInvalidOrderStatus)
}
var errOrderStatusNilPtr = errors.New("value pointer is nil") // one per type for package clashes
// Scan implements the Scanner interface.
func (x *OrderStatus) Scan(value interface{}) (err error) {
if value == nil {
*x = OrderStatus(0)
return
}
// A wider range of scannable types.
// driver.Value values at the top of the list for expediency
switch v := value.(type) {
case int64:
*x = OrderStatus(v)
case string:
*x, err = ParseOrderStatus(v)
if err != nil {
// try parsing the integer value as a string
if val, verr := strconv.Atoi(v); verr == nil {
*x, err = OrderStatus(val), nil
}
}
case []byte:
*x, err = ParseOrderStatus(string(v))
if err != nil {
// try parsing the integer value as a string
if val, verr := strconv.Atoi(string(v)); verr == nil {
*x, err = OrderStatus(val), nil
}
}
case OrderStatus:
*x = v
case int:
*x = OrderStatus(v)
case *OrderStatus:
if v == nil {
return errOrderStatusNilPtr
}
*x = *v
case uint:
*x = OrderStatus(v)
case uint64:
*x = OrderStatus(v)
case *int:
if v == nil {
return errOrderStatusNilPtr
}
*x = OrderStatus(*v)
case *int64:
if v == nil {
return errOrderStatusNilPtr
}
*x = OrderStatus(*v)
case float64: // json marshals everything as a float64 if it's a number
*x = OrderStatus(v)
case *float64: // json marshals everything as a float64 if it's a number
if v == nil {
return errOrderStatusNilPtr
}
*x = OrderStatus(*v)
case *uint:
if v == nil {
return errOrderStatusNilPtr
}
*x = OrderStatus(*v)
case *uint64:
if v == nil {
return errOrderStatusNilPtr
}
*x = OrderStatus(*v)
case *string:
if v == nil {
return errOrderStatusNilPtr
}
*x, err = ParseOrderStatus(*v)
if err != nil {
// try parsing the integer value as a string
if val, verr := strconv.Atoi(*v); verr == nil {
*x, err = OrderStatus(val), nil
}
}
}
return
}
// Value implements the driver Valuer interface.
func (x OrderStatus) Value() (driver.Value, error) {
return int64(x), nil
}
// Set implements the Golang flag.Value interface func.
func (x *OrderStatus) Set(val string) error {
v, err := ParseOrderStatus(val)
*x = v
return err
}
// Get implements the Golang flag.Getter interface func.
func (x *OrderStatus) Get() interface{} {
return *x
}
// Type implements the github.com/spf13/pFlag Value interface.
func (x *OrderStatus) Type() string {
return "OrderStatus"
}
type NullOrderStatus struct {
OrderStatus OrderStatus
Valid bool
}
func NewNullOrderStatus(val interface{}) (x NullOrderStatus) {
x.Scan(val) // yes, we ignore this error, it will just be an invalid value.
return
}
// Scan implements the Scanner interface.
func (x *NullOrderStatus) Scan(value interface{}) (err error) {
if value == nil {
x.OrderStatus, x.Valid = OrderStatus(0), false
return
}
err = x.OrderStatus.Scan(value)
x.Valid = (err == nil)
return
}
// Value implements the driver Valuer interface.
func (x NullOrderStatus) Value() (driver.Value, error) {
if !x.Valid {
return nil, nil
}
// driver.Value accepts int64 for int values.
return int64(x.OrderStatus), nil
}
type NullOrderStatusStr struct {
NullOrderStatus
}
func NewNullOrderStatusStr(val interface{}) (x NullOrderStatusStr) {
x.Scan(val) // yes, we ignore this error, it will just be an invalid value.
return
}
// Value implements the driver Valuer interface.
func (x NullOrderStatusStr) Value() (driver.Value, error) {
if !x.Valid {
return nil, nil
}
return x.OrderStatus.String(), nil
}

View File

@@ -0,0 +1,7 @@
package fields
// swagger:enum OrderStatus
// ENUM( pending, paid, refunding, refunded, cancelled, completed)
type OrderStatus int16
type OrderMeta struct{}

View File

@@ -0,0 +1,26 @@
-- +goose Up
-- +goose StatementBegin
CREATE TABLE orders(
id SERIAL8 PRIMARY KEY,
created_at timestamp NOT NULL DEFAULT now(),
updated_at timestamp NOT NULL DEFAULT now(),
order_no varchar(64) NOT NULL,
sub_order_no varchar(64) NOT NULL DEFAULT '',
transaction_id varchar(64) NOT NULL DEFAULT '',
refund_transaction_id varchar(64) NOT NULL DEFAULT '',
price int8 NOT NULL DEFAULT 0,
discount int2 NOT NULL DEFAULT 100,
currency varchar(10) NOT NULL DEFAULT 'CNY',
payment_method varchar(50) NOT NULL DEFAULT 'wechatpay',
post_id int8 NOT NULL,
user_id int8 NOT NULL,
status int2 NOT NULL,
meta jsonb NOT NULL DEFAULT '{}' ::jsonb
);
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP TABLE orders;
-- +goose StatementEnd

View File

@@ -0,0 +1,31 @@
//
// Code generated by go-jet DO NOT EDIT.
//
// WARNING: Changes to this file may cause incorrect behavior
// and will be lost if the code is regenerated
//
package model
import (
"quyun/database/fields"
"time"
)
type Orders struct {
ID int64 `sql:"primary_key" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
OrderNo string `json:"order_no"`
SubOrderNo string `json:"sub_order_no"`
TransactionID string `json:"transaction_id"`
RefundTransactionID string `json:"refund_transaction_id"`
Price int64 `json:"price"`
Discount int16 `json:"discount"`
Currency string `json:"currency"`
PaymentMethod string `json:"payment_method"`
PostID int64 `json:"post_id"`
UserID int64 `json:"user_id"`
Status fields.OrderStatus `json:"status"`
Meta fields.Json[fields.OrderMeta] `json:"meta"`
}

View File

@@ -0,0 +1,117 @@
//
// Code generated by go-jet DO NOT EDIT.
//
// WARNING: Changes to this file may cause incorrect behavior
// and will be lost if the code is regenerated
//
package table
import (
"github.com/go-jet/jet/v2/postgres"
)
var Orders = newOrdersTable("public", "orders", "")
type ordersTable struct {
postgres.Table
// Columns
ID postgres.ColumnInteger
CreatedAt postgres.ColumnTimestamp
UpdatedAt postgres.ColumnTimestamp
OrderNo postgres.ColumnString
SubOrderNo postgres.ColumnString
TransactionID postgres.ColumnString
RefundTransactionID postgres.ColumnString
Price postgres.ColumnInteger
Discount postgres.ColumnInteger
Currency postgres.ColumnString
PaymentMethod postgres.ColumnString
PostID postgres.ColumnInteger
UserID postgres.ColumnInteger
Status postgres.ColumnInteger
Meta postgres.ColumnString
AllColumns postgres.ColumnList
MutableColumns postgres.ColumnList
}
type OrdersTable struct {
ordersTable
EXCLUDED ordersTable
}
// AS creates new OrdersTable with assigned alias
func (a OrdersTable) AS(alias string) *OrdersTable {
return newOrdersTable(a.SchemaName(), a.TableName(), alias)
}
// Schema creates new OrdersTable with assigned schema name
func (a OrdersTable) FromSchema(schemaName string) *OrdersTable {
return newOrdersTable(schemaName, a.TableName(), a.Alias())
}
// WithPrefix creates new OrdersTable with assigned table prefix
func (a OrdersTable) WithPrefix(prefix string) *OrdersTable {
return newOrdersTable(a.SchemaName(), prefix+a.TableName(), a.TableName())
}
// WithSuffix creates new OrdersTable with assigned table suffix
func (a OrdersTable) WithSuffix(suffix string) *OrdersTable {
return newOrdersTable(a.SchemaName(), a.TableName()+suffix, a.TableName())
}
func newOrdersTable(schemaName, tableName, alias string) *OrdersTable {
return &OrdersTable{
ordersTable: newOrdersTableImpl(schemaName, tableName, alias),
EXCLUDED: newOrdersTableImpl("", "excluded", ""),
}
}
func newOrdersTableImpl(schemaName, tableName, alias string) ordersTable {
var (
IDColumn = postgres.IntegerColumn("id")
CreatedAtColumn = postgres.TimestampColumn("created_at")
UpdatedAtColumn = postgres.TimestampColumn("updated_at")
OrderNoColumn = postgres.StringColumn("order_no")
SubOrderNoColumn = postgres.StringColumn("sub_order_no")
TransactionIDColumn = postgres.StringColumn("transaction_id")
RefundTransactionIDColumn = postgres.StringColumn("refund_transaction_id")
PriceColumn = postgres.IntegerColumn("price")
DiscountColumn = postgres.IntegerColumn("discount")
CurrencyColumn = postgres.StringColumn("currency")
PaymentMethodColumn = postgres.StringColumn("payment_method")
PostIDColumn = postgres.IntegerColumn("post_id")
UserIDColumn = postgres.IntegerColumn("user_id")
StatusColumn = postgres.IntegerColumn("status")
MetaColumn = postgres.StringColumn("meta")
allColumns = postgres.ColumnList{IDColumn, CreatedAtColumn, UpdatedAtColumn, OrderNoColumn, SubOrderNoColumn, TransactionIDColumn, RefundTransactionIDColumn, PriceColumn, DiscountColumn, CurrencyColumn, PaymentMethodColumn, PostIDColumn, UserIDColumn, StatusColumn, MetaColumn}
mutableColumns = postgres.ColumnList{CreatedAtColumn, UpdatedAtColumn, OrderNoColumn, SubOrderNoColumn, TransactionIDColumn, RefundTransactionIDColumn, PriceColumn, DiscountColumn, CurrencyColumn, PaymentMethodColumn, PostIDColumn, UserIDColumn, StatusColumn, MetaColumn}
)
return ordersTable{
Table: postgres.NewTable(schemaName, tableName, alias, allColumns...),
//Columns
ID: IDColumn,
CreatedAt: CreatedAtColumn,
UpdatedAt: UpdatedAtColumn,
OrderNo: OrderNoColumn,
SubOrderNo: SubOrderNoColumn,
TransactionID: TransactionIDColumn,
RefundTransactionID: RefundTransactionIDColumn,
Price: PriceColumn,
Discount: DiscountColumn,
Currency: CurrencyColumn,
PaymentMethod: PaymentMethodColumn,
PostID: PostIDColumn,
UserID: UserIDColumn,
Status: StatusColumn,
Meta: MetaColumn,
AllColumns: allColumns,
MutableColumns: mutableColumns,
}
}

View File

@@ -12,6 +12,7 @@ package table
func UseSchema(schema string) {
Medias = Medias.FromSchema(schema)
Migrations = Migrations.FromSchema(schema)
Orders = Orders.FromSchema(schema)
Posts = Posts.FromSchema(schema)
UserPosts = UserPosts.FromSchema(schema)
Users = Users.FromSchema(schema)

View File

@@ -16,7 +16,11 @@ types:
status: PostStatus
assets: Json[[]MediaAsset]
tags: Json[[]string]
meta: PostMeta
meta: Json[PostMeta]
users:
status: UserStatus
orders:
status: OrderStatus
meta: Json[OrderMeta]