first
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
t
|
||||
213
ent/client.go
Normal file
213
ent/client.go
Normal file
@@ -0,0 +1,213 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package ent
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"t/ent/migrate"
|
||||
|
||||
"t/ent/users"
|
||||
|
||||
"entgo.io/ent/dialect"
|
||||
"entgo.io/ent/dialect/sql"
|
||||
)
|
||||
|
||||
// Client is the client that holds all ent builders.
|
||||
type Client struct {
|
||||
config
|
||||
// Schema is the client for creating, migrating and dropping schema.
|
||||
Schema *migrate.Schema
|
||||
// Users is the client for interacting with the Users builders.
|
||||
Users *UsersClient
|
||||
}
|
||||
|
||||
// NewClient creates a new client configured with the given options.
|
||||
func NewClient(opts ...Option) *Client {
|
||||
cfg := config{log: log.Println, hooks: &hooks{}}
|
||||
cfg.options(opts...)
|
||||
client := &Client{config: cfg}
|
||||
client.init()
|
||||
return client
|
||||
}
|
||||
|
||||
func (c *Client) init() {
|
||||
c.Schema = migrate.NewSchema(c.driver)
|
||||
c.Users = NewUsersClient(c.config)
|
||||
}
|
||||
|
||||
// Open opens a database/sql.DB specified by the driver name and
|
||||
// the data source name, and returns a new client attached to it.
|
||||
// Optional parameters can be added for configuring the client.
|
||||
func Open(driverName, dataSourceName string, options ...Option) (*Client, error) {
|
||||
switch driverName {
|
||||
case dialect.MySQL, dialect.Postgres, dialect.SQLite:
|
||||
drv, err := sql.Open(driverName, dataSourceName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return NewClient(append(options, Driver(drv))...), nil
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported driver: %q", driverName)
|
||||
}
|
||||
}
|
||||
|
||||
// Tx returns a new transactional client. The provided context
|
||||
// is used until the transaction is committed or rolled back.
|
||||
func (c *Client) Tx(ctx context.Context) (*Tx, error) {
|
||||
if _, ok := c.driver.(*txDriver); ok {
|
||||
return nil, fmt.Errorf("ent: cannot start a transaction within a transaction")
|
||||
}
|
||||
tx, err := newTx(ctx, c.driver)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("ent: starting a transaction: %w", err)
|
||||
}
|
||||
cfg := c.config
|
||||
cfg.driver = tx
|
||||
return &Tx{
|
||||
ctx: ctx,
|
||||
config: cfg,
|
||||
Users: NewUsersClient(cfg),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// BeginTx returns a transactional client with specified options.
|
||||
func (c *Client) BeginTx(ctx context.Context, opts *sql.TxOptions) (*Tx, error) {
|
||||
if _, ok := c.driver.(*txDriver); ok {
|
||||
return nil, fmt.Errorf("ent: cannot start a transaction within a transaction")
|
||||
}
|
||||
tx, err := c.driver.(interface {
|
||||
BeginTx(context.Context, *sql.TxOptions) (dialect.Tx, error)
|
||||
}).BeginTx(ctx, opts)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("ent: starting a transaction: %w", err)
|
||||
}
|
||||
cfg := c.config
|
||||
cfg.driver = &txDriver{tx: tx, drv: c.driver}
|
||||
return &Tx{
|
||||
ctx: ctx,
|
||||
config: cfg,
|
||||
Users: NewUsersClient(cfg),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Debug returns a new debug-client. It's used to get verbose logging on specific operations.
|
||||
//
|
||||
// client.Debug().
|
||||
// Users.
|
||||
// Query().
|
||||
// Count(ctx)
|
||||
//
|
||||
func (c *Client) Debug() *Client {
|
||||
if c.debug {
|
||||
return c
|
||||
}
|
||||
cfg := c.config
|
||||
cfg.driver = dialect.Debug(c.driver, c.log)
|
||||
client := &Client{config: cfg}
|
||||
client.init()
|
||||
return client
|
||||
}
|
||||
|
||||
// Close closes the database connection and prevents new queries from starting.
|
||||
func (c *Client) Close() error {
|
||||
return c.driver.Close()
|
||||
}
|
||||
|
||||
// Use adds the mutation hooks to all the entity clients.
|
||||
// In order to add hooks to a specific client, call: `client.Node.Use(...)`.
|
||||
func (c *Client) Use(hooks ...Hook) {
|
||||
c.Users.Use(hooks...)
|
||||
}
|
||||
|
||||
// UsersClient is a client for the Users schema.
|
||||
type UsersClient struct {
|
||||
config
|
||||
}
|
||||
|
||||
// NewUsersClient returns a client for the Users from the given config.
|
||||
func NewUsersClient(c config) *UsersClient {
|
||||
return &UsersClient{config: c}
|
||||
}
|
||||
|
||||
// Use adds a list of mutation hooks to the hooks stack.
|
||||
// A call to `Use(f, g, h)` equals to `users.Hooks(f(g(h())))`.
|
||||
func (c *UsersClient) Use(hooks ...Hook) {
|
||||
c.hooks.Users = append(c.hooks.Users, hooks...)
|
||||
}
|
||||
|
||||
// Create returns a create builder for Users.
|
||||
func (c *UsersClient) Create() *UsersCreate {
|
||||
mutation := newUsersMutation(c.config, OpCreate)
|
||||
return &UsersCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||
}
|
||||
|
||||
// CreateBulk returns a builder for creating a bulk of Users entities.
|
||||
func (c *UsersClient) CreateBulk(builders ...*UsersCreate) *UsersCreateBulk {
|
||||
return &UsersCreateBulk{config: c.config, builders: builders}
|
||||
}
|
||||
|
||||
// Update returns an update builder for Users.
|
||||
func (c *UsersClient) Update() *UsersUpdate {
|
||||
mutation := newUsersMutation(c.config, OpUpdate)
|
||||
return &UsersUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||
}
|
||||
|
||||
// UpdateOne returns an update builder for the given entity.
|
||||
func (c *UsersClient) UpdateOne(u *Users) *UsersUpdateOne {
|
||||
mutation := newUsersMutation(c.config, OpUpdateOne, withUsers(u))
|
||||
return &UsersUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||
}
|
||||
|
||||
// UpdateOneID returns an update builder for the given id.
|
||||
func (c *UsersClient) UpdateOneID(id int) *UsersUpdateOne {
|
||||
mutation := newUsersMutation(c.config, OpUpdateOne, withUsersID(id))
|
||||
return &UsersUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||
}
|
||||
|
||||
// Delete returns a delete builder for Users.
|
||||
func (c *UsersClient) Delete() *UsersDelete {
|
||||
mutation := newUsersMutation(c.config, OpDelete)
|
||||
return &UsersDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||
}
|
||||
|
||||
// DeleteOne returns a delete builder for the given entity.
|
||||
func (c *UsersClient) DeleteOne(u *Users) *UsersDeleteOne {
|
||||
return c.DeleteOneID(u.ID)
|
||||
}
|
||||
|
||||
// DeleteOneID returns a delete builder for the given id.
|
||||
func (c *UsersClient) DeleteOneID(id int) *UsersDeleteOne {
|
||||
builder := c.Delete().Where(users.ID(id))
|
||||
builder.mutation.id = &id
|
||||
builder.mutation.op = OpDeleteOne
|
||||
return &UsersDeleteOne{builder}
|
||||
}
|
||||
|
||||
// Query returns a query builder for Users.
|
||||
func (c *UsersClient) Query() *UsersQuery {
|
||||
return &UsersQuery{
|
||||
config: c.config,
|
||||
}
|
||||
}
|
||||
|
||||
// Get returns a Users entity by its id.
|
||||
func (c *UsersClient) Get(ctx context.Context, id int) (*Users, error) {
|
||||
return c.Query().Where(users.ID(id)).Only(ctx)
|
||||
}
|
||||
|
||||
// GetX is like Get, but panics if an error occurs.
|
||||
func (c *UsersClient) GetX(ctx context.Context, id int) *Users {
|
||||
obj, err := c.Get(ctx, id)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return obj
|
||||
}
|
||||
|
||||
// Hooks returns the client hooks.
|
||||
func (c *UsersClient) Hooks() []Hook {
|
||||
return c.hooks.Users
|
||||
}
|
||||
59
ent/config.go
Normal file
59
ent/config.go
Normal file
@@ -0,0 +1,59 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package ent
|
||||
|
||||
import (
|
||||
"entgo.io/ent"
|
||||
"entgo.io/ent/dialect"
|
||||
)
|
||||
|
||||
// Option function to configure the client.
|
||||
type Option func(*config)
|
||||
|
||||
// Config is the configuration for the client and its builder.
|
||||
type config struct {
|
||||
// driver used for executing database requests.
|
||||
driver dialect.Driver
|
||||
// debug enable a debug logging.
|
||||
debug bool
|
||||
// log used for logging on debug mode.
|
||||
log func(...interface{})
|
||||
// hooks to execute on mutations.
|
||||
hooks *hooks
|
||||
}
|
||||
|
||||
// hooks per client, for fast access.
|
||||
type hooks struct {
|
||||
Users []ent.Hook
|
||||
}
|
||||
|
||||
// Options applies the options on the config object.
|
||||
func (c *config) options(opts ...Option) {
|
||||
for _, opt := range opts {
|
||||
opt(c)
|
||||
}
|
||||
if c.debug {
|
||||
c.driver = dialect.Debug(c.driver, c.log)
|
||||
}
|
||||
}
|
||||
|
||||
// Debug enables debug logging on the ent.Driver.
|
||||
func Debug() Option {
|
||||
return func(c *config) {
|
||||
c.debug = true
|
||||
}
|
||||
}
|
||||
|
||||
// Log sets the logging function for debug mode.
|
||||
func Log(fn func(...interface{})) Option {
|
||||
return func(c *config) {
|
||||
c.log = fn
|
||||
}
|
||||
}
|
||||
|
||||
// Driver configures the client driver.
|
||||
func Driver(driver dialect.Driver) Option {
|
||||
return func(c *config) {
|
||||
c.driver = driver
|
||||
}
|
||||
}
|
||||
33
ent/context.go
Normal file
33
ent/context.go
Normal file
@@ -0,0 +1,33 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package ent
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
type clientCtxKey struct{}
|
||||
|
||||
// FromContext returns a Client stored inside a context, or nil if there isn't one.
|
||||
func FromContext(ctx context.Context) *Client {
|
||||
c, _ := ctx.Value(clientCtxKey{}).(*Client)
|
||||
return c
|
||||
}
|
||||
|
||||
// NewContext returns a new context with the given Client attached.
|
||||
func NewContext(parent context.Context, c *Client) context.Context {
|
||||
return context.WithValue(parent, clientCtxKey{}, c)
|
||||
}
|
||||
|
||||
type txCtxKey struct{}
|
||||
|
||||
// TxFromContext returns a Tx stored inside a context, or nil if there isn't one.
|
||||
func TxFromContext(ctx context.Context) *Tx {
|
||||
tx, _ := ctx.Value(txCtxKey{}).(*Tx)
|
||||
return tx
|
||||
}
|
||||
|
||||
// NewTxContext returns a new context with the given Tx attached.
|
||||
func NewTxContext(parent context.Context, tx *Tx) context.Context {
|
||||
return context.WithValue(parent, txCtxKey{}, tx)
|
||||
}
|
||||
259
ent/ent.go
Normal file
259
ent/ent.go
Normal file
@@ -0,0 +1,259 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package ent
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"t/ent/users"
|
||||
|
||||
"entgo.io/ent"
|
||||
"entgo.io/ent/dialect/sql"
|
||||
)
|
||||
|
||||
// ent aliases to avoid import conflicts in user's code.
|
||||
type (
|
||||
Op = ent.Op
|
||||
Hook = ent.Hook
|
||||
Value = ent.Value
|
||||
Query = ent.Query
|
||||
Policy = ent.Policy
|
||||
Mutator = ent.Mutator
|
||||
Mutation = ent.Mutation
|
||||
MutateFunc = ent.MutateFunc
|
||||
)
|
||||
|
||||
// OrderFunc applies an ordering on the sql selector.
|
||||
type OrderFunc func(*sql.Selector)
|
||||
|
||||
// columnChecker returns a function indicates if the column exists in the given column.
|
||||
func columnChecker(table string) func(string) error {
|
||||
checks := map[string]func(string) bool{
|
||||
users.Table: users.ValidColumn,
|
||||
}
|
||||
check, ok := checks[table]
|
||||
if !ok {
|
||||
return func(string) error {
|
||||
return fmt.Errorf("unknown table %q", table)
|
||||
}
|
||||
}
|
||||
return func(column string) error {
|
||||
if !check(column) {
|
||||
return fmt.Errorf("unknown column %q for table %q", column, table)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// Asc applies the given fields in ASC order.
|
||||
func Asc(fields ...string) OrderFunc {
|
||||
return func(s *sql.Selector) {
|
||||
check := columnChecker(s.TableName())
|
||||
for _, f := range fields {
|
||||
if err := check(f); err != nil {
|
||||
s.AddError(&ValidationError{Name: f, err: fmt.Errorf("ent: %w", err)})
|
||||
}
|
||||
s.OrderBy(sql.Asc(s.C(f)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Desc applies the given fields in DESC order.
|
||||
func Desc(fields ...string) OrderFunc {
|
||||
return func(s *sql.Selector) {
|
||||
check := columnChecker(s.TableName())
|
||||
for _, f := range fields {
|
||||
if err := check(f); err != nil {
|
||||
s.AddError(&ValidationError{Name: f, err: fmt.Errorf("ent: %w", err)})
|
||||
}
|
||||
s.OrderBy(sql.Desc(s.C(f)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// AggregateFunc applies an aggregation step on the group-by traversal/selector.
|
||||
type AggregateFunc func(*sql.Selector) string
|
||||
|
||||
// As is a pseudo aggregation function for renaming another other functions with custom names. For example:
|
||||
//
|
||||
// GroupBy(field1, field2).
|
||||
// Aggregate(ent.As(ent.Sum(field1), "sum_field1"), (ent.As(ent.Sum(field2), "sum_field2")).
|
||||
// Scan(ctx, &v)
|
||||
//
|
||||
func As(fn AggregateFunc, end string) AggregateFunc {
|
||||
return func(s *sql.Selector) string {
|
||||
return sql.As(fn(s), end)
|
||||
}
|
||||
}
|
||||
|
||||
// Count applies the "count" aggregation function on each group.
|
||||
func Count() AggregateFunc {
|
||||
return func(s *sql.Selector) string {
|
||||
return sql.Count("*")
|
||||
}
|
||||
}
|
||||
|
||||
// Max applies the "max" aggregation function on the given field of each group.
|
||||
func Max(field string) AggregateFunc {
|
||||
return func(s *sql.Selector) string {
|
||||
check := columnChecker(s.TableName())
|
||||
if err := check(field); err != nil {
|
||||
s.AddError(&ValidationError{Name: field, err: fmt.Errorf("ent: %w", err)})
|
||||
return ""
|
||||
}
|
||||
return sql.Max(s.C(field))
|
||||
}
|
||||
}
|
||||
|
||||
// Mean applies the "mean" aggregation function on the given field of each group.
|
||||
func Mean(field string) AggregateFunc {
|
||||
return func(s *sql.Selector) string {
|
||||
check := columnChecker(s.TableName())
|
||||
if err := check(field); err != nil {
|
||||
s.AddError(&ValidationError{Name: field, err: fmt.Errorf("ent: %w", err)})
|
||||
return ""
|
||||
}
|
||||
return sql.Avg(s.C(field))
|
||||
}
|
||||
}
|
||||
|
||||
// Min applies the "min" aggregation function on the given field of each group.
|
||||
func Min(field string) AggregateFunc {
|
||||
return func(s *sql.Selector) string {
|
||||
check := columnChecker(s.TableName())
|
||||
if err := check(field); err != nil {
|
||||
s.AddError(&ValidationError{Name: field, err: fmt.Errorf("ent: %w", err)})
|
||||
return ""
|
||||
}
|
||||
return sql.Min(s.C(field))
|
||||
}
|
||||
}
|
||||
|
||||
// Sum applies the "sum" aggregation function on the given field of each group.
|
||||
func Sum(field string) AggregateFunc {
|
||||
return func(s *sql.Selector) string {
|
||||
check := columnChecker(s.TableName())
|
||||
if err := check(field); err != nil {
|
||||
s.AddError(&ValidationError{Name: field, err: fmt.Errorf("ent: %w", err)})
|
||||
return ""
|
||||
}
|
||||
return sql.Sum(s.C(field))
|
||||
}
|
||||
}
|
||||
|
||||
// ValidationError returns when validating a field or edge fails.
|
||||
type ValidationError struct {
|
||||
Name string // Field or edge name.
|
||||
err error
|
||||
}
|
||||
|
||||
// Error implements the error interface.
|
||||
func (e *ValidationError) Error() string {
|
||||
return e.err.Error()
|
||||
}
|
||||
|
||||
// Unwrap implements the errors.Wrapper interface.
|
||||
func (e *ValidationError) Unwrap() error {
|
||||
return e.err
|
||||
}
|
||||
|
||||
// IsValidationError returns a boolean indicating whether the error is a validation error.
|
||||
func IsValidationError(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
}
|
||||
var e *ValidationError
|
||||
return errors.As(err, &e)
|
||||
}
|
||||
|
||||
// NotFoundError returns when trying to fetch a specific entity and it was not found in the database.
|
||||
type NotFoundError struct {
|
||||
label string
|
||||
}
|
||||
|
||||
// Error implements the error interface.
|
||||
func (e *NotFoundError) Error() string {
|
||||
return "ent: " + e.label + " not found"
|
||||
}
|
||||
|
||||
// IsNotFound returns a boolean indicating whether the error is a not found error.
|
||||
func IsNotFound(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
}
|
||||
var e *NotFoundError
|
||||
return errors.As(err, &e)
|
||||
}
|
||||
|
||||
// MaskNotFound masks not found error.
|
||||
func MaskNotFound(err error) error {
|
||||
if IsNotFound(err) {
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// NotSingularError returns when trying to fetch a singular entity and more then one was found in the database.
|
||||
type NotSingularError struct {
|
||||
label string
|
||||
}
|
||||
|
||||
// Error implements the error interface.
|
||||
func (e *NotSingularError) Error() string {
|
||||
return "ent: " + e.label + " not singular"
|
||||
}
|
||||
|
||||
// IsNotSingular returns a boolean indicating whether the error is a not singular error.
|
||||
func IsNotSingular(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
}
|
||||
var e *NotSingularError
|
||||
return errors.As(err, &e)
|
||||
}
|
||||
|
||||
// NotLoadedError returns when trying to get a node that was not loaded by the query.
|
||||
type NotLoadedError struct {
|
||||
edge string
|
||||
}
|
||||
|
||||
// Error implements the error interface.
|
||||
func (e *NotLoadedError) Error() string {
|
||||
return "ent: " + e.edge + " edge was not loaded"
|
||||
}
|
||||
|
||||
// IsNotLoaded returns a boolean indicating whether the error is a not loaded error.
|
||||
func IsNotLoaded(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
}
|
||||
var e *NotLoadedError
|
||||
return errors.As(err, &e)
|
||||
}
|
||||
|
||||
// ConstraintError returns when trying to create/update one or more entities and
|
||||
// one or more of their constraints failed. For example, violation of edge or
|
||||
// field uniqueness.
|
||||
type ConstraintError struct {
|
||||
msg string
|
||||
wrap error
|
||||
}
|
||||
|
||||
// Error implements the error interface.
|
||||
func (e ConstraintError) Error() string {
|
||||
return "ent: constraint failed: " + e.msg
|
||||
}
|
||||
|
||||
// Unwrap implements the errors.Wrapper interface.
|
||||
func (e *ConstraintError) Unwrap() error {
|
||||
return e.wrap
|
||||
}
|
||||
|
||||
// IsConstraintError returns a boolean indicating whether the error is a constraint failure.
|
||||
func IsConstraintError(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
}
|
||||
var e *ConstraintError
|
||||
return errors.As(err, &e)
|
||||
}
|
||||
85
ent/entc.go
Normal file
85
ent/entc.go
Normal file
@@ -0,0 +1,85 @@
|
||||
//go:build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"entgo.io/contrib/entoas"
|
||||
"entgo.io/ent/entc"
|
||||
"entgo.io/ent/entc/gen"
|
||||
"github.com/ariga/ogent"
|
||||
"github.com/ogen-go/ogen"
|
||||
)
|
||||
|
||||
func main() {
|
||||
spec := new(ogen.Spec)
|
||||
|
||||
//oas, err := entoas.NewExtension(entoas.Spec(spec))
|
||||
oas, err := entoas.NewExtension(
|
||||
entoas.Spec(spec),
|
||||
entoas.Mutations(func(_ *gen.Graph, spec *ogen.Spec) error {
|
||||
spec.AddPathItem("/users/{id}/start", ogen.NewPathItem().
|
||||
SetDescription("Start an draw as done").
|
||||
SetPatch(ogen.NewOperation().
|
||||
SetOperationID("drawStart").
|
||||
SetSummary("Draws a card item as done.").
|
||||
AddTags("Users").
|
||||
AddResponse("204", ogen.NewResponse().SetDescription("Item marked as done")),
|
||||
).
|
||||
AddParameters(ogen.NewParameter().
|
||||
InPath().
|
||||
SetName("id").
|
||||
SetRequired(true).
|
||||
SetSchema(ogen.Int()),
|
||||
),
|
||||
)
|
||||
return nil
|
||||
}),
|
||||
|
||||
// entoas.Mutations(func(_ *gen.Graph, spec *ogen.Spec) error {
|
||||
// spec.AddPathItem(
|
||||
// "/syui",
|
||||
// ogen.NewPathItem().
|
||||
// SetGet(
|
||||
// ogen.NewOperation().
|
||||
// SetOperationID("customReadUser").
|
||||
//
|
||||
// AddResponse("204", ogen.NewResponse().SetDescription("Item marked as done")),
|
||||
// ),
|
||||
// )
|
||||
// return nil
|
||||
// }),
|
||||
entoas.Mutations(func(_ *gen.Graph, spec *ogen.Spec) error {
|
||||
spec.AddPathItem("/users/{id}/d", ogen.NewPathItem().
|
||||
SetDescription("Start an draw as done").
|
||||
SetPut(ogen.NewOperation().
|
||||
SetOperationID("drawDone").
|
||||
SetSummary("Draws a card item as done.").
|
||||
AddTags("Users").
|
||||
AddResponse("204", ogen.NewResponse().SetDescription("Item marked as done")),
|
||||
//AddResponse("204", ogen.NewResponse().SetDescription("Item marked as done").SetSchema("test")),
|
||||
).
|
||||
AddParameters(ogen.NewParameter().
|
||||
InPath().
|
||||
SetName("id").
|
||||
SetRequired(true).
|
||||
SetSchema(ogen.Int()),
|
||||
),
|
||||
)
|
||||
return nil
|
||||
}),
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
log.Fatalf("creating entoas extension: %v", err)
|
||||
}
|
||||
ogent, err := ogent.NewExtension(spec)
|
||||
if err != nil {
|
||||
log.Fatalf("creating ogent extension: %v", err)
|
||||
}
|
||||
err = entc.Generate("./schema", &gen.Config{}, entc.Extensions(ogent, oas))
|
||||
if err != nil {
|
||||
log.Fatalf("running ent codegen: %v", err)
|
||||
}
|
||||
}
|
||||
77
ent/enttest/enttest.go
Normal file
77
ent/enttest/enttest.go
Normal file
@@ -0,0 +1,77 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package enttest
|
||||
|
||||
import (
|
||||
"context"
|
||||
"t/ent"
|
||||
// required by schema hooks.
|
||||
_ "t/ent/runtime"
|
||||
|
||||
"entgo.io/ent/dialect/sql/schema"
|
||||
)
|
||||
|
||||
type (
|
||||
// TestingT is the interface that is shared between
|
||||
// testing.T and testing.B and used by enttest.
|
||||
TestingT interface {
|
||||
FailNow()
|
||||
Error(...interface{})
|
||||
}
|
||||
|
||||
// Option configures client creation.
|
||||
Option func(*options)
|
||||
|
||||
options struct {
|
||||
opts []ent.Option
|
||||
migrateOpts []schema.MigrateOption
|
||||
}
|
||||
)
|
||||
|
||||
// WithOptions forwards options to client creation.
|
||||
func WithOptions(opts ...ent.Option) Option {
|
||||
return func(o *options) {
|
||||
o.opts = append(o.opts, opts...)
|
||||
}
|
||||
}
|
||||
|
||||
// WithMigrateOptions forwards options to auto migration.
|
||||
func WithMigrateOptions(opts ...schema.MigrateOption) Option {
|
||||
return func(o *options) {
|
||||
o.migrateOpts = append(o.migrateOpts, opts...)
|
||||
}
|
||||
}
|
||||
|
||||
func newOptions(opts []Option) *options {
|
||||
o := &options{}
|
||||
for _, opt := range opts {
|
||||
opt(o)
|
||||
}
|
||||
return o
|
||||
}
|
||||
|
||||
// Open calls ent.Open and auto-run migration.
|
||||
func Open(t TestingT, driverName, dataSourceName string, opts ...Option) *ent.Client {
|
||||
o := newOptions(opts)
|
||||
c, err := ent.Open(driverName, dataSourceName, o.opts...)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
t.FailNow()
|
||||
}
|
||||
if err := c.Schema.Create(context.Background(), o.migrateOpts...); err != nil {
|
||||
t.Error(err)
|
||||
t.FailNow()
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
// NewClient calls ent.NewClient and auto-run migration.
|
||||
func NewClient(t TestingT, opts ...Option) *ent.Client {
|
||||
o := newOptions(opts)
|
||||
c := ent.NewClient(o.opts...)
|
||||
if err := c.Schema.Create(context.Background(), o.migrateOpts...); err != nil {
|
||||
t.Error(err)
|
||||
t.FailNow()
|
||||
}
|
||||
return c
|
||||
}
|
||||
4
ent/generate.go
Normal file
4
ent/generate.go
Normal file
@@ -0,0 +1,4 @@
|
||||
package ent
|
||||
|
||||
//go:generate go run -mod=mod entc.go
|
||||
|
||||
203
ent/hook/hook.go
Normal file
203
ent/hook/hook.go
Normal file
@@ -0,0 +1,203 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package hook
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"t/ent"
|
||||
)
|
||||
|
||||
// The UsersFunc type is an adapter to allow the use of ordinary
|
||||
// function as Users mutator.
|
||||
type UsersFunc func(context.Context, *ent.UsersMutation) (ent.Value, error)
|
||||
|
||||
// Mutate calls f(ctx, m).
|
||||
func (f UsersFunc) Mutate(ctx context.Context, m ent.Mutation) (ent.Value, error) {
|
||||
mv, ok := m.(*ent.UsersMutation)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("unexpected mutation type %T. expect *ent.UsersMutation", m)
|
||||
}
|
||||
return f(ctx, mv)
|
||||
}
|
||||
|
||||
// Condition is a hook condition function.
|
||||
type Condition func(context.Context, ent.Mutation) bool
|
||||
|
||||
// And groups conditions with the AND operator.
|
||||
func And(first, second Condition, rest ...Condition) Condition {
|
||||
return func(ctx context.Context, m ent.Mutation) bool {
|
||||
if !first(ctx, m) || !second(ctx, m) {
|
||||
return false
|
||||
}
|
||||
for _, cond := range rest {
|
||||
if !cond(ctx, m) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
// Or groups conditions with the OR operator.
|
||||
func Or(first, second Condition, rest ...Condition) Condition {
|
||||
return func(ctx context.Context, m ent.Mutation) bool {
|
||||
if first(ctx, m) || second(ctx, m) {
|
||||
return true
|
||||
}
|
||||
for _, cond := range rest {
|
||||
if cond(ctx, m) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// Not negates a given condition.
|
||||
func Not(cond Condition) Condition {
|
||||
return func(ctx context.Context, m ent.Mutation) bool {
|
||||
return !cond(ctx, m)
|
||||
}
|
||||
}
|
||||
|
||||
// HasOp is a condition testing mutation operation.
|
||||
func HasOp(op ent.Op) Condition {
|
||||
return func(_ context.Context, m ent.Mutation) bool {
|
||||
return m.Op().Is(op)
|
||||
}
|
||||
}
|
||||
|
||||
// HasAddedFields is a condition validating `.AddedField` on fields.
|
||||
func HasAddedFields(field string, fields ...string) Condition {
|
||||
return func(_ context.Context, m ent.Mutation) bool {
|
||||
if _, exists := m.AddedField(field); !exists {
|
||||
return false
|
||||
}
|
||||
for _, field := range fields {
|
||||
if _, exists := m.AddedField(field); !exists {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
// HasClearedFields is a condition validating `.FieldCleared` on fields.
|
||||
func HasClearedFields(field string, fields ...string) Condition {
|
||||
return func(_ context.Context, m ent.Mutation) bool {
|
||||
if exists := m.FieldCleared(field); !exists {
|
||||
return false
|
||||
}
|
||||
for _, field := range fields {
|
||||
if exists := m.FieldCleared(field); !exists {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
// HasFields is a condition validating `.Field` on fields.
|
||||
func HasFields(field string, fields ...string) Condition {
|
||||
return func(_ context.Context, m ent.Mutation) bool {
|
||||
if _, exists := m.Field(field); !exists {
|
||||
return false
|
||||
}
|
||||
for _, field := range fields {
|
||||
if _, exists := m.Field(field); !exists {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
// If executes the given hook under condition.
|
||||
//
|
||||
// hook.If(ComputeAverage, And(HasFields(...), HasAddedFields(...)))
|
||||
//
|
||||
func If(hk ent.Hook, cond Condition) ent.Hook {
|
||||
return func(next ent.Mutator) ent.Mutator {
|
||||
return ent.MutateFunc(func(ctx context.Context, m ent.Mutation) (ent.Value, error) {
|
||||
if cond(ctx, m) {
|
||||
return hk(next).Mutate(ctx, m)
|
||||
}
|
||||
return next.Mutate(ctx, m)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// On executes the given hook only for the given operation.
|
||||
//
|
||||
// hook.On(Log, ent.Delete|ent.Create)
|
||||
//
|
||||
func On(hk ent.Hook, op ent.Op) ent.Hook {
|
||||
return If(hk, HasOp(op))
|
||||
}
|
||||
|
||||
// Unless skips the given hook only for the given operation.
|
||||
//
|
||||
// hook.Unless(Log, ent.Update|ent.UpdateOne)
|
||||
//
|
||||
func Unless(hk ent.Hook, op ent.Op) ent.Hook {
|
||||
return If(hk, Not(HasOp(op)))
|
||||
}
|
||||
|
||||
// FixedError is a hook returning a fixed error.
|
||||
func FixedError(err error) ent.Hook {
|
||||
return func(ent.Mutator) ent.Mutator {
|
||||
return ent.MutateFunc(func(context.Context, ent.Mutation) (ent.Value, error) {
|
||||
return nil, err
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Reject returns a hook that rejects all operations that match op.
|
||||
//
|
||||
// func (T) Hooks() []ent.Hook {
|
||||
// return []ent.Hook{
|
||||
// Reject(ent.Delete|ent.Update),
|
||||
// }
|
||||
// }
|
||||
//
|
||||
func Reject(op ent.Op) ent.Hook {
|
||||
hk := FixedError(fmt.Errorf("%s operation is not allowed", op))
|
||||
return On(hk, op)
|
||||
}
|
||||
|
||||
// Chain acts as a list of hooks and is effectively immutable.
|
||||
// Once created, it will always hold the same set of hooks in the same order.
|
||||
type Chain struct {
|
||||
hooks []ent.Hook
|
||||
}
|
||||
|
||||
// NewChain creates a new chain of hooks.
|
||||
func NewChain(hooks ...ent.Hook) Chain {
|
||||
return Chain{append([]ent.Hook(nil), hooks...)}
|
||||
}
|
||||
|
||||
// Hook chains the list of hooks and returns the final hook.
|
||||
func (c Chain) Hook() ent.Hook {
|
||||
return func(mutator ent.Mutator) ent.Mutator {
|
||||
for i := len(c.hooks) - 1; i >= 0; i-- {
|
||||
mutator = c.hooks[i](mutator)
|
||||
}
|
||||
return mutator
|
||||
}
|
||||
}
|
||||
|
||||
// Append extends a chain, adding the specified hook
|
||||
// as the last ones in the mutation flow.
|
||||
func (c Chain) Append(hooks ...ent.Hook) Chain {
|
||||
newHooks := make([]ent.Hook, 0, len(c.hooks)+len(hooks))
|
||||
newHooks = append(newHooks, c.hooks...)
|
||||
newHooks = append(newHooks, hooks...)
|
||||
return Chain{newHooks}
|
||||
}
|
||||
|
||||
// Extend extends a chain, adding the specified chain
|
||||
// as the last ones in the mutation flow.
|
||||
func (c Chain) Extend(chain Chain) Chain {
|
||||
return c.Append(chain.hooks...)
|
||||
}
|
||||
224
ent/http/create.go
Normal file
224
ent/http/create.go
Normal file
@@ -0,0 +1,224 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package http
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strings"
|
||||
"t/ent"
|
||||
"t/ent/compartment"
|
||||
"t/ent/entry"
|
||||
"t/ent/fridge"
|
||||
"t/ent/item"
|
||||
|
||||
"github.com/mailru/easyjson"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// Create creates a new ent.Compartment and stores it in the database.
|
||||
func (h CompartmentHandler) Create(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Create"))
|
||||
// Get the post data.
|
||||
var d CompartmentCreateRequest
|
||||
if err := easyjson.UnmarshalFromReader(r.Body, &d); err != nil {
|
||||
l.Error("error decoding json", zap.Error(err))
|
||||
BadRequest(w, "invalid json string")
|
||||
return
|
||||
}
|
||||
// Save the data.
|
||||
b := h.client.Compartment.Create()
|
||||
e, err := b.Save(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
default:
|
||||
l.Error("could not create compartment", zap.Error(err))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
// Store id of fresh entity to log errors for the reload.
|
||||
id := e.ID
|
||||
// Reload entry.
|
||||
q := h.client.Compartment.Query().Where(compartment.ID(e.ID))
|
||||
ret, err := q.Only(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.Int("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could not read compartment", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("compartment rendered", zap.Int("id", id))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewCompartment3324871446View(ret), w)
|
||||
}
|
||||
|
||||
// Create creates a new ent.Entry and stores it in the database.
|
||||
func (h EntryHandler) Create(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Create"))
|
||||
// Get the post data.
|
||||
var d EntryCreateRequest
|
||||
if err := easyjson.UnmarshalFromReader(r.Body, &d); err != nil {
|
||||
l.Error("error decoding json", zap.Error(err))
|
||||
BadRequest(w, "invalid json string")
|
||||
return
|
||||
}
|
||||
// Validate the data.
|
||||
errs := make(map[string]string)
|
||||
if d.User == nil {
|
||||
errs["user"] = `missing required field: "user"`
|
||||
} else if err := entry.UserValidator(*d.User); err != nil {
|
||||
errs["user"] = strings.TrimPrefix(err.Error(), "entry: ")
|
||||
}
|
||||
if d.First == nil {
|
||||
errs["first"] = `missing required field: "first"`
|
||||
}
|
||||
if len(errs) > 0 {
|
||||
l.Info("validation failed", zapFields(errs)...)
|
||||
BadRequest(w, errs)
|
||||
return
|
||||
}
|
||||
// Save the data.
|
||||
b := h.client.Entry.Create()
|
||||
if d.User != nil {
|
||||
b.SetUser(*d.User)
|
||||
}
|
||||
if d.First != nil {
|
||||
b.SetFirst(*d.First)
|
||||
}
|
||||
if d.CreatedAt != nil {
|
||||
b.SetCreatedAt(*d.CreatedAt)
|
||||
}
|
||||
e, err := b.Save(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
default:
|
||||
l.Error("could not create entry", zap.Error(err))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
// Store id of fresh entity to log errors for the reload.
|
||||
id := e.ID
|
||||
// Reload entry.
|
||||
q := h.client.Entry.Query().Where(entry.ID(e.ID))
|
||||
ret, err := q.Only(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.String("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.String("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could not read entry", zap.Error(err), zap.String("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("entry rendered", zap.String("id", id))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewEntry2675665849View(ret), w)
|
||||
}
|
||||
|
||||
// Create creates a new ent.Fridge and stores it in the database.
|
||||
func (h FridgeHandler) Create(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Create"))
|
||||
// Get the post data.
|
||||
var d FridgeCreateRequest
|
||||
if err := easyjson.UnmarshalFromReader(r.Body, &d); err != nil {
|
||||
l.Error("error decoding json", zap.Error(err))
|
||||
BadRequest(w, "invalid json string")
|
||||
return
|
||||
}
|
||||
// Save the data.
|
||||
b := h.client.Fridge.Create()
|
||||
e, err := b.Save(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
default:
|
||||
l.Error("could not create fridge", zap.Error(err))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
// Store id of fresh entity to log errors for the reload.
|
||||
id := e.ID
|
||||
// Reload entry.
|
||||
q := h.client.Fridge.Query().Where(fridge.ID(e.ID))
|
||||
ret, err := q.Only(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.Int("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could not read fridge", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("fridge rendered", zap.Int("id", id))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewFridge2211356377View(ret), w)
|
||||
}
|
||||
|
||||
// Create creates a new ent.Item and stores it in the database.
|
||||
func (h ItemHandler) Create(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Create"))
|
||||
// Get the post data.
|
||||
var d ItemCreateRequest
|
||||
if err := easyjson.UnmarshalFromReader(r.Body, &d); err != nil {
|
||||
l.Error("error decoding json", zap.Error(err))
|
||||
BadRequest(w, "invalid json string")
|
||||
return
|
||||
}
|
||||
// Save the data.
|
||||
b := h.client.Item.Create()
|
||||
e, err := b.Save(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
default:
|
||||
l.Error("could not create item", zap.Error(err))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
// Store id of fresh entity to log errors for the reload.
|
||||
id := e.ID
|
||||
// Reload entry.
|
||||
q := h.client.Item.Query().Where(item.ID(e.ID))
|
||||
ret, err := q.Only(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.Int("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could not read item", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("item rendered", zap.Int("id", id))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewItem1548468123View(ret), w)
|
||||
}
|
||||
116
ent/http/delete.go
Normal file
116
ent/http/delete.go
Normal file
@@ -0,0 +1,116 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package http
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
"t/ent"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// Delete removes a ent.Compartment from the database.
|
||||
func (h CompartmentHandler) Delete(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Delete"))
|
||||
// ID is URL parameter.
|
||||
id, err := strconv.Atoi(chi.URLParam(r, "id"))
|
||||
if err != nil {
|
||||
l.Error("error getting id from url parameter", zap.String("id", chi.URLParam(r, "id")), zap.Error(err))
|
||||
BadRequest(w, "id must be an integer")
|
||||
return
|
||||
}
|
||||
err = h.client.Compartment.DeleteOneID(id).Exec(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
default:
|
||||
l.Error("could-not-delete-compartment", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("compartment deleted", zap.Int("id", id))
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
}
|
||||
|
||||
// Delete removes a ent.Entry from the database.
|
||||
func (h EntryHandler) Delete(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Delete"))
|
||||
// ID is URL parameter.
|
||||
var err error
|
||||
id := chi.URLParam(r, "id")
|
||||
err = h.client.Entry.DeleteOneID(id).Exec(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.String("id", id))
|
||||
NotFound(w, msg)
|
||||
default:
|
||||
l.Error("could-not-delete-entry", zap.Error(err), zap.String("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("entry deleted", zap.String("id", id))
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
}
|
||||
|
||||
// Delete removes a ent.Fridge from the database.
|
||||
func (h FridgeHandler) Delete(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Delete"))
|
||||
// ID is URL parameter.
|
||||
id, err := strconv.Atoi(chi.URLParam(r, "id"))
|
||||
if err != nil {
|
||||
l.Error("error getting id from url parameter", zap.String("id", chi.URLParam(r, "id")), zap.Error(err))
|
||||
BadRequest(w, "id must be an integer")
|
||||
return
|
||||
}
|
||||
err = h.client.Fridge.DeleteOneID(id).Exec(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
default:
|
||||
l.Error("could-not-delete-fridge", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("fridge deleted", zap.Int("id", id))
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
}
|
||||
|
||||
// Delete removes a ent.Item from the database.
|
||||
func (h ItemHandler) Delete(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Delete"))
|
||||
// ID is URL parameter.
|
||||
id, err := strconv.Atoi(chi.URLParam(r, "id"))
|
||||
if err != nil {
|
||||
l.Error("error getting id from url parameter", zap.String("id", chi.URLParam(r, "id")), zap.Error(err))
|
||||
BadRequest(w, "id must be an integer")
|
||||
return
|
||||
}
|
||||
err = h.client.Item.DeleteOneID(id).Exec(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
default:
|
||||
l.Error("could-not-delete-item", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("item deleted", zap.Int("id", id))
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
}
|
||||
1075
ent/http/easyjson.go
Normal file
1075
ent/http/easyjson.go
Normal file
File diff suppressed because it is too large
Load Diff
185
ent/http/handler.go
Normal file
185
ent/http/handler.go
Normal file
@@ -0,0 +1,185 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package http
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"t/ent"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// NewHandler returns a ready to use handler with all generated endpoints mounted.
|
||||
func NewHandler(c *ent.Client, l *zap.Logger) chi.Router {
|
||||
r := chi.NewRouter()
|
||||
MountRoutes(c, l, r)
|
||||
return r
|
||||
}
|
||||
|
||||
// MountRoutes mounts all generated routes on the given router.
|
||||
func MountRoutes(c *ent.Client, l *zap.Logger, r chi.Router) {
|
||||
NewCompartmentHandler(c, l).MountRoutes(r)
|
||||
NewEntryHandler(c, l).MountRoutes(r)
|
||||
NewFridgeHandler(c, l).MountRoutes(r)
|
||||
NewItemHandler(c, l).MountRoutes(r)
|
||||
}
|
||||
|
||||
// CompartmentHandler handles http crud operations on ent.Compartment.
|
||||
type CompartmentHandler struct {
|
||||
client *ent.Client
|
||||
log *zap.Logger
|
||||
}
|
||||
|
||||
func NewCompartmentHandler(c *ent.Client, l *zap.Logger) *CompartmentHandler {
|
||||
return &CompartmentHandler{
|
||||
client: c,
|
||||
log: l.With(zap.String("handler", "CompartmentHandler")),
|
||||
}
|
||||
}
|
||||
func (h *CompartmentHandler) MountCreateRoute(r chi.Router) *CompartmentHandler {
|
||||
r.Post("/compartments", h.Create)
|
||||
return h
|
||||
}
|
||||
func (h *CompartmentHandler) MountReadRoute(r chi.Router) *CompartmentHandler {
|
||||
r.Get("/compartments/{id}", h.Read)
|
||||
return h
|
||||
}
|
||||
func (h *CompartmentHandler) MountUpdateRoute(r chi.Router) *CompartmentHandler {
|
||||
r.Patch("/compartments/{id}", h.Update)
|
||||
return h
|
||||
}
|
||||
func (h *CompartmentHandler) MountDeleteRoute(r chi.Router) *CompartmentHandler {
|
||||
r.Delete("/compartments/{id}", h.Delete)
|
||||
return h
|
||||
}
|
||||
func (h *CompartmentHandler) MountListRoute(r chi.Router) *CompartmentHandler {
|
||||
r.Get("/compartments", h.List)
|
||||
return h
|
||||
}
|
||||
func (h *CompartmentHandler) MountRoutes(r chi.Router) {
|
||||
h.MountCreateRoute(r).MountReadRoute(r).MountUpdateRoute(r).MountDeleteRoute(r).MountListRoute(r)
|
||||
}
|
||||
|
||||
// EntryHandler handles http crud operations on ent.Entry.
|
||||
type EntryHandler struct {
|
||||
client *ent.Client
|
||||
log *zap.Logger
|
||||
}
|
||||
|
||||
func NewEntryHandler(c *ent.Client, l *zap.Logger) *EntryHandler {
|
||||
return &EntryHandler{
|
||||
client: c,
|
||||
log: l.With(zap.String("handler", "EntryHandler")),
|
||||
}
|
||||
}
|
||||
func (h *EntryHandler) MountCreateRoute(r chi.Router) *EntryHandler {
|
||||
r.Post("/entries", h.Create)
|
||||
return h
|
||||
}
|
||||
func (h *EntryHandler) MountReadRoute(r chi.Router) *EntryHandler {
|
||||
r.Get("/entries/{id}", h.Read)
|
||||
return h
|
||||
}
|
||||
func (h *EntryHandler) MountUpdateRoute(r chi.Router) *EntryHandler {
|
||||
r.Patch("/entries/{id}", h.Update)
|
||||
return h
|
||||
}
|
||||
func (h *EntryHandler) MountDeleteRoute(r chi.Router) *EntryHandler {
|
||||
r.Delete("/entries/{id}", h.Delete)
|
||||
return h
|
||||
}
|
||||
func (h *EntryHandler) MountListRoute(r chi.Router) *EntryHandler {
|
||||
r.Get("/entries", h.List)
|
||||
return h
|
||||
}
|
||||
func (h *EntryHandler) MountRoutes(r chi.Router) {
|
||||
h.MountCreateRoute(r).MountReadRoute(r).MountUpdateRoute(r).MountDeleteRoute(r).MountListRoute(r)
|
||||
}
|
||||
|
||||
// FridgeHandler handles http crud operations on ent.Fridge.
|
||||
type FridgeHandler struct {
|
||||
client *ent.Client
|
||||
log *zap.Logger
|
||||
}
|
||||
|
||||
func NewFridgeHandler(c *ent.Client, l *zap.Logger) *FridgeHandler {
|
||||
return &FridgeHandler{
|
||||
client: c,
|
||||
log: l.With(zap.String("handler", "FridgeHandler")),
|
||||
}
|
||||
}
|
||||
func (h *FridgeHandler) MountCreateRoute(r chi.Router) *FridgeHandler {
|
||||
r.Post("/fridges", h.Create)
|
||||
return h
|
||||
}
|
||||
func (h *FridgeHandler) MountReadRoute(r chi.Router) *FridgeHandler {
|
||||
r.Get("/fridges/{id}", h.Read)
|
||||
return h
|
||||
}
|
||||
func (h *FridgeHandler) MountUpdateRoute(r chi.Router) *FridgeHandler {
|
||||
r.Patch("/fridges/{id}", h.Update)
|
||||
return h
|
||||
}
|
||||
func (h *FridgeHandler) MountDeleteRoute(r chi.Router) *FridgeHandler {
|
||||
r.Delete("/fridges/{id}", h.Delete)
|
||||
return h
|
||||
}
|
||||
func (h *FridgeHandler) MountListRoute(r chi.Router) *FridgeHandler {
|
||||
r.Get("/fridges", h.List)
|
||||
return h
|
||||
}
|
||||
func (h *FridgeHandler) MountRoutes(r chi.Router) {
|
||||
h.MountCreateRoute(r).MountReadRoute(r).MountUpdateRoute(r).MountDeleteRoute(r).MountListRoute(r)
|
||||
}
|
||||
|
||||
// ItemHandler handles http crud operations on ent.Item.
|
||||
type ItemHandler struct {
|
||||
client *ent.Client
|
||||
log *zap.Logger
|
||||
}
|
||||
|
||||
func NewItemHandler(c *ent.Client, l *zap.Logger) *ItemHandler {
|
||||
return &ItemHandler{
|
||||
client: c,
|
||||
log: l.With(zap.String("handler", "ItemHandler")),
|
||||
}
|
||||
}
|
||||
func (h *ItemHandler) MountCreateRoute(r chi.Router) *ItemHandler {
|
||||
r.Post("/items", h.Create)
|
||||
return h
|
||||
}
|
||||
func (h *ItemHandler) MountReadRoute(r chi.Router) *ItemHandler {
|
||||
r.Get("/items/{id}", h.Read)
|
||||
return h
|
||||
}
|
||||
func (h *ItemHandler) MountUpdateRoute(r chi.Router) *ItemHandler {
|
||||
r.Patch("/items/{id}", h.Update)
|
||||
return h
|
||||
}
|
||||
func (h *ItemHandler) MountDeleteRoute(r chi.Router) *ItemHandler {
|
||||
r.Delete("/items/{id}", h.Delete)
|
||||
return h
|
||||
}
|
||||
func (h *ItemHandler) MountListRoute(r chi.Router) *ItemHandler {
|
||||
r.Get("/items", h.List)
|
||||
return h
|
||||
}
|
||||
func (h *ItemHandler) MountRoutes(r chi.Router) {
|
||||
h.MountCreateRoute(r).MountReadRoute(r).MountUpdateRoute(r).MountDeleteRoute(r).MountListRoute(r)
|
||||
}
|
||||
|
||||
func stripEntError(err error) string {
|
||||
return strings.TrimPrefix(err.Error(), "ent: ")
|
||||
}
|
||||
|
||||
func zapFields(errs map[string]string) []zap.Field {
|
||||
if errs == nil || len(errs) == 0 {
|
||||
return nil
|
||||
}
|
||||
r := make([]zap.Field, 0)
|
||||
for k, v := range errs {
|
||||
r = append(r, zap.String(k, v))
|
||||
}
|
||||
return r
|
||||
}
|
||||
147
ent/http/list.go
Normal file
147
ent/http/list.go
Normal file
@@ -0,0 +1,147 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package http
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/mailru/easyjson"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// Read fetches the ent.Compartment identified by a given url-parameter from the
|
||||
// database and returns it to the client.
|
||||
func (h *CompartmentHandler) List(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "List"))
|
||||
q := h.client.Compartment.Query()
|
||||
var err error
|
||||
page := 1
|
||||
if d := r.URL.Query().Get("page"); d != "" {
|
||||
page, err = strconv.Atoi(d)
|
||||
if err != nil {
|
||||
l.Info("error parsing query parameter 'page'", zap.String("page", d), zap.Error(err))
|
||||
BadRequest(w, "page must be an integer greater zero")
|
||||
return
|
||||
}
|
||||
}
|
||||
itemsPerPage := 30
|
||||
if d := r.URL.Query().Get("itemsPerPage"); d != "" {
|
||||
itemsPerPage, err = strconv.Atoi(d)
|
||||
if err != nil {
|
||||
l.Info("error parsing query parameter 'itemsPerPage'", zap.String("itemsPerPage", d), zap.Error(err))
|
||||
BadRequest(w, "itemsPerPage must be an integer greater zero")
|
||||
return
|
||||
}
|
||||
}
|
||||
es, err := q.Limit(itemsPerPage).Offset((page - 1) * itemsPerPage).All(r.Context())
|
||||
if err != nil {
|
||||
l.Error("error fetching compartments from db", zap.Error(err))
|
||||
InternalServerError(w, nil)
|
||||
return
|
||||
}
|
||||
l.Info("compartments rendered", zap.Int("amount", len(es)))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewCompartment3324871446Views(es), w)
|
||||
}
|
||||
|
||||
// Read fetches the ent.Entry identified by a given url-parameter from the
|
||||
// database and returns it to the client.
|
||||
func (h *EntryHandler) List(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "List"))
|
||||
q := h.client.Entry.Query()
|
||||
var err error
|
||||
page := 1
|
||||
if d := r.URL.Query().Get("page"); d != "" {
|
||||
page, err = strconv.Atoi(d)
|
||||
if err != nil {
|
||||
l.Info("error parsing query parameter 'page'", zap.String("page", d), zap.Error(err))
|
||||
BadRequest(w, "page must be an integer greater zero")
|
||||
return
|
||||
}
|
||||
}
|
||||
itemsPerPage := 30
|
||||
if d := r.URL.Query().Get("itemsPerPage"); d != "" {
|
||||
itemsPerPage, err = strconv.Atoi(d)
|
||||
if err != nil {
|
||||
l.Info("error parsing query parameter 'itemsPerPage'", zap.String("itemsPerPage", d), zap.Error(err))
|
||||
BadRequest(w, "itemsPerPage must be an integer greater zero")
|
||||
return
|
||||
}
|
||||
}
|
||||
es, err := q.Limit(itemsPerPage).Offset((page - 1) * itemsPerPage).All(r.Context())
|
||||
if err != nil {
|
||||
l.Error("error fetching entries from db", zap.Error(err))
|
||||
InternalServerError(w, nil)
|
||||
return
|
||||
}
|
||||
l.Info("entries rendered", zap.Int("amount", len(es)))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewEntry2675665849Views(es), w)
|
||||
}
|
||||
|
||||
// Read fetches the ent.Fridge identified by a given url-parameter from the
|
||||
// database and returns it to the client.
|
||||
func (h *FridgeHandler) List(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "List"))
|
||||
q := h.client.Fridge.Query()
|
||||
var err error
|
||||
page := 1
|
||||
if d := r.URL.Query().Get("page"); d != "" {
|
||||
page, err = strconv.Atoi(d)
|
||||
if err != nil {
|
||||
l.Info("error parsing query parameter 'page'", zap.String("page", d), zap.Error(err))
|
||||
BadRequest(w, "page must be an integer greater zero")
|
||||
return
|
||||
}
|
||||
}
|
||||
itemsPerPage := 30
|
||||
if d := r.URL.Query().Get("itemsPerPage"); d != "" {
|
||||
itemsPerPage, err = strconv.Atoi(d)
|
||||
if err != nil {
|
||||
l.Info("error parsing query parameter 'itemsPerPage'", zap.String("itemsPerPage", d), zap.Error(err))
|
||||
BadRequest(w, "itemsPerPage must be an integer greater zero")
|
||||
return
|
||||
}
|
||||
}
|
||||
es, err := q.Limit(itemsPerPage).Offset((page - 1) * itemsPerPage).All(r.Context())
|
||||
if err != nil {
|
||||
l.Error("error fetching fridges from db", zap.Error(err))
|
||||
InternalServerError(w, nil)
|
||||
return
|
||||
}
|
||||
l.Info("fridges rendered", zap.Int("amount", len(es)))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewFridge2211356377Views(es), w)
|
||||
}
|
||||
|
||||
// Read fetches the ent.Item identified by a given url-parameter from the
|
||||
// database and returns it to the client.
|
||||
func (h *ItemHandler) List(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "List"))
|
||||
q := h.client.Item.Query()
|
||||
var err error
|
||||
page := 1
|
||||
if d := r.URL.Query().Get("page"); d != "" {
|
||||
page, err = strconv.Atoi(d)
|
||||
if err != nil {
|
||||
l.Info("error parsing query parameter 'page'", zap.String("page", d), zap.Error(err))
|
||||
BadRequest(w, "page must be an integer greater zero")
|
||||
return
|
||||
}
|
||||
}
|
||||
itemsPerPage := 30
|
||||
if d := r.URL.Query().Get("itemsPerPage"); d != "" {
|
||||
itemsPerPage, err = strconv.Atoi(d)
|
||||
if err != nil {
|
||||
l.Info("error parsing query parameter 'itemsPerPage'", zap.String("itemsPerPage", d), zap.Error(err))
|
||||
BadRequest(w, "itemsPerPage must be an integer greater zero")
|
||||
return
|
||||
}
|
||||
}
|
||||
es, err := q.Limit(itemsPerPage).Offset((page - 1) * itemsPerPage).All(r.Context())
|
||||
if err != nil {
|
||||
l.Error("error fetching items from db", zap.Error(err))
|
||||
InternalServerError(w, nil)
|
||||
return
|
||||
}
|
||||
l.Info("items rendered", zap.Int("amount", len(es)))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewItem1548468123Views(es), w)
|
||||
}
|
||||
149
ent/http/read.go
Normal file
149
ent/http/read.go
Normal file
@@ -0,0 +1,149 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package http
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
"t/ent"
|
||||
"t/ent/compartment"
|
||||
"t/ent/entry"
|
||||
"t/ent/fridge"
|
||||
"t/ent/item"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/mailru/easyjson"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// Read fetches the ent.Compartment identified by a given url-parameter from the
|
||||
// database and renders it to the client.
|
||||
func (h *CompartmentHandler) Read(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Read"))
|
||||
// ID is URL parameter.
|
||||
id, err := strconv.Atoi(chi.URLParam(r, "id"))
|
||||
if err != nil {
|
||||
l.Error("error getting id from url parameter", zap.String("id", chi.URLParam(r, "id")), zap.Error(err))
|
||||
BadRequest(w, "id must be an integer")
|
||||
return
|
||||
}
|
||||
// Create the query to fetch the Compartment
|
||||
q := h.client.Compartment.Query().Where(compartment.ID(id))
|
||||
e, err := q.Only(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.Int("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could not read compartment", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("compartment rendered", zap.Int("id", id))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewCompartment3324871446View(e), w)
|
||||
}
|
||||
|
||||
// Read fetches the ent.Entry identified by a given url-parameter from the
|
||||
// database and renders it to the client.
|
||||
func (h *EntryHandler) Read(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Read"))
|
||||
// ID is URL parameter.
|
||||
var err error
|
||||
id := chi.URLParam(r, "id")
|
||||
// Create the query to fetch the Entry
|
||||
q := h.client.Entry.Query().Where(entry.ID(id))
|
||||
e, err := q.Only(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.String("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.String("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could not read entry", zap.Error(err), zap.String("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("entry rendered", zap.String("id", id))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewEntry2675665849View(e), w)
|
||||
}
|
||||
|
||||
// Read fetches the ent.Fridge identified by a given url-parameter from the
|
||||
// database and renders it to the client.
|
||||
func (h *FridgeHandler) Read(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Read"))
|
||||
// ID is URL parameter.
|
||||
id, err := strconv.Atoi(chi.URLParam(r, "id"))
|
||||
if err != nil {
|
||||
l.Error("error getting id from url parameter", zap.String("id", chi.URLParam(r, "id")), zap.Error(err))
|
||||
BadRequest(w, "id must be an integer")
|
||||
return
|
||||
}
|
||||
// Create the query to fetch the Fridge
|
||||
q := h.client.Fridge.Query().Where(fridge.ID(id))
|
||||
e, err := q.Only(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.Int("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could not read fridge", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("fridge rendered", zap.Int("id", id))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewFridge2211356377View(e), w)
|
||||
}
|
||||
|
||||
// Read fetches the ent.Item identified by a given url-parameter from the
|
||||
// database and renders it to the client.
|
||||
func (h *ItemHandler) Read(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Read"))
|
||||
// ID is URL parameter.
|
||||
id, err := strconv.Atoi(chi.URLParam(r, "id"))
|
||||
if err != nil {
|
||||
l.Error("error getting id from url parameter", zap.String("id", chi.URLParam(r, "id")), zap.Error(err))
|
||||
BadRequest(w, "id must be an integer")
|
||||
return
|
||||
}
|
||||
// Create the query to fetch the Item
|
||||
q := h.client.Item.Query().Where(item.ID(id))
|
||||
e, err := q.Only(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.Int("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could not read item", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("item rendered", zap.Int("id", id))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewItem1548468123View(e), w)
|
||||
}
|
||||
3
ent/http/relations.go
Normal file
3
ent/http/relations.go
Normal file
@@ -0,0 +1,3 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package http
|
||||
42
ent/http/request.go
Normal file
42
ent/http/request.go
Normal file
@@ -0,0 +1,42 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package http
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// Payload of a ent.Compartment create request.
|
||||
type CompartmentCreateRequest struct {
|
||||
}
|
||||
|
||||
// Payload of a ent.Compartment update request.
|
||||
type CompartmentUpdateRequest struct {
|
||||
}
|
||||
|
||||
// Payload of a ent.Entry create request.
|
||||
type EntryCreateRequest struct {
|
||||
User *string `json:"user"`
|
||||
First *int `json:"first"`
|
||||
CreatedAt *time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
// Payload of a ent.Entry update request.
|
||||
type EntryUpdateRequest struct {
|
||||
}
|
||||
|
||||
// Payload of a ent.Fridge create request.
|
||||
type FridgeCreateRequest struct {
|
||||
}
|
||||
|
||||
// Payload of a ent.Fridge update request.
|
||||
type FridgeUpdateRequest struct {
|
||||
}
|
||||
|
||||
// Payload of a ent.Item create request.
|
||||
type ItemCreateRequest struct {
|
||||
}
|
||||
|
||||
// Payload of a ent.Item update request.
|
||||
type ItemUpdateRequest struct {
|
||||
}
|
||||
200
ent/http/response.go
Normal file
200
ent/http/response.go
Normal file
@@ -0,0 +1,200 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package http
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
"t/ent"
|
||||
"time"
|
||||
|
||||
"github.com/mailru/easyjson"
|
||||
)
|
||||
|
||||
// Basic HTTP Error Response
|
||||
type ErrResponse struct {
|
||||
Code int `json:"code"` // http response status code
|
||||
Status string `json:"status"` // user-level status message
|
||||
Errors interface{} `json:"errors,omitempty"` // application-level error
|
||||
}
|
||||
|
||||
func (e ErrResponse) MarshalToHTTPResponseWriter(w http.ResponseWriter) (int, error) {
|
||||
d, err := easyjson.Marshal(e)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||
w.Header().Set("Content-Length", strconv.Itoa(len(d)))
|
||||
w.WriteHeader(e.Code)
|
||||
return w.Write(d)
|
||||
}
|
||||
|
||||
func BadRequest(w http.ResponseWriter, msg interface{}) (int, error) {
|
||||
return ErrResponse{
|
||||
Code: http.StatusBadRequest,
|
||||
Status: http.StatusText(http.StatusBadRequest),
|
||||
Errors: msg,
|
||||
}.MarshalToHTTPResponseWriter(w)
|
||||
}
|
||||
|
||||
func Conflict(w http.ResponseWriter, msg interface{}) (int, error) {
|
||||
return ErrResponse{
|
||||
Code: http.StatusConflict,
|
||||
Status: http.StatusText(http.StatusConflict),
|
||||
Errors: msg,
|
||||
}.MarshalToHTTPResponseWriter(w)
|
||||
}
|
||||
|
||||
func Forbidden(w http.ResponseWriter, msg interface{}) (int, error) {
|
||||
return ErrResponse{
|
||||
Code: http.StatusForbidden,
|
||||
Status: http.StatusText(http.StatusForbidden),
|
||||
Errors: msg,
|
||||
}.MarshalToHTTPResponseWriter(w)
|
||||
}
|
||||
|
||||
func InternalServerError(w http.ResponseWriter, msg interface{}) (int, error) {
|
||||
return ErrResponse{
|
||||
Code: http.StatusInternalServerError,
|
||||
Status: http.StatusText(http.StatusInternalServerError),
|
||||
Errors: msg,
|
||||
}.MarshalToHTTPResponseWriter(w)
|
||||
}
|
||||
|
||||
func NotFound(w http.ResponseWriter, msg interface{}) (int, error) {
|
||||
return ErrResponse{
|
||||
Code: http.StatusNotFound,
|
||||
Status: http.StatusText(http.StatusNotFound),
|
||||
Errors: msg,
|
||||
}.MarshalToHTTPResponseWriter(w)
|
||||
}
|
||||
|
||||
func Unauthorized(w http.ResponseWriter, msg interface{}) (int, error) {
|
||||
return ErrResponse{
|
||||
Code: http.StatusUnauthorized,
|
||||
Status: http.StatusText(http.StatusUnauthorized),
|
||||
Errors: msg,
|
||||
}.MarshalToHTTPResponseWriter(w)
|
||||
}
|
||||
|
||||
type (
|
||||
// Compartment3324871446View represents the data serialized for the following serialization group combinations:
|
||||
// []
|
||||
Compartment3324871446View struct {
|
||||
ID int `json:"id,omitempty"`
|
||||
}
|
||||
Compartment3324871446Views []*Compartment3324871446View
|
||||
)
|
||||
|
||||
func NewCompartment3324871446View(e *ent.Compartment) *Compartment3324871446View {
|
||||
if e == nil {
|
||||
return nil
|
||||
}
|
||||
return &Compartment3324871446View{
|
||||
ID: e.ID,
|
||||
}
|
||||
}
|
||||
|
||||
func NewCompartment3324871446Views(es []*ent.Compartment) Compartment3324871446Views {
|
||||
if len(es) == 0 {
|
||||
return nil
|
||||
}
|
||||
r := make(Compartment3324871446Views, len(es))
|
||||
for i, e := range es {
|
||||
r[i] = NewCompartment3324871446View(e)
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
type (
|
||||
// Entry2675665849View represents the data serialized for the following serialization group combinations:
|
||||
// []
|
||||
Entry2675665849View struct {
|
||||
ID string `json:"id,omitempty"`
|
||||
User string `json:"user,omitempty"`
|
||||
First int `json:"first,omitempty"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||
}
|
||||
Entry2675665849Views []*Entry2675665849View
|
||||
)
|
||||
|
||||
func NewEntry2675665849View(e *ent.Entry) *Entry2675665849View {
|
||||
if e == nil {
|
||||
return nil
|
||||
}
|
||||
return &Entry2675665849View{
|
||||
ID: e.ID,
|
||||
User: e.User,
|
||||
First: e.First,
|
||||
CreatedAt: e.CreatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func NewEntry2675665849Views(es []*ent.Entry) Entry2675665849Views {
|
||||
if len(es) == 0 {
|
||||
return nil
|
||||
}
|
||||
r := make(Entry2675665849Views, len(es))
|
||||
for i, e := range es {
|
||||
r[i] = NewEntry2675665849View(e)
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
type (
|
||||
// Fridge2211356377View represents the data serialized for the following serialization group combinations:
|
||||
// []
|
||||
Fridge2211356377View struct {
|
||||
ID int `json:"id,omitempty"`
|
||||
}
|
||||
Fridge2211356377Views []*Fridge2211356377View
|
||||
)
|
||||
|
||||
func NewFridge2211356377View(e *ent.Fridge) *Fridge2211356377View {
|
||||
if e == nil {
|
||||
return nil
|
||||
}
|
||||
return &Fridge2211356377View{
|
||||
ID: e.ID,
|
||||
}
|
||||
}
|
||||
|
||||
func NewFridge2211356377Views(es []*ent.Fridge) Fridge2211356377Views {
|
||||
if len(es) == 0 {
|
||||
return nil
|
||||
}
|
||||
r := make(Fridge2211356377Views, len(es))
|
||||
for i, e := range es {
|
||||
r[i] = NewFridge2211356377View(e)
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
type (
|
||||
// Item1548468123View represents the data serialized for the following serialization group combinations:
|
||||
// []
|
||||
Item1548468123View struct {
|
||||
ID int `json:"id,omitempty"`
|
||||
}
|
||||
Item1548468123Views []*Item1548468123View
|
||||
)
|
||||
|
||||
func NewItem1548468123View(e *ent.Item) *Item1548468123View {
|
||||
if e == nil {
|
||||
return nil
|
||||
}
|
||||
return &Item1548468123View{
|
||||
ID: e.ID,
|
||||
}
|
||||
}
|
||||
|
||||
func NewItem1548468123Views(es []*ent.Item) Item1548468123Views {
|
||||
if len(es) == 0 {
|
||||
return nil
|
||||
}
|
||||
r := make(Item1548468123Views, len(es))
|
||||
for i, e := range es {
|
||||
r[i] = NewItem1548468123View(e)
|
||||
}
|
||||
return r
|
||||
}
|
||||
260
ent/http/update.go
Normal file
260
ent/http/update.go
Normal file
@@ -0,0 +1,260 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package http
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
"t/ent"
|
||||
"t/ent/compartment"
|
||||
"t/ent/entry"
|
||||
"t/ent/fridge"
|
||||
"t/ent/item"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/mailru/easyjson"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// Update updates a given ent.Compartment and saves the changes to the database.
|
||||
func (h CompartmentHandler) Update(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Update"))
|
||||
// ID is URL parameter.
|
||||
id, err := strconv.Atoi(chi.URLParam(r, "id"))
|
||||
if err != nil {
|
||||
l.Error("error getting id from url parameter", zap.String("id", chi.URLParam(r, "id")), zap.Error(err))
|
||||
BadRequest(w, "id must be an integer")
|
||||
return
|
||||
}
|
||||
// Get the post data.
|
||||
var d CompartmentUpdateRequest
|
||||
if err := easyjson.UnmarshalFromReader(r.Body, &d); err != nil {
|
||||
l.Error("error decoding json", zap.Error(err))
|
||||
BadRequest(w, "invalid json string")
|
||||
return
|
||||
}
|
||||
// Save the data.
|
||||
b := h.client.Compartment.UpdateOneID(id)
|
||||
// Store in database.
|
||||
e, err := b.Save(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.Int("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could-not-update-compartment", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
// Reload entry.
|
||||
q := h.client.Compartment.Query().Where(compartment.ID(e.ID))
|
||||
e, err = q.Only(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.Int("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could-not-read-compartment", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("compartment rendered", zap.Int("id", id))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewCompartment3324871446View(e), w)
|
||||
}
|
||||
|
||||
// Update updates a given ent.Entry and saves the changes to the database.
|
||||
func (h EntryHandler) Update(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Update"))
|
||||
// ID is URL parameter.
|
||||
var err error
|
||||
id := chi.URLParam(r, "id")
|
||||
// Get the post data.
|
||||
var d EntryUpdateRequest
|
||||
if err := easyjson.UnmarshalFromReader(r.Body, &d); err != nil {
|
||||
l.Error("error decoding json", zap.Error(err))
|
||||
BadRequest(w, "invalid json string")
|
||||
return
|
||||
}
|
||||
// Validate the data.
|
||||
errs := make(map[string]string)
|
||||
if len(errs) > 0 {
|
||||
l.Info("validation failed", zapFields(errs)...)
|
||||
BadRequest(w, errs)
|
||||
return
|
||||
}
|
||||
// Save the data.
|
||||
b := h.client.Entry.UpdateOneID(id)
|
||||
// Store in database.
|
||||
e, err := b.Save(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.String("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.String("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could-not-update-entry", zap.Error(err), zap.String("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
// Reload entry.
|
||||
q := h.client.Entry.Query().Where(entry.ID(e.ID))
|
||||
e, err = q.Only(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.String("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.String("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could-not-read-entry", zap.Error(err), zap.String("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("entry rendered", zap.String("id", id))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewEntry2675665849View(e), w)
|
||||
}
|
||||
|
||||
// Update updates a given ent.Fridge and saves the changes to the database.
|
||||
func (h FridgeHandler) Update(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Update"))
|
||||
// ID is URL parameter.
|
||||
id, err := strconv.Atoi(chi.URLParam(r, "id"))
|
||||
if err != nil {
|
||||
l.Error("error getting id from url parameter", zap.String("id", chi.URLParam(r, "id")), zap.Error(err))
|
||||
BadRequest(w, "id must be an integer")
|
||||
return
|
||||
}
|
||||
// Get the post data.
|
||||
var d FridgeUpdateRequest
|
||||
if err := easyjson.UnmarshalFromReader(r.Body, &d); err != nil {
|
||||
l.Error("error decoding json", zap.Error(err))
|
||||
BadRequest(w, "invalid json string")
|
||||
return
|
||||
}
|
||||
// Save the data.
|
||||
b := h.client.Fridge.UpdateOneID(id)
|
||||
// Store in database.
|
||||
e, err := b.Save(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.Int("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could-not-update-fridge", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
// Reload entry.
|
||||
q := h.client.Fridge.Query().Where(fridge.ID(e.ID))
|
||||
e, err = q.Only(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.Int("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could-not-read-fridge", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("fridge rendered", zap.Int("id", id))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewFridge2211356377View(e), w)
|
||||
}
|
||||
|
||||
// Update updates a given ent.Item and saves the changes to the database.
|
||||
func (h ItemHandler) Update(w http.ResponseWriter, r *http.Request) {
|
||||
l := h.log.With(zap.String("method", "Update"))
|
||||
// ID is URL parameter.
|
||||
id, err := strconv.Atoi(chi.URLParam(r, "id"))
|
||||
if err != nil {
|
||||
l.Error("error getting id from url parameter", zap.String("id", chi.URLParam(r, "id")), zap.Error(err))
|
||||
BadRequest(w, "id must be an integer")
|
||||
return
|
||||
}
|
||||
// Get the post data.
|
||||
var d ItemUpdateRequest
|
||||
if err := easyjson.UnmarshalFromReader(r.Body, &d); err != nil {
|
||||
l.Error("error decoding json", zap.Error(err))
|
||||
BadRequest(w, "invalid json string")
|
||||
return
|
||||
}
|
||||
// Save the data.
|
||||
b := h.client.Item.UpdateOneID(id)
|
||||
// Store in database.
|
||||
e, err := b.Save(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.Int("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could-not-update-item", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
// Reload entry.
|
||||
q := h.client.Item.Query().Where(item.ID(e.ID))
|
||||
e, err = q.Only(r.Context())
|
||||
if err != nil {
|
||||
switch {
|
||||
case ent.IsNotFound(err):
|
||||
msg := stripEntError(err)
|
||||
l.Info(msg, zap.Error(err), zap.Int("id", id))
|
||||
NotFound(w, msg)
|
||||
case ent.IsNotSingular(err):
|
||||
msg := stripEntError(err)
|
||||
l.Error(msg, zap.Error(err), zap.Int("id", id))
|
||||
BadRequest(w, msg)
|
||||
default:
|
||||
l.Error("could-not-read-item", zap.Error(err), zap.Int("id", id))
|
||||
InternalServerError(w, nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
l.Info("item rendered", zap.Int("id", id))
|
||||
easyjson.MarshalToHTTPResponseWriter(NewItem1548468123View(e), w)
|
||||
}
|
||||
71
ent/migrate/migrate.go
Normal file
71
ent/migrate/migrate.go
Normal file
@@ -0,0 +1,71 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package migrate
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"entgo.io/ent/dialect"
|
||||
"entgo.io/ent/dialect/sql/schema"
|
||||
)
|
||||
|
||||
var (
|
||||
// WithGlobalUniqueID sets the universal ids options to the migration.
|
||||
// If this option is enabled, ent migration will allocate a 1<<32 range
|
||||
// for the ids of each entity (table).
|
||||
// Note that this option cannot be applied on tables that already exist.
|
||||
WithGlobalUniqueID = schema.WithGlobalUniqueID
|
||||
// WithDropColumn sets the drop column option to the migration.
|
||||
// If this option is enabled, ent migration will drop old columns
|
||||
// that were used for both fields and edges. This defaults to false.
|
||||
WithDropColumn = schema.WithDropColumn
|
||||
// WithDropIndex sets the drop index option to the migration.
|
||||
// If this option is enabled, ent migration will drop old indexes
|
||||
// that were defined in the schema. This defaults to false.
|
||||
// Note that unique constraints are defined using `UNIQUE INDEX`,
|
||||
// and therefore, it's recommended to enable this option to get more
|
||||
// flexibility in the schema changes.
|
||||
WithDropIndex = schema.WithDropIndex
|
||||
// WithFixture sets the foreign-key renaming option to the migration when upgrading
|
||||
// ent from v0.1.0 (issue-#285). Defaults to false.
|
||||
WithFixture = schema.WithFixture
|
||||
// WithForeignKeys enables creating foreign-key in schema DDL. This defaults to true.
|
||||
WithForeignKeys = schema.WithForeignKeys
|
||||
)
|
||||
|
||||
// Schema is the API for creating, migrating and dropping a schema.
|
||||
type Schema struct {
|
||||
drv dialect.Driver
|
||||
}
|
||||
|
||||
// NewSchema creates a new schema client.
|
||||
func NewSchema(drv dialect.Driver) *Schema { return &Schema{drv: drv} }
|
||||
|
||||
// Create creates all schema resources.
|
||||
func (s *Schema) Create(ctx context.Context, opts ...schema.MigrateOption) error {
|
||||
migrate, err := schema.NewMigrate(s.drv, opts...)
|
||||
if err != nil {
|
||||
return fmt.Errorf("ent/migrate: %w", err)
|
||||
}
|
||||
return migrate.Create(ctx, Tables...)
|
||||
}
|
||||
|
||||
// WriteTo writes the schema changes to w instead of running them against the database.
|
||||
//
|
||||
// if err := client.Schema.WriteTo(context.Background(), os.Stdout); err != nil {
|
||||
// log.Fatal(err)
|
||||
// }
|
||||
//
|
||||
func (s *Schema) WriteTo(ctx context.Context, w io.Writer, opts ...schema.MigrateOption) error {
|
||||
drv := &schema.WriteDriver{
|
||||
Writer: w,
|
||||
Driver: s.drv,
|
||||
}
|
||||
migrate, err := schema.NewMigrate(drv, opts...)
|
||||
if err != nil {
|
||||
return fmt.Errorf("ent/migrate: %w", err)
|
||||
}
|
||||
return migrate.Create(ctx, Tables...)
|
||||
}
|
||||
46
ent/migrate/schema.go
Normal file
46
ent/migrate/schema.go
Normal file
@@ -0,0 +1,46 @@
|
||||
// Code generated by entc, DO NOT EDIT.
|
||||
|
||||
package migrate
|
||||
|
||||
import (
|
||||
"entgo.io/ent/dialect/sql/schema"
|
||||
"entgo.io/ent/schema/field"
|
||||
)
|
||||
|
||||
var (
|
||||
// UsersColumns holds the columns for the "users" table.
|
||||
UsersColumns = []*schema.Column{
|
||||
{Name: "id", Type: field.TypeInt, Increment: true},
|
||||
{Name: "user", Type: field.TypeString, Unique: true, Size: 7},
|
||||
{Name: "chara", Type: field.TypeString, Nullable: true, Default: "ponta"},
|
||||
{Name: "skill", Type: field.TypeInt, Nullable: true, Default: 7},
|
||||
{Name: "hp", Type: field.TypeInt, Nullable: true, Default: 7},
|
||||
{Name: "attack", Type: field.TypeInt, Nullable: true, Default: 8},
|
||||
{Name: "defense", Type: field.TypeInt, Nullable: true, Default: 19},
|
||||
{Name: "critical", Type: field.TypeInt, Nullable: true, Default: 7},
|
||||
{Name: "battle", Type: field.TypeInt, Nullable: true, Default: 1},
|
||||
{Name: "win", Type: field.TypeInt, Nullable: true, Default: 0},
|
||||
{Name: "day", Type: field.TypeInt, Nullable: true, Default: 0},
|
||||
{Name: "percentage", Type: field.TypeFloat64, Nullable: true, Default: 0},
|
||||
{Name: "limit", Type: field.TypeBool, Nullable: true, Default: false},
|
||||
{Name: "status", Type: field.TypeString, Nullable: true, Default: "normal"},
|
||||
{Name: "comment", Type: field.TypeString, Nullable: true, Default: ""},
|
||||
{Name: "created_at", Type: field.TypeTime, Nullable: true},
|
||||
{Name: "next", Type: field.TypeString, Nullable: true, Default: "20220617"},
|
||||
{Name: "updated_at", Type: field.TypeTime, Nullable: true},
|
||||
{Name: "url", Type: field.TypeString, Nullable: true, Default: "https://syui.cf/api"},
|
||||
}
|
||||
// UsersTable holds the schema information for the "users" table.
|
||||
UsersTable = &schema.Table{
|
||||
Name: "users",
|
||||
Columns: UsersColumns,
|
||||
PrimaryKey: []*schema.Column{UsersColumns[0]},
|
||||
}
|
||||
// Tables holds all the tables in the schema.
|
||||
Tables = []*schema.Table{
|
||||
UsersTable,
|
||||
}
|
||||
)
|
||||
|
||||
func init() {
|
||||
}
|
||||
1891
ent/mutation.go
Normal file
1891
ent/mutation.go
Normal file
File diff suppressed because it is too large
Load Diff
165
ent/ogent/oas_cfg_gen.go
Normal file
165
ent/ogent/oas_cfg_gen.go
Normal file
@@ -0,0 +1,165 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
|
||||
// bufPool is pool of bytes.Buffer for encoding and decoding.
|
||||
var bufPool = &sync.Pool{
|
||||
New: func() interface{} {
|
||||
return new(bytes.Buffer)
|
||||
},
|
||||
}
|
||||
|
||||
// getBuf returns buffer from pool.
|
||||
func getBuf() *bytes.Buffer {
|
||||
return bufPool.Get().(*bytes.Buffer)
|
||||
}
|
||||
|
||||
// putBuf puts buffer to pool.
|
||||
func putBuf(b *bytes.Buffer) {
|
||||
b.Reset()
|
||||
bufPool.Put(b)
|
||||
}
|
||||
|
||||
type config struct {
|
||||
TracerProvider trace.TracerProvider
|
||||
Tracer trace.Tracer
|
||||
MeterProvider metric.MeterProvider
|
||||
Meter metric.Meter
|
||||
Client ht.Client
|
||||
NotFound http.HandlerFunc
|
||||
}
|
||||
|
||||
func newConfig(opts ...Option) config {
|
||||
cfg := config{
|
||||
TracerProvider: otel.GetTracerProvider(),
|
||||
MeterProvider: metric.NewNoopMeterProvider(),
|
||||
Client: http.DefaultClient,
|
||||
NotFound: http.NotFound,
|
||||
}
|
||||
for _, opt := range opts {
|
||||
opt.apply(&cfg)
|
||||
}
|
||||
cfg.Tracer = cfg.TracerProvider.Tracer(otelogen.Name,
|
||||
trace.WithInstrumentationVersion(otelogen.SemVersion()),
|
||||
)
|
||||
cfg.Meter = cfg.MeterProvider.Meter(otelogen.Name)
|
||||
return cfg
|
||||
}
|
||||
|
||||
type Option interface {
|
||||
apply(*config)
|
||||
}
|
||||
|
||||
type optionFunc func(*config)
|
||||
|
||||
func (o optionFunc) apply(c *config) {
|
||||
o(c)
|
||||
}
|
||||
|
||||
// WithTracerProvider specifies a tracer provider to use for creating a tracer.
|
||||
//
|
||||
// If none is specified, the global provider is used.
|
||||
func WithTracerProvider(provider trace.TracerProvider) Option {
|
||||
return optionFunc(func(cfg *config) {
|
||||
if provider != nil {
|
||||
cfg.TracerProvider = provider
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// WithMeterProvider specifies a meter provider to use for creating a meter.
|
||||
//
|
||||
// If none is specified, the metric.NewNoopMeterProvider is used.
|
||||
func WithMeterProvider(provider metric.MeterProvider) Option {
|
||||
return optionFunc(func(cfg *config) {
|
||||
if provider != nil {
|
||||
cfg.MeterProvider = provider
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// WithClient specifies http client to use.
|
||||
func WithClient(client ht.Client) Option {
|
||||
return optionFunc(func(cfg *config) {
|
||||
if client != nil {
|
||||
cfg.Client = client
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// WithNotFound specifies http handler to use.
|
||||
func WithNotFound(notFound http.HandlerFunc) Option {
|
||||
return optionFunc(func(cfg *config) {
|
||||
if notFound != nil {
|
||||
cfg.NotFound = notFound
|
||||
}
|
||||
})
|
||||
}
|
||||
564
ent/ogent/oas_client_gen.go
Normal file
564
ent/ogent/oas_client_gen.go
Normal file
@@ -0,0 +1,564 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
|
||||
// Client implements OAS client.
|
||||
type Client struct {
|
||||
serverURL *url.URL
|
||||
cfg config
|
||||
requests metric.Int64Counter
|
||||
errors metric.Int64Counter
|
||||
duration metric.Int64Histogram
|
||||
}
|
||||
|
||||
// NewClient initializes new Client defined by OAS.
|
||||
func NewClient(serverURL string, opts ...Option) (*Client, error) {
|
||||
u, err := url.Parse(serverURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
c := &Client{
|
||||
cfg: newConfig(opts...),
|
||||
serverURL: u,
|
||||
}
|
||||
if c.requests, err = c.cfg.Meter.NewInt64Counter(otelogen.ClientRequestCount); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if c.errors, err = c.cfg.Meter.NewInt64Counter(otelogen.ClientErrorsCount); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if c.duration, err = c.cfg.Meter.NewInt64Histogram(otelogen.ClientDuration); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return c, nil
|
||||
}
|
||||
|
||||
// CreateUsers invokes createUsers operation.
|
||||
//
|
||||
// Creates a new Users and persists it to storage.
|
||||
//
|
||||
// POST /users
|
||||
func (c *Client) CreateUsers(ctx context.Context, request CreateUsersReq) (res CreateUsersRes, err error) {
|
||||
if err := func() error {
|
||||
if err := request.Validate(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, errors.Wrap(err, "validate")
|
||||
}
|
||||
startTime := time.Now()
|
||||
otelAttrs := []attribute.KeyValue{
|
||||
otelogen.OperationID("createUsers"),
|
||||
}
|
||||
ctx, span := c.cfg.Tracer.Start(ctx, "CreateUsers",
|
||||
trace.WithAttributes(otelAttrs...),
|
||||
trace.WithSpanKind(trace.SpanKindClient),
|
||||
)
|
||||
defer func() {
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
c.errors.Add(ctx, 1, otelAttrs...)
|
||||
} else {
|
||||
elapsedDuration := time.Since(startTime)
|
||||
c.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...)
|
||||
}
|
||||
span.End()
|
||||
}()
|
||||
c.requests.Add(ctx, 1, otelAttrs...)
|
||||
var (
|
||||
contentType string
|
||||
reqBody io.Reader
|
||||
)
|
||||
contentType = "application/json"
|
||||
buf, err := encodeCreateUsersRequestJSON(request, span)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
defer jx.PutEncoder(buf)
|
||||
reqBody = bytes.NewReader(buf.Bytes())
|
||||
|
||||
u := uri.Clone(c.serverURL)
|
||||
u.Path += "/users"
|
||||
|
||||
r := ht.NewRequest(ctx, "POST", u, reqBody)
|
||||
defer ht.PutRequest(r)
|
||||
|
||||
r.Header.Set("Content-Type", contentType)
|
||||
|
||||
resp, err := c.cfg.Client.Do(r)
|
||||
if err != nil {
|
||||
return res, errors.Wrap(err, "do request")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
result, err := decodeCreateUsersResponse(resp, span)
|
||||
if err != nil {
|
||||
return res, errors.Wrap(err, "decode response")
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// DeleteUsers invokes deleteUsers operation.
|
||||
//
|
||||
// Deletes the Users with the requested ID.
|
||||
//
|
||||
// DELETE /users/{id}
|
||||
func (c *Client) DeleteUsers(ctx context.Context, params DeleteUsersParams) (res DeleteUsersRes, err error) {
|
||||
startTime := time.Now()
|
||||
otelAttrs := []attribute.KeyValue{
|
||||
otelogen.OperationID("deleteUsers"),
|
||||
}
|
||||
ctx, span := c.cfg.Tracer.Start(ctx, "DeleteUsers",
|
||||
trace.WithAttributes(otelAttrs...),
|
||||
trace.WithSpanKind(trace.SpanKindClient),
|
||||
)
|
||||
defer func() {
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
c.errors.Add(ctx, 1, otelAttrs...)
|
||||
} else {
|
||||
elapsedDuration := time.Since(startTime)
|
||||
c.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...)
|
||||
}
|
||||
span.End()
|
||||
}()
|
||||
c.requests.Add(ctx, 1, otelAttrs...)
|
||||
u := uri.Clone(c.serverURL)
|
||||
u.Path += "/users/"
|
||||
{
|
||||
// Encode "id" parameter.
|
||||
e := uri.NewPathEncoder(uri.PathEncoderConfig{
|
||||
Param: "id",
|
||||
Style: uri.PathStyleSimple,
|
||||
Explode: false,
|
||||
})
|
||||
if err := func() error {
|
||||
return e.EncodeValue(conv.IntToString(params.ID))
|
||||
}(); err != nil {
|
||||
return res, errors.Wrap(err, "encode path")
|
||||
}
|
||||
u.Path += e.Result()
|
||||
}
|
||||
|
||||
r := ht.NewRequest(ctx, "DELETE", u, nil)
|
||||
defer ht.PutRequest(r)
|
||||
|
||||
resp, err := c.cfg.Client.Do(r)
|
||||
if err != nil {
|
||||
return res, errors.Wrap(err, "do request")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
result, err := decodeDeleteUsersResponse(resp, span)
|
||||
if err != nil {
|
||||
return res, errors.Wrap(err, "decode response")
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// DrawDone invokes drawDone operation.
|
||||
//
|
||||
// PUT /users/{id}/d
|
||||
func (c *Client) DrawDone(ctx context.Context, params DrawDoneParams) (res DrawDoneNoContent, err error) {
|
||||
startTime := time.Now()
|
||||
otelAttrs := []attribute.KeyValue{
|
||||
otelogen.OperationID("drawDone"),
|
||||
}
|
||||
ctx, span := c.cfg.Tracer.Start(ctx, "DrawDone",
|
||||
trace.WithAttributes(otelAttrs...),
|
||||
trace.WithSpanKind(trace.SpanKindClient),
|
||||
)
|
||||
defer func() {
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
c.errors.Add(ctx, 1, otelAttrs...)
|
||||
} else {
|
||||
elapsedDuration := time.Since(startTime)
|
||||
c.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...)
|
||||
}
|
||||
span.End()
|
||||
}()
|
||||
c.requests.Add(ctx, 1, otelAttrs...)
|
||||
u := uri.Clone(c.serverURL)
|
||||
u.Path += "/users/"
|
||||
{
|
||||
// Encode "id" parameter.
|
||||
e := uri.NewPathEncoder(uri.PathEncoderConfig{
|
||||
Param: "id",
|
||||
Style: uri.PathStyleSimple,
|
||||
Explode: false,
|
||||
})
|
||||
if err := func() error {
|
||||
return e.EncodeValue(conv.IntToString(params.ID))
|
||||
}(); err != nil {
|
||||
return res, errors.Wrap(err, "encode path")
|
||||
}
|
||||
u.Path += e.Result()
|
||||
}
|
||||
u.Path += "/d"
|
||||
|
||||
r := ht.NewRequest(ctx, "PUT", u, nil)
|
||||
defer ht.PutRequest(r)
|
||||
|
||||
resp, err := c.cfg.Client.Do(r)
|
||||
if err != nil {
|
||||
return res, errors.Wrap(err, "do request")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
result, err := decodeDrawDoneResponse(resp, span)
|
||||
if err != nil {
|
||||
return res, errors.Wrap(err, "decode response")
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// DrawStart invokes drawStart operation.
|
||||
//
|
||||
// PATCH /users/{id}/start
|
||||
func (c *Client) DrawStart(ctx context.Context, params DrawStartParams) (res DrawStartNoContent, err error) {
|
||||
startTime := time.Now()
|
||||
otelAttrs := []attribute.KeyValue{
|
||||
otelogen.OperationID("drawStart"),
|
||||
}
|
||||
ctx, span := c.cfg.Tracer.Start(ctx, "DrawStart",
|
||||
trace.WithAttributes(otelAttrs...),
|
||||
trace.WithSpanKind(trace.SpanKindClient),
|
||||
)
|
||||
defer func() {
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
c.errors.Add(ctx, 1, otelAttrs...)
|
||||
} else {
|
||||
elapsedDuration := time.Since(startTime)
|
||||
c.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...)
|
||||
}
|
||||
span.End()
|
||||
}()
|
||||
c.requests.Add(ctx, 1, otelAttrs...)
|
||||
u := uri.Clone(c.serverURL)
|
||||
u.Path += "/users/"
|
||||
{
|
||||
// Encode "id" parameter.
|
||||
e := uri.NewPathEncoder(uri.PathEncoderConfig{
|
||||
Param: "id",
|
||||
Style: uri.PathStyleSimple,
|
||||
Explode: false,
|
||||
})
|
||||
if err := func() error {
|
||||
return e.EncodeValue(conv.IntToString(params.ID))
|
||||
}(); err != nil {
|
||||
return res, errors.Wrap(err, "encode path")
|
||||
}
|
||||
u.Path += e.Result()
|
||||
}
|
||||
u.Path += "/start"
|
||||
|
||||
r := ht.NewRequest(ctx, "PATCH", u, nil)
|
||||
defer ht.PutRequest(r)
|
||||
|
||||
resp, err := c.cfg.Client.Do(r)
|
||||
if err != nil {
|
||||
return res, errors.Wrap(err, "do request")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
result, err := decodeDrawStartResponse(resp, span)
|
||||
if err != nil {
|
||||
return res, errors.Wrap(err, "decode response")
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// ListUsers invokes listUsers operation.
|
||||
//
|
||||
// List Users.
|
||||
//
|
||||
// GET /users
|
||||
func (c *Client) ListUsers(ctx context.Context, params ListUsersParams) (res ListUsersRes, err error) {
|
||||
startTime := time.Now()
|
||||
otelAttrs := []attribute.KeyValue{
|
||||
otelogen.OperationID("listUsers"),
|
||||
}
|
||||
ctx, span := c.cfg.Tracer.Start(ctx, "ListUsers",
|
||||
trace.WithAttributes(otelAttrs...),
|
||||
trace.WithSpanKind(trace.SpanKindClient),
|
||||
)
|
||||
defer func() {
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
c.errors.Add(ctx, 1, otelAttrs...)
|
||||
} else {
|
||||
elapsedDuration := time.Since(startTime)
|
||||
c.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...)
|
||||
}
|
||||
span.End()
|
||||
}()
|
||||
c.requests.Add(ctx, 1, otelAttrs...)
|
||||
u := uri.Clone(c.serverURL)
|
||||
u.Path += "/users"
|
||||
|
||||
q := u.Query()
|
||||
{
|
||||
// Encode "page" parameter.
|
||||
e := uri.NewQueryEncoder(uri.QueryEncoderConfig{
|
||||
Style: uri.QueryStyleForm,
|
||||
Explode: true,
|
||||
})
|
||||
if err := func() error {
|
||||
if val, ok := params.Page.Get(); ok {
|
||||
return e.EncodeValue(conv.IntToString(val))
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, errors.Wrap(err, "encode query")
|
||||
}
|
||||
q["page"] = e.Result()
|
||||
}
|
||||
{
|
||||
// Encode "itemsPerPage" parameter.
|
||||
e := uri.NewQueryEncoder(uri.QueryEncoderConfig{
|
||||
Style: uri.QueryStyleForm,
|
||||
Explode: true,
|
||||
})
|
||||
if err := func() error {
|
||||
if val, ok := params.ItemsPerPage.Get(); ok {
|
||||
return e.EncodeValue(conv.IntToString(val))
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, errors.Wrap(err, "encode query")
|
||||
}
|
||||
q["itemsPerPage"] = e.Result()
|
||||
}
|
||||
u.RawQuery = q.Encode()
|
||||
|
||||
r := ht.NewRequest(ctx, "GET", u, nil)
|
||||
defer ht.PutRequest(r)
|
||||
|
||||
resp, err := c.cfg.Client.Do(r)
|
||||
if err != nil {
|
||||
return res, errors.Wrap(err, "do request")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
result, err := decodeListUsersResponse(resp, span)
|
||||
if err != nil {
|
||||
return res, errors.Wrap(err, "decode response")
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// ReadUsers invokes readUsers operation.
|
||||
//
|
||||
// Finds the Users with the requested ID and returns it.
|
||||
//
|
||||
// GET /users/{id}
|
||||
func (c *Client) ReadUsers(ctx context.Context, params ReadUsersParams) (res ReadUsersRes, err error) {
|
||||
startTime := time.Now()
|
||||
otelAttrs := []attribute.KeyValue{
|
||||
otelogen.OperationID("readUsers"),
|
||||
}
|
||||
ctx, span := c.cfg.Tracer.Start(ctx, "ReadUsers",
|
||||
trace.WithAttributes(otelAttrs...),
|
||||
trace.WithSpanKind(trace.SpanKindClient),
|
||||
)
|
||||
defer func() {
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
c.errors.Add(ctx, 1, otelAttrs...)
|
||||
} else {
|
||||
elapsedDuration := time.Since(startTime)
|
||||
c.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...)
|
||||
}
|
||||
span.End()
|
||||
}()
|
||||
c.requests.Add(ctx, 1, otelAttrs...)
|
||||
u := uri.Clone(c.serverURL)
|
||||
u.Path += "/users/"
|
||||
{
|
||||
// Encode "id" parameter.
|
||||
e := uri.NewPathEncoder(uri.PathEncoderConfig{
|
||||
Param: "id",
|
||||
Style: uri.PathStyleSimple,
|
||||
Explode: false,
|
||||
})
|
||||
if err := func() error {
|
||||
return e.EncodeValue(conv.IntToString(params.ID))
|
||||
}(); err != nil {
|
||||
return res, errors.Wrap(err, "encode path")
|
||||
}
|
||||
u.Path += e.Result()
|
||||
}
|
||||
|
||||
r := ht.NewRequest(ctx, "GET", u, nil)
|
||||
defer ht.PutRequest(r)
|
||||
|
||||
resp, err := c.cfg.Client.Do(r)
|
||||
if err != nil {
|
||||
return res, errors.Wrap(err, "do request")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
result, err := decodeReadUsersResponse(resp, span)
|
||||
if err != nil {
|
||||
return res, errors.Wrap(err, "decode response")
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// UpdateUsers invokes updateUsers operation.
|
||||
//
|
||||
// Updates a Users and persists changes to storage.
|
||||
//
|
||||
// PATCH /users/{id}
|
||||
func (c *Client) UpdateUsers(ctx context.Context, request UpdateUsersReq, params UpdateUsersParams) (res UpdateUsersRes, err error) {
|
||||
if err := func() error {
|
||||
if err := request.Validate(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, errors.Wrap(err, "validate")
|
||||
}
|
||||
startTime := time.Now()
|
||||
otelAttrs := []attribute.KeyValue{
|
||||
otelogen.OperationID("updateUsers"),
|
||||
}
|
||||
ctx, span := c.cfg.Tracer.Start(ctx, "UpdateUsers",
|
||||
trace.WithAttributes(otelAttrs...),
|
||||
trace.WithSpanKind(trace.SpanKindClient),
|
||||
)
|
||||
defer func() {
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
c.errors.Add(ctx, 1, otelAttrs...)
|
||||
} else {
|
||||
elapsedDuration := time.Since(startTime)
|
||||
c.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...)
|
||||
}
|
||||
span.End()
|
||||
}()
|
||||
c.requests.Add(ctx, 1, otelAttrs...)
|
||||
var (
|
||||
contentType string
|
||||
reqBody io.Reader
|
||||
)
|
||||
contentType = "application/json"
|
||||
buf, err := encodeUpdateUsersRequestJSON(request, span)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
defer jx.PutEncoder(buf)
|
||||
reqBody = bytes.NewReader(buf.Bytes())
|
||||
|
||||
u := uri.Clone(c.serverURL)
|
||||
u.Path += "/users/"
|
||||
{
|
||||
// Encode "id" parameter.
|
||||
e := uri.NewPathEncoder(uri.PathEncoderConfig{
|
||||
Param: "id",
|
||||
Style: uri.PathStyleSimple,
|
||||
Explode: false,
|
||||
})
|
||||
if err := func() error {
|
||||
return e.EncodeValue(conv.IntToString(params.ID))
|
||||
}(); err != nil {
|
||||
return res, errors.Wrap(err, "encode path")
|
||||
}
|
||||
u.Path += e.Result()
|
||||
}
|
||||
|
||||
r := ht.NewRequest(ctx, "PATCH", u, reqBody)
|
||||
defer ht.PutRequest(r)
|
||||
|
||||
r.Header.Set("Content-Type", contentType)
|
||||
|
||||
resp, err := c.cfg.Client.Do(r)
|
||||
if err != nil {
|
||||
return res, errors.Wrap(err, "do request")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
result, err := decodeUpdateUsersResponse(resp, span)
|
||||
if err != nil {
|
||||
return res, errors.Wrap(err, "decode response")
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
71
ent/ogent/oas_defaults_gen.go
Normal file
71
ent/ogent/oas_defaults_gen.go
Normal file
@@ -0,0 +1,71 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
390
ent/ogent/oas_handlers_gen.go
Normal file
390
ent/ogent/oas_handlers_gen.go
Normal file
@@ -0,0 +1,390 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
|
||||
// HandleCreateUsersRequest handles createUsers operation.
|
||||
//
|
||||
// POST /users
|
||||
func (s *Server) handleCreateUsersRequest(args [0]string, w http.ResponseWriter, r *http.Request) {
|
||||
startTime := time.Now()
|
||||
otelAttrs := []attribute.KeyValue{
|
||||
otelogen.OperationID("createUsers"),
|
||||
}
|
||||
ctx, span := s.cfg.Tracer.Start(r.Context(), "CreateUsers",
|
||||
trace.WithAttributes(otelAttrs...),
|
||||
trace.WithSpanKind(trace.SpanKindServer),
|
||||
)
|
||||
s.requests.Add(ctx, 1, otelAttrs...)
|
||||
defer span.End()
|
||||
|
||||
var err error
|
||||
request, err := decodeCreateUsersRequest(r, span)
|
||||
if err != nil {
|
||||
s.badRequest(ctx, w, span, otelAttrs, err)
|
||||
return
|
||||
}
|
||||
|
||||
response, err := s.h.CreateUsers(ctx, request)
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "Internal")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
respondError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := encodeCreateUsersResponse(response, w, span); err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "Response")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
return
|
||||
}
|
||||
span.SetStatus(codes.Ok, "Ok")
|
||||
elapsedDuration := time.Since(startTime)
|
||||
s.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...)
|
||||
}
|
||||
|
||||
// HandleDeleteUsersRequest handles deleteUsers operation.
|
||||
//
|
||||
// DELETE /users/{id}
|
||||
func (s *Server) handleDeleteUsersRequest(args [1]string, w http.ResponseWriter, r *http.Request) {
|
||||
startTime := time.Now()
|
||||
otelAttrs := []attribute.KeyValue{
|
||||
otelogen.OperationID("deleteUsers"),
|
||||
}
|
||||
ctx, span := s.cfg.Tracer.Start(r.Context(), "DeleteUsers",
|
||||
trace.WithAttributes(otelAttrs...),
|
||||
trace.WithSpanKind(trace.SpanKindServer),
|
||||
)
|
||||
s.requests.Add(ctx, 1, otelAttrs...)
|
||||
defer span.End()
|
||||
|
||||
var err error
|
||||
params, err := decodeDeleteUsersParams(args, r)
|
||||
if err != nil {
|
||||
s.badRequest(ctx, w, span, otelAttrs, err)
|
||||
return
|
||||
}
|
||||
|
||||
response, err := s.h.DeleteUsers(ctx, params)
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "Internal")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
respondError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := encodeDeleteUsersResponse(response, w, span); err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "Response")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
return
|
||||
}
|
||||
span.SetStatus(codes.Ok, "Ok")
|
||||
elapsedDuration := time.Since(startTime)
|
||||
s.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...)
|
||||
}
|
||||
|
||||
// HandleDrawDoneRequest handles drawDone operation.
|
||||
//
|
||||
// PUT /users/{id}/d
|
||||
func (s *Server) handleDrawDoneRequest(args [1]string, w http.ResponseWriter, r *http.Request) {
|
||||
startTime := time.Now()
|
||||
otelAttrs := []attribute.KeyValue{
|
||||
otelogen.OperationID("drawDone"),
|
||||
}
|
||||
ctx, span := s.cfg.Tracer.Start(r.Context(), "DrawDone",
|
||||
trace.WithAttributes(otelAttrs...),
|
||||
trace.WithSpanKind(trace.SpanKindServer),
|
||||
)
|
||||
s.requests.Add(ctx, 1, otelAttrs...)
|
||||
defer span.End()
|
||||
|
||||
var err error
|
||||
params, err := decodeDrawDoneParams(args, r)
|
||||
if err != nil {
|
||||
s.badRequest(ctx, w, span, otelAttrs, err)
|
||||
return
|
||||
}
|
||||
|
||||
response, err := s.h.DrawDone(ctx, params)
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "Internal")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
respondError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := encodeDrawDoneResponse(response, w, span); err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "Response")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
return
|
||||
}
|
||||
span.SetStatus(codes.Ok, "Ok")
|
||||
elapsedDuration := time.Since(startTime)
|
||||
s.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...)
|
||||
}
|
||||
|
||||
// HandleDrawStartRequest handles drawStart operation.
|
||||
//
|
||||
// PATCH /users/{id}/start
|
||||
func (s *Server) handleDrawStartRequest(args [1]string, w http.ResponseWriter, r *http.Request) {
|
||||
startTime := time.Now()
|
||||
otelAttrs := []attribute.KeyValue{
|
||||
otelogen.OperationID("drawStart"),
|
||||
}
|
||||
ctx, span := s.cfg.Tracer.Start(r.Context(), "DrawStart",
|
||||
trace.WithAttributes(otelAttrs...),
|
||||
trace.WithSpanKind(trace.SpanKindServer),
|
||||
)
|
||||
s.requests.Add(ctx, 1, otelAttrs...)
|
||||
defer span.End()
|
||||
|
||||
var err error
|
||||
params, err := decodeDrawStartParams(args, r)
|
||||
if err != nil {
|
||||
s.badRequest(ctx, w, span, otelAttrs, err)
|
||||
return
|
||||
}
|
||||
|
||||
response, err := s.h.DrawStart(ctx, params)
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "Internal")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
respondError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := encodeDrawStartResponse(response, w, span); err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "Response")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
return
|
||||
}
|
||||
span.SetStatus(codes.Ok, "Ok")
|
||||
elapsedDuration := time.Since(startTime)
|
||||
s.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...)
|
||||
}
|
||||
|
||||
// HandleListUsersRequest handles listUsers operation.
|
||||
//
|
||||
// GET /users
|
||||
func (s *Server) handleListUsersRequest(args [0]string, w http.ResponseWriter, r *http.Request) {
|
||||
startTime := time.Now()
|
||||
otelAttrs := []attribute.KeyValue{
|
||||
otelogen.OperationID("listUsers"),
|
||||
}
|
||||
ctx, span := s.cfg.Tracer.Start(r.Context(), "ListUsers",
|
||||
trace.WithAttributes(otelAttrs...),
|
||||
trace.WithSpanKind(trace.SpanKindServer),
|
||||
)
|
||||
s.requests.Add(ctx, 1, otelAttrs...)
|
||||
defer span.End()
|
||||
|
||||
var err error
|
||||
params, err := decodeListUsersParams(args, r)
|
||||
if err != nil {
|
||||
s.badRequest(ctx, w, span, otelAttrs, err)
|
||||
return
|
||||
}
|
||||
|
||||
response, err := s.h.ListUsers(ctx, params)
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "Internal")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
respondError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := encodeListUsersResponse(response, w, span); err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "Response")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
return
|
||||
}
|
||||
span.SetStatus(codes.Ok, "Ok")
|
||||
elapsedDuration := time.Since(startTime)
|
||||
s.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...)
|
||||
}
|
||||
|
||||
// HandleReadUsersRequest handles readUsers operation.
|
||||
//
|
||||
// GET /users/{id}
|
||||
func (s *Server) handleReadUsersRequest(args [1]string, w http.ResponseWriter, r *http.Request) {
|
||||
startTime := time.Now()
|
||||
otelAttrs := []attribute.KeyValue{
|
||||
otelogen.OperationID("readUsers"),
|
||||
}
|
||||
ctx, span := s.cfg.Tracer.Start(r.Context(), "ReadUsers",
|
||||
trace.WithAttributes(otelAttrs...),
|
||||
trace.WithSpanKind(trace.SpanKindServer),
|
||||
)
|
||||
s.requests.Add(ctx, 1, otelAttrs...)
|
||||
defer span.End()
|
||||
|
||||
var err error
|
||||
params, err := decodeReadUsersParams(args, r)
|
||||
if err != nil {
|
||||
s.badRequest(ctx, w, span, otelAttrs, err)
|
||||
return
|
||||
}
|
||||
|
||||
response, err := s.h.ReadUsers(ctx, params)
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "Internal")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
respondError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := encodeReadUsersResponse(response, w, span); err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "Response")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
return
|
||||
}
|
||||
span.SetStatus(codes.Ok, "Ok")
|
||||
elapsedDuration := time.Since(startTime)
|
||||
s.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...)
|
||||
}
|
||||
|
||||
// HandleUpdateUsersRequest handles updateUsers operation.
|
||||
//
|
||||
// PATCH /users/{id}
|
||||
func (s *Server) handleUpdateUsersRequest(args [1]string, w http.ResponseWriter, r *http.Request) {
|
||||
startTime := time.Now()
|
||||
otelAttrs := []attribute.KeyValue{
|
||||
otelogen.OperationID("updateUsers"),
|
||||
}
|
||||
ctx, span := s.cfg.Tracer.Start(r.Context(), "UpdateUsers",
|
||||
trace.WithAttributes(otelAttrs...),
|
||||
trace.WithSpanKind(trace.SpanKindServer),
|
||||
)
|
||||
s.requests.Add(ctx, 1, otelAttrs...)
|
||||
defer span.End()
|
||||
|
||||
var err error
|
||||
params, err := decodeUpdateUsersParams(args, r)
|
||||
if err != nil {
|
||||
s.badRequest(ctx, w, span, otelAttrs, err)
|
||||
return
|
||||
}
|
||||
request, err := decodeUpdateUsersRequest(r, span)
|
||||
if err != nil {
|
||||
s.badRequest(ctx, w, span, otelAttrs, err)
|
||||
return
|
||||
}
|
||||
|
||||
response, err := s.h.UpdateUsers(ctx, request, params)
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "Internal")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
respondError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := encodeUpdateUsersResponse(response, w, span); err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "Response")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
return
|
||||
}
|
||||
span.SetStatus(codes.Ok, "Ok")
|
||||
elapsedDuration := time.Since(startTime)
|
||||
s.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...)
|
||||
}
|
||||
|
||||
func (s *Server) badRequest(ctx context.Context, w http.ResponseWriter, span trace.Span, otelAttrs []attribute.KeyValue, err error) {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "BadRequest")
|
||||
s.errors.Add(ctx, 1, otelAttrs...)
|
||||
respondError(w, http.StatusBadRequest, err)
|
||||
}
|
||||
|
||||
func respondError(w http.ResponseWriter, code int, err error) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(code)
|
||||
data, writeErr := json.Marshal(struct {
|
||||
ErrorMessage string `json:"error_message"`
|
||||
}{
|
||||
ErrorMessage: err.Error(),
|
||||
})
|
||||
if writeErr == nil {
|
||||
w.Write(data)
|
||||
}
|
||||
}
|
||||
22
ent/ogent/oas_interfaces_gen.go
Normal file
22
ent/ogent/oas_interfaces_gen.go
Normal file
@@ -0,0 +1,22 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
package ogent
|
||||
|
||||
type CreateUsersRes interface {
|
||||
createUsersRes()
|
||||
}
|
||||
|
||||
type DeleteUsersRes interface {
|
||||
deleteUsersRes()
|
||||
}
|
||||
|
||||
type ListUsersRes interface {
|
||||
listUsersRes()
|
||||
}
|
||||
|
||||
type ReadUsersRes interface {
|
||||
readUsersRes()
|
||||
}
|
||||
|
||||
type UpdateUsersRes interface {
|
||||
updateUsersRes()
|
||||
}
|
||||
2885
ent/ogent/oas_json_gen.go
Normal file
2885
ent/ogent/oas_json_gen.go
Normal file
File diff suppressed because it is too large
Load Diff
339
ent/ogent/oas_param_dec_gen.go
Normal file
339
ent/ogent/oas_param_dec_gen.go
Normal file
@@ -0,0 +1,339 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
|
||||
func decodeDeleteUsersParams(args [1]string, r *http.Request) (DeleteUsersParams, error) {
|
||||
var (
|
||||
params DeleteUsersParams
|
||||
)
|
||||
// Decode path: id.
|
||||
{
|
||||
param := args[0]
|
||||
if len(param) > 0 {
|
||||
d := uri.NewPathDecoder(uri.PathDecoderConfig{
|
||||
Param: "id",
|
||||
Value: param,
|
||||
Style: uri.PathStyleSimple,
|
||||
Explode: false,
|
||||
})
|
||||
|
||||
if err := func() error {
|
||||
s, err := d.DecodeValue()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c, err := conv.ToInt(s)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
params.ID = c
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return params, err
|
||||
}
|
||||
} else {
|
||||
return params, errors.New("path: id: not specified")
|
||||
}
|
||||
}
|
||||
return params, nil
|
||||
}
|
||||
|
||||
func decodeDrawDoneParams(args [1]string, r *http.Request) (DrawDoneParams, error) {
|
||||
var (
|
||||
params DrawDoneParams
|
||||
)
|
||||
// Decode path: id.
|
||||
{
|
||||
param := args[0]
|
||||
if len(param) > 0 {
|
||||
d := uri.NewPathDecoder(uri.PathDecoderConfig{
|
||||
Param: "id",
|
||||
Value: param,
|
||||
Style: uri.PathStyleSimple,
|
||||
Explode: false,
|
||||
})
|
||||
|
||||
if err := func() error {
|
||||
s, err := d.DecodeValue()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c, err := conv.ToInt(s)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
params.ID = c
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return params, err
|
||||
}
|
||||
} else {
|
||||
return params, errors.New("path: id: not specified")
|
||||
}
|
||||
}
|
||||
return params, nil
|
||||
}
|
||||
|
||||
func decodeDrawStartParams(args [1]string, r *http.Request) (DrawStartParams, error) {
|
||||
var (
|
||||
params DrawStartParams
|
||||
)
|
||||
// Decode path: id.
|
||||
{
|
||||
param := args[0]
|
||||
if len(param) > 0 {
|
||||
d := uri.NewPathDecoder(uri.PathDecoderConfig{
|
||||
Param: "id",
|
||||
Value: param,
|
||||
Style: uri.PathStyleSimple,
|
||||
Explode: false,
|
||||
})
|
||||
|
||||
if err := func() error {
|
||||
s, err := d.DecodeValue()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c, err := conv.ToInt(s)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
params.ID = c
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return params, err
|
||||
}
|
||||
} else {
|
||||
return params, errors.New("path: id: not specified")
|
||||
}
|
||||
}
|
||||
return params, nil
|
||||
}
|
||||
|
||||
func decodeListUsersParams(args [0]string, r *http.Request) (ListUsersParams, error) {
|
||||
var (
|
||||
params ListUsersParams
|
||||
queryArgs = r.URL.Query()
|
||||
)
|
||||
// Decode query: page.
|
||||
{
|
||||
values, ok := queryArgs["page"]
|
||||
if ok {
|
||||
d := uri.NewQueryDecoder(uri.QueryDecoderConfig{
|
||||
Values: values,
|
||||
Style: uri.QueryStyleForm,
|
||||
Explode: true,
|
||||
})
|
||||
|
||||
if err := func() error {
|
||||
var paramsDotPageVal int
|
||||
if err := func() error {
|
||||
s, err := d.DecodeValue()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c, err := conv.ToInt(s)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
paramsDotPageVal = c
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return err
|
||||
}
|
||||
params.Page.SetTo(paramsDotPageVal)
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return params, errors.Wrap(err, "query: page: parse")
|
||||
}
|
||||
}
|
||||
}
|
||||
// Decode query: itemsPerPage.
|
||||
{
|
||||
values, ok := queryArgs["itemsPerPage"]
|
||||
if ok {
|
||||
d := uri.NewQueryDecoder(uri.QueryDecoderConfig{
|
||||
Values: values,
|
||||
Style: uri.QueryStyleForm,
|
||||
Explode: true,
|
||||
})
|
||||
|
||||
if err := func() error {
|
||||
var paramsDotItemsPerPageVal int
|
||||
if err := func() error {
|
||||
s, err := d.DecodeValue()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c, err := conv.ToInt(s)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
paramsDotItemsPerPageVal = c
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return err
|
||||
}
|
||||
params.ItemsPerPage.SetTo(paramsDotItemsPerPageVal)
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return params, errors.Wrap(err, "query: itemsPerPage: parse")
|
||||
}
|
||||
}
|
||||
}
|
||||
return params, nil
|
||||
}
|
||||
|
||||
func decodeReadUsersParams(args [1]string, r *http.Request) (ReadUsersParams, error) {
|
||||
var (
|
||||
params ReadUsersParams
|
||||
)
|
||||
// Decode path: id.
|
||||
{
|
||||
param := args[0]
|
||||
if len(param) > 0 {
|
||||
d := uri.NewPathDecoder(uri.PathDecoderConfig{
|
||||
Param: "id",
|
||||
Value: param,
|
||||
Style: uri.PathStyleSimple,
|
||||
Explode: false,
|
||||
})
|
||||
|
||||
if err := func() error {
|
||||
s, err := d.DecodeValue()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c, err := conv.ToInt(s)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
params.ID = c
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return params, err
|
||||
}
|
||||
} else {
|
||||
return params, errors.New("path: id: not specified")
|
||||
}
|
||||
}
|
||||
return params, nil
|
||||
}
|
||||
|
||||
func decodeUpdateUsersParams(args [1]string, r *http.Request) (UpdateUsersParams, error) {
|
||||
var (
|
||||
params UpdateUsersParams
|
||||
)
|
||||
// Decode path: id.
|
||||
{
|
||||
param := args[0]
|
||||
if len(param) > 0 {
|
||||
d := uri.NewPathDecoder(uri.PathDecoderConfig{
|
||||
Param: "id",
|
||||
Value: param,
|
||||
Style: uri.PathStyleSimple,
|
||||
Explode: false,
|
||||
})
|
||||
|
||||
if err := func() error {
|
||||
s, err := d.DecodeValue()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c, err := conv.ToInt(s)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
params.ID = c
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return params, err
|
||||
}
|
||||
} else {
|
||||
return params, errors.New("path: id: not specified")
|
||||
}
|
||||
}
|
||||
return params, nil
|
||||
}
|
||||
101
ent/ogent/oas_param_gen.go
Normal file
101
ent/ogent/oas_param_gen.go
Normal file
@@ -0,0 +1,101 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
|
||||
type DeleteUsersParams struct {
|
||||
// ID of the Users.
|
||||
ID int
|
||||
}
|
||||
|
||||
type DrawDoneParams struct {
|
||||
ID int
|
||||
}
|
||||
|
||||
type DrawStartParams struct {
|
||||
ID int
|
||||
}
|
||||
|
||||
type ListUsersParams struct {
|
||||
// What page to render.
|
||||
Page OptInt
|
||||
// Item count to render per page.
|
||||
ItemsPerPage OptInt
|
||||
}
|
||||
|
||||
type ReadUsersParams struct {
|
||||
// ID of the Users.
|
||||
ID int
|
||||
}
|
||||
|
||||
type UpdateUsersParams struct {
|
||||
// ID of the Users.
|
||||
ID int
|
||||
}
|
||||
159
ent/ogent/oas_req_dec_gen.go
Normal file
159
ent/ogent/oas_req_dec_gen.go
Normal file
@@ -0,0 +1,159 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
|
||||
func decodeCreateUsersRequest(r *http.Request, span trace.Span) (req CreateUsersReq, err error) {
|
||||
switch ct := r.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
if r.ContentLength == 0 {
|
||||
return req, validate.ErrBodyRequired
|
||||
}
|
||||
|
||||
var request CreateUsersReq
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
written, err := io.Copy(buf, r.Body)
|
||||
if err != nil {
|
||||
return req, err
|
||||
}
|
||||
|
||||
if written == 0 {
|
||||
return req, validate.ErrBodyRequired
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
if err := func() error {
|
||||
if err := request.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return req, errors.Wrap(err, "decode CreateUsers:application/json request")
|
||||
}
|
||||
if err := func() error {
|
||||
if err := request.Validate(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return req, errors.Wrap(err, "validate CreateUsers request")
|
||||
}
|
||||
return request, nil
|
||||
default:
|
||||
return req, validate.InvalidContentType(ct)
|
||||
}
|
||||
}
|
||||
|
||||
func decodeUpdateUsersRequest(r *http.Request, span trace.Span) (req UpdateUsersReq, err error) {
|
||||
switch ct := r.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
if r.ContentLength == 0 {
|
||||
return req, validate.ErrBodyRequired
|
||||
}
|
||||
|
||||
var request UpdateUsersReq
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
written, err := io.Copy(buf, r.Body)
|
||||
if err != nil {
|
||||
return req, err
|
||||
}
|
||||
|
||||
if written == 0 {
|
||||
return req, validate.ErrBodyRequired
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
if err := func() error {
|
||||
if err := request.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return req, errors.Wrap(err, "decode UpdateUsers:application/json request")
|
||||
}
|
||||
if err := func() error {
|
||||
if err := request.Validate(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return req, errors.Wrap(err, "validate UpdateUsers request")
|
||||
}
|
||||
return request, nil
|
||||
default:
|
||||
return req, validate.InvalidContentType(ct)
|
||||
}
|
||||
}
|
||||
87
ent/ogent/oas_req_enc_gen.go
Normal file
87
ent/ogent/oas_req_enc_gen.go
Normal file
@@ -0,0 +1,87 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
|
||||
func encodeCreateUsersRequestJSON(req CreateUsersReq, span trace.Span) (data *jx.Encoder, err error) {
|
||||
e := jx.GetEncoder()
|
||||
|
||||
req.Encode(e)
|
||||
|
||||
return e, nil
|
||||
}
|
||||
|
||||
func encodeUpdateUsersRequestJSON(req UpdateUsersReq, span trace.Span) (data *jx.Encoder, err error) {
|
||||
e := jx.GetEncoder()
|
||||
|
||||
req.Encode(e)
|
||||
|
||||
return e, nil
|
||||
}
|
||||
747
ent/ogent/oas_res_dec_gen.go
Normal file
747
ent/ogent/oas_res_dec_gen.go
Normal file
@@ -0,0 +1,747 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
|
||||
func decodeCreateUsersResponse(resp *http.Response, span trace.Span) (res CreateUsersRes, err error) {
|
||||
switch resp.StatusCode {
|
||||
case 200:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response UsersCreate
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 400:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R400
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 409:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R409
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 500:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R500
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
default:
|
||||
return res, validate.UnexpectedStatusCode(resp.StatusCode)
|
||||
}
|
||||
}
|
||||
|
||||
func decodeDeleteUsersResponse(resp *http.Response, span trace.Span) (res DeleteUsersRes, err error) {
|
||||
switch resp.StatusCode {
|
||||
case 204:
|
||||
return &DeleteUsersNoContent{}, nil
|
||||
case 400:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R400
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 404:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R404
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 409:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R409
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 500:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R500
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
default:
|
||||
return res, validate.UnexpectedStatusCode(resp.StatusCode)
|
||||
}
|
||||
}
|
||||
|
||||
func decodeDrawDoneResponse(resp *http.Response, span trace.Span) (res DrawDoneNoContent, err error) {
|
||||
switch resp.StatusCode {
|
||||
case 204:
|
||||
return DrawDoneNoContent{}, nil
|
||||
default:
|
||||
return res, validate.UnexpectedStatusCode(resp.StatusCode)
|
||||
}
|
||||
}
|
||||
|
||||
func decodeDrawStartResponse(resp *http.Response, span trace.Span) (res DrawStartNoContent, err error) {
|
||||
switch resp.StatusCode {
|
||||
case 204:
|
||||
return DrawStartNoContent{}, nil
|
||||
default:
|
||||
return res, validate.UnexpectedStatusCode(resp.StatusCode)
|
||||
}
|
||||
}
|
||||
|
||||
func decodeListUsersResponse(resp *http.Response, span trace.Span) (res ListUsersRes, err error) {
|
||||
switch resp.StatusCode {
|
||||
case 200:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response ListUsersOKApplicationJSON
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 400:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R400
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 404:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R404
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 409:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R409
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 500:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R500
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
default:
|
||||
return res, validate.UnexpectedStatusCode(resp.StatusCode)
|
||||
}
|
||||
}
|
||||
|
||||
func decodeReadUsersResponse(resp *http.Response, span trace.Span) (res ReadUsersRes, err error) {
|
||||
switch resp.StatusCode {
|
||||
case 200:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response UsersRead
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 400:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R400
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 404:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R404
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 409:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R409
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 500:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R500
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
default:
|
||||
return res, validate.UnexpectedStatusCode(resp.StatusCode)
|
||||
}
|
||||
}
|
||||
|
||||
func decodeUpdateUsersResponse(resp *http.Response, span trace.Span) (res UpdateUsersRes, err error) {
|
||||
switch resp.StatusCode {
|
||||
case 200:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response UsersUpdate
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 400:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R400
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 404:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R404
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 409:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R409
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
case 500:
|
||||
switch ct := resp.Header.Get("Content-Type"); ct {
|
||||
case "application/json":
|
||||
buf := getBuf()
|
||||
defer putBuf(buf)
|
||||
if _, err := io.Copy(buf, resp.Body); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
d := jx.GetDecoder()
|
||||
defer jx.PutDecoder(d)
|
||||
d.ResetBytes(buf.Bytes())
|
||||
|
||||
var response R500
|
||||
if err := func() error {
|
||||
if err := response.Decode(d); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
default:
|
||||
return res, validate.InvalidContentType(ct)
|
||||
}
|
||||
default:
|
||||
return res, validate.UnexpectedStatusCode(resp.StatusCode)
|
||||
}
|
||||
}
|
||||
395
ent/ogent/oas_res_enc_gen.go
Normal file
395
ent/ogent/oas_res_enc_gen.go
Normal file
@@ -0,0 +1,395 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
|
||||
func encodeCreateUsersResponse(response CreateUsersRes, w http.ResponseWriter, span trace.Span) error {
|
||||
switch response := response.(type) {
|
||||
case *UsersCreate:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(200)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R400:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(400)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R409:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(409)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R500:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(500)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
default:
|
||||
return errors.Errorf("/users"+`: unexpected response type: %T`, response)
|
||||
}
|
||||
}
|
||||
|
||||
func encodeDeleteUsersResponse(response DeleteUsersRes, w http.ResponseWriter, span trace.Span) error {
|
||||
switch response := response.(type) {
|
||||
case *DeleteUsersNoContent:
|
||||
w.WriteHeader(204)
|
||||
return nil
|
||||
case *R400:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(400)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R404:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(404)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R409:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(409)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R500:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(500)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
default:
|
||||
return errors.Errorf("/users/{id}"+`: unexpected response type: %T`, response)
|
||||
}
|
||||
}
|
||||
|
||||
func encodeDrawDoneResponse(response DrawDoneNoContent, w http.ResponseWriter, span trace.Span) error {
|
||||
w.WriteHeader(204)
|
||||
return nil
|
||||
}
|
||||
|
||||
func encodeDrawStartResponse(response DrawStartNoContent, w http.ResponseWriter, span trace.Span) error {
|
||||
w.WriteHeader(204)
|
||||
return nil
|
||||
}
|
||||
|
||||
func encodeListUsersResponse(response ListUsersRes, w http.ResponseWriter, span trace.Span) error {
|
||||
switch response := response.(type) {
|
||||
case *ListUsersOKApplicationJSON:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(200)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R400:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(400)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R404:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(404)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R409:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(409)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R500:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(500)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
default:
|
||||
return errors.Errorf("/users"+`: unexpected response type: %T`, response)
|
||||
}
|
||||
}
|
||||
|
||||
func encodeReadUsersResponse(response ReadUsersRes, w http.ResponseWriter, span trace.Span) error {
|
||||
switch response := response.(type) {
|
||||
case *UsersRead:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(200)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R400:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(400)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R404:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(404)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R409:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(409)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R500:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(500)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
default:
|
||||
return errors.Errorf("/users/{id}"+`: unexpected response type: %T`, response)
|
||||
}
|
||||
}
|
||||
|
||||
func encodeUpdateUsersResponse(response UpdateUsersRes, w http.ResponseWriter, span trace.Span) error {
|
||||
switch response := response.(type) {
|
||||
case *UsersUpdate:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(200)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R400:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(400)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R404:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(404)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R409:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(409)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
case *R500:
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(500)
|
||||
e := jx.GetEncoder()
|
||||
defer jx.PutEncoder(e)
|
||||
|
||||
response.Encode(e)
|
||||
if _, err := e.WriteTo(w); err != nil {
|
||||
return errors.Wrap(err, "write")
|
||||
}
|
||||
|
||||
return nil
|
||||
default:
|
||||
return errors.Errorf("/users/{id}"+`: unexpected response type: %T`, response)
|
||||
}
|
||||
}
|
||||
467
ent/ogent/oas_router_gen.go
Normal file
467
ent/ogent/oas_router_gen.go
Normal file
@@ -0,0 +1,467 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
|
||||
func (s *Server) notFound(w http.ResponseWriter, r *http.Request) {
|
||||
s.cfg.NotFound(w, r)
|
||||
}
|
||||
|
||||
// ServeHTTP serves http request as defined by OpenAPI v3 specification,
|
||||
// calling handler that matches the path or returning not found error.
|
||||
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
elem := r.URL.Path
|
||||
if len(elem) == 0 {
|
||||
s.notFound(w, r)
|
||||
return
|
||||
}
|
||||
args := [1]string{}
|
||||
// Static code generated router with unwrapped path search.
|
||||
switch r.Method {
|
||||
case "DELETE":
|
||||
if len(elem) == 0 {
|
||||
break
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/users/"
|
||||
if l := len("/users/"); len(elem) >= l && elem[0:l] == "/users/" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
// Param: "id"
|
||||
// Leaf parameter
|
||||
args[0] = elem
|
||||
elem = ""
|
||||
|
||||
if len(elem) == 0 {
|
||||
// Leaf: DeleteUsers
|
||||
s.handleDeleteUsersRequest([1]string{
|
||||
args[0],
|
||||
}, w, r)
|
||||
|
||||
return
|
||||
}
|
||||
}
|
||||
case "GET":
|
||||
if len(elem) == 0 {
|
||||
break
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/users"
|
||||
if l := len("/users"); len(elem) >= l && elem[0:l] == "/users" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
if len(elem) == 0 {
|
||||
s.handleListUsersRequest([0]string{}, w, r)
|
||||
|
||||
return
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/"
|
||||
if l := len("/"); len(elem) >= l && elem[0:l] == "/" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
// Param: "id"
|
||||
// Leaf parameter
|
||||
args[0] = elem
|
||||
elem = ""
|
||||
|
||||
if len(elem) == 0 {
|
||||
// Leaf: ReadUsers
|
||||
s.handleReadUsersRequest([1]string{
|
||||
args[0],
|
||||
}, w, r)
|
||||
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
case "PATCH":
|
||||
if len(elem) == 0 {
|
||||
break
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/users/"
|
||||
if l := len("/users/"); len(elem) >= l && elem[0:l] == "/users/" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
// Param: "id"
|
||||
// Match until "/"
|
||||
idx := strings.IndexByte(elem, '/')
|
||||
if idx < 0 {
|
||||
idx = len(elem)
|
||||
}
|
||||
args[0] = elem[:idx]
|
||||
elem = elem[idx:]
|
||||
|
||||
if len(elem) == 0 {
|
||||
s.handleUpdateUsersRequest([1]string{
|
||||
args[0],
|
||||
}, w, r)
|
||||
|
||||
return
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/start"
|
||||
if l := len("/start"); len(elem) >= l && elem[0:l] == "/start" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
if len(elem) == 0 {
|
||||
// Leaf: DrawStart
|
||||
s.handleDrawStartRequest([1]string{
|
||||
args[0],
|
||||
}, w, r)
|
||||
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
case "POST":
|
||||
if len(elem) == 0 {
|
||||
break
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/users"
|
||||
if l := len("/users"); len(elem) >= l && elem[0:l] == "/users" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
if len(elem) == 0 {
|
||||
// Leaf: CreateUsers
|
||||
s.handleCreateUsersRequest([0]string{}, w, r)
|
||||
|
||||
return
|
||||
}
|
||||
}
|
||||
case "PUT":
|
||||
if len(elem) == 0 {
|
||||
break
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/users/"
|
||||
if l := len("/users/"); len(elem) >= l && elem[0:l] == "/users/" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
// Param: "id"
|
||||
// Match until "/"
|
||||
idx := strings.IndexByte(elem, '/')
|
||||
if idx < 0 {
|
||||
idx = len(elem)
|
||||
}
|
||||
args[0] = elem[:idx]
|
||||
elem = elem[idx:]
|
||||
|
||||
if len(elem) == 0 {
|
||||
break
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/d"
|
||||
if l := len("/d"); len(elem) >= l && elem[0:l] == "/d" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
if len(elem) == 0 {
|
||||
// Leaf: DrawDone
|
||||
s.handleDrawDoneRequest([1]string{
|
||||
args[0],
|
||||
}, w, r)
|
||||
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
s.notFound(w, r)
|
||||
}
|
||||
|
||||
// Route is route object.
|
||||
type Route struct {
|
||||
name string
|
||||
count int
|
||||
args [1]string
|
||||
}
|
||||
|
||||
// OperationID returns OpenAPI operationId.
|
||||
func (r Route) OperationID() string {
|
||||
return r.name
|
||||
}
|
||||
|
||||
// Args returns parsed arguments.
|
||||
func (r Route) Args() []string {
|
||||
return r.args[:r.count]
|
||||
}
|
||||
|
||||
// FindRoute finds Route for given method and path.
|
||||
func (s *Server) FindRoute(method, path string) (r Route, _ bool) {
|
||||
var (
|
||||
args = [1]string{}
|
||||
elem = path
|
||||
)
|
||||
r.args = args
|
||||
if elem == "" {
|
||||
return r, false
|
||||
}
|
||||
|
||||
// Static code generated router with unwrapped path search.
|
||||
switch method {
|
||||
case "DELETE":
|
||||
if len(elem) == 0 {
|
||||
break
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/users/"
|
||||
if l := len("/users/"); len(elem) >= l && elem[0:l] == "/users/" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
// Param: "id"
|
||||
// Leaf parameter
|
||||
args[0] = elem
|
||||
elem = ""
|
||||
|
||||
if len(elem) == 0 {
|
||||
// Leaf: DeleteUsers
|
||||
r.name = "DeleteUsers"
|
||||
r.args = args
|
||||
r.count = 1
|
||||
return r, true
|
||||
}
|
||||
}
|
||||
case "GET":
|
||||
if len(elem) == 0 {
|
||||
break
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/users"
|
||||
if l := len("/users"); len(elem) >= l && elem[0:l] == "/users" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
if len(elem) == 0 {
|
||||
r.name = "ListUsers"
|
||||
r.args = args
|
||||
r.count = 0
|
||||
return r, true
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/"
|
||||
if l := len("/"); len(elem) >= l && elem[0:l] == "/" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
// Param: "id"
|
||||
// Leaf parameter
|
||||
args[0] = elem
|
||||
elem = ""
|
||||
|
||||
if len(elem) == 0 {
|
||||
// Leaf: ReadUsers
|
||||
r.name = "ReadUsers"
|
||||
r.args = args
|
||||
r.count = 1
|
||||
return r, true
|
||||
}
|
||||
}
|
||||
}
|
||||
case "PATCH":
|
||||
if len(elem) == 0 {
|
||||
break
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/users/"
|
||||
if l := len("/users/"); len(elem) >= l && elem[0:l] == "/users/" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
// Param: "id"
|
||||
// Match until "/"
|
||||
idx := strings.IndexByte(elem, '/')
|
||||
if idx < 0 {
|
||||
idx = len(elem)
|
||||
}
|
||||
args[0] = elem[:idx]
|
||||
elem = elem[idx:]
|
||||
|
||||
if len(elem) == 0 {
|
||||
r.name = "UpdateUsers"
|
||||
r.args = args
|
||||
r.count = 1
|
||||
return r, true
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/start"
|
||||
if l := len("/start"); len(elem) >= l && elem[0:l] == "/start" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
if len(elem) == 0 {
|
||||
// Leaf: DrawStart
|
||||
r.name = "DrawStart"
|
||||
r.args = args
|
||||
r.count = 1
|
||||
return r, true
|
||||
}
|
||||
}
|
||||
}
|
||||
case "POST":
|
||||
if len(elem) == 0 {
|
||||
break
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/users"
|
||||
if l := len("/users"); len(elem) >= l && elem[0:l] == "/users" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
if len(elem) == 0 {
|
||||
// Leaf: CreateUsers
|
||||
r.name = "CreateUsers"
|
||||
r.args = args
|
||||
r.count = 0
|
||||
return r, true
|
||||
}
|
||||
}
|
||||
case "PUT":
|
||||
if len(elem) == 0 {
|
||||
break
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/users/"
|
||||
if l := len("/users/"); len(elem) >= l && elem[0:l] == "/users/" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
// Param: "id"
|
||||
// Match until "/"
|
||||
idx := strings.IndexByte(elem, '/')
|
||||
if idx < 0 {
|
||||
idx = len(elem)
|
||||
}
|
||||
args[0] = elem[:idx]
|
||||
elem = elem[idx:]
|
||||
|
||||
if len(elem) == 0 {
|
||||
break
|
||||
}
|
||||
switch elem[0] {
|
||||
case '/': // Prefix: "/d"
|
||||
if l := len("/d"); len(elem) >= l && elem[0:l] == "/d" {
|
||||
elem = elem[l:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
if len(elem) == 0 {
|
||||
// Leaf: DrawDone
|
||||
r.name = "DrawDone"
|
||||
r.args = args
|
||||
r.count = 1
|
||||
return r, true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return r, false
|
||||
}
|
||||
497
ent/ogent/oas_schemas_gen.go
Normal file
497
ent/ogent/oas_schemas_gen.go
Normal file
@@ -0,0 +1,497 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
|
||||
type CreateUsersReq struct {
|
||||
User string "json:\"user\""
|
||||
Chara OptString "json:\"chara\""
|
||||
Skill OptInt "json:\"skill\""
|
||||
Hp OptInt "json:\"hp\""
|
||||
Attack OptInt "json:\"attack\""
|
||||
Defense OptInt "json:\"defense\""
|
||||
Critical OptInt "json:\"critical\""
|
||||
Battle OptInt "json:\"battle\""
|
||||
Win OptInt "json:\"win\""
|
||||
Day OptInt "json:\"day\""
|
||||
Percentage OptFloat64 "json:\"percentage\""
|
||||
Limit OptBool "json:\"limit\""
|
||||
Status OptString "json:\"status\""
|
||||
Comment OptString "json:\"comment\""
|
||||
CreatedAt OptDateTime "json:\"created_at\""
|
||||
Next OptString "json:\"next\""
|
||||
UpdatedAt OptDateTime "json:\"updated_at\""
|
||||
URL OptString "json:\"url\""
|
||||
}
|
||||
|
||||
// DeleteUsersNoContent is response for DeleteUsers operation.
|
||||
type DeleteUsersNoContent struct{}
|
||||
|
||||
func (*DeleteUsersNoContent) deleteUsersRes() {}
|
||||
|
||||
// DrawDoneNoContent is response for DrawDone operation.
|
||||
type DrawDoneNoContent struct{}
|
||||
|
||||
// DrawStartNoContent is response for DrawStart operation.
|
||||
type DrawStartNoContent struct{}
|
||||
|
||||
type ListUsersOKApplicationJSON []UsersList
|
||||
|
||||
func (ListUsersOKApplicationJSON) listUsersRes() {}
|
||||
|
||||
// NewOptBool returns new OptBool with value set to v.
|
||||
func NewOptBool(v bool) OptBool {
|
||||
return OptBool{
|
||||
Value: v,
|
||||
Set: true,
|
||||
}
|
||||
}
|
||||
|
||||
// OptBool is optional bool.
|
||||
type OptBool struct {
|
||||
Value bool
|
||||
Set bool
|
||||
}
|
||||
|
||||
// IsSet returns true if OptBool was set.
|
||||
func (o OptBool) IsSet() bool { return o.Set }
|
||||
|
||||
// Reset unsets value.
|
||||
func (o *OptBool) Reset() {
|
||||
var v bool
|
||||
o.Value = v
|
||||
o.Set = false
|
||||
}
|
||||
|
||||
// SetTo sets value to v.
|
||||
func (o *OptBool) SetTo(v bool) {
|
||||
o.Set = true
|
||||
o.Value = v
|
||||
}
|
||||
|
||||
// Get returns value and boolean that denotes whether value was set.
|
||||
func (o OptBool) Get() (v bool, ok bool) {
|
||||
if !o.Set {
|
||||
return v, false
|
||||
}
|
||||
return o.Value, true
|
||||
}
|
||||
|
||||
// Or returns value if set, or given parameter if does not.
|
||||
func (o OptBool) Or(d bool) bool {
|
||||
if v, ok := o.Get(); ok {
|
||||
return v
|
||||
}
|
||||
return d
|
||||
}
|
||||
|
||||
// NewOptDateTime returns new OptDateTime with value set to v.
|
||||
func NewOptDateTime(v time.Time) OptDateTime {
|
||||
return OptDateTime{
|
||||
Value: v,
|
||||
Set: true,
|
||||
}
|
||||
}
|
||||
|
||||
// OptDateTime is optional time.Time.
|
||||
type OptDateTime struct {
|
||||
Value time.Time
|
||||
Set bool
|
||||
}
|
||||
|
||||
// IsSet returns true if OptDateTime was set.
|
||||
func (o OptDateTime) IsSet() bool { return o.Set }
|
||||
|
||||
// Reset unsets value.
|
||||
func (o *OptDateTime) Reset() {
|
||||
var v time.Time
|
||||
o.Value = v
|
||||
o.Set = false
|
||||
}
|
||||
|
||||
// SetTo sets value to v.
|
||||
func (o *OptDateTime) SetTo(v time.Time) {
|
||||
o.Set = true
|
||||
o.Value = v
|
||||
}
|
||||
|
||||
// Get returns value and boolean that denotes whether value was set.
|
||||
func (o OptDateTime) Get() (v time.Time, ok bool) {
|
||||
if !o.Set {
|
||||
return v, false
|
||||
}
|
||||
return o.Value, true
|
||||
}
|
||||
|
||||
// Or returns value if set, or given parameter if does not.
|
||||
func (o OptDateTime) Or(d time.Time) time.Time {
|
||||
if v, ok := o.Get(); ok {
|
||||
return v
|
||||
}
|
||||
return d
|
||||
}
|
||||
|
||||
// NewOptFloat64 returns new OptFloat64 with value set to v.
|
||||
func NewOptFloat64(v float64) OptFloat64 {
|
||||
return OptFloat64{
|
||||
Value: v,
|
||||
Set: true,
|
||||
}
|
||||
}
|
||||
|
||||
// OptFloat64 is optional float64.
|
||||
type OptFloat64 struct {
|
||||
Value float64
|
||||
Set bool
|
||||
}
|
||||
|
||||
// IsSet returns true if OptFloat64 was set.
|
||||
func (o OptFloat64) IsSet() bool { return o.Set }
|
||||
|
||||
// Reset unsets value.
|
||||
func (o *OptFloat64) Reset() {
|
||||
var v float64
|
||||
o.Value = v
|
||||
o.Set = false
|
||||
}
|
||||
|
||||
// SetTo sets value to v.
|
||||
func (o *OptFloat64) SetTo(v float64) {
|
||||
o.Set = true
|
||||
o.Value = v
|
||||
}
|
||||
|
||||
// Get returns value and boolean that denotes whether value was set.
|
||||
func (o OptFloat64) Get() (v float64, ok bool) {
|
||||
if !o.Set {
|
||||
return v, false
|
||||
}
|
||||
return o.Value, true
|
||||
}
|
||||
|
||||
// Or returns value if set, or given parameter if does not.
|
||||
func (o OptFloat64) Or(d float64) float64 {
|
||||
if v, ok := o.Get(); ok {
|
||||
return v
|
||||
}
|
||||
return d
|
||||
}
|
||||
|
||||
// NewOptInt returns new OptInt with value set to v.
|
||||
func NewOptInt(v int) OptInt {
|
||||
return OptInt{
|
||||
Value: v,
|
||||
Set: true,
|
||||
}
|
||||
}
|
||||
|
||||
// OptInt is optional int.
|
||||
type OptInt struct {
|
||||
Value int
|
||||
Set bool
|
||||
}
|
||||
|
||||
// IsSet returns true if OptInt was set.
|
||||
func (o OptInt) IsSet() bool { return o.Set }
|
||||
|
||||
// Reset unsets value.
|
||||
func (o *OptInt) Reset() {
|
||||
var v int
|
||||
o.Value = v
|
||||
o.Set = false
|
||||
}
|
||||
|
||||
// SetTo sets value to v.
|
||||
func (o *OptInt) SetTo(v int) {
|
||||
o.Set = true
|
||||
o.Value = v
|
||||
}
|
||||
|
||||
// Get returns value and boolean that denotes whether value was set.
|
||||
func (o OptInt) Get() (v int, ok bool) {
|
||||
if !o.Set {
|
||||
return v, false
|
||||
}
|
||||
return o.Value, true
|
||||
}
|
||||
|
||||
// Or returns value if set, or given parameter if does not.
|
||||
func (o OptInt) Or(d int) int {
|
||||
if v, ok := o.Get(); ok {
|
||||
return v
|
||||
}
|
||||
return d
|
||||
}
|
||||
|
||||
// NewOptString returns new OptString with value set to v.
|
||||
func NewOptString(v string) OptString {
|
||||
return OptString{
|
||||
Value: v,
|
||||
Set: true,
|
||||
}
|
||||
}
|
||||
|
||||
// OptString is optional string.
|
||||
type OptString struct {
|
||||
Value string
|
||||
Set bool
|
||||
}
|
||||
|
||||
// IsSet returns true if OptString was set.
|
||||
func (o OptString) IsSet() bool { return o.Set }
|
||||
|
||||
// Reset unsets value.
|
||||
func (o *OptString) Reset() {
|
||||
var v string
|
||||
o.Value = v
|
||||
o.Set = false
|
||||
}
|
||||
|
||||
// SetTo sets value to v.
|
||||
func (o *OptString) SetTo(v string) {
|
||||
o.Set = true
|
||||
o.Value = v
|
||||
}
|
||||
|
||||
// Get returns value and boolean that denotes whether value was set.
|
||||
func (o OptString) Get() (v string, ok bool) {
|
||||
if !o.Set {
|
||||
return v, false
|
||||
}
|
||||
return o.Value, true
|
||||
}
|
||||
|
||||
// Or returns value if set, or given parameter if does not.
|
||||
func (o OptString) Or(d string) string {
|
||||
if v, ok := o.Get(); ok {
|
||||
return v
|
||||
}
|
||||
return d
|
||||
}
|
||||
|
||||
type R400 struct {
|
||||
Code int "json:\"code\""
|
||||
Status string "json:\"status\""
|
||||
Errors jx.Raw "json:\"errors\""
|
||||
}
|
||||
|
||||
func (*R400) createUsersRes() {}
|
||||
func (*R400) deleteUsersRes() {}
|
||||
func (*R400) listUsersRes() {}
|
||||
func (*R400) readUsersRes() {}
|
||||
func (*R400) updateUsersRes() {}
|
||||
|
||||
type R404 struct {
|
||||
Code int "json:\"code\""
|
||||
Status string "json:\"status\""
|
||||
Errors jx.Raw "json:\"errors\""
|
||||
}
|
||||
|
||||
func (*R404) deleteUsersRes() {}
|
||||
func (*R404) listUsersRes() {}
|
||||
func (*R404) readUsersRes() {}
|
||||
func (*R404) updateUsersRes() {}
|
||||
|
||||
type R409 struct {
|
||||
Code int "json:\"code\""
|
||||
Status string "json:\"status\""
|
||||
Errors jx.Raw "json:\"errors\""
|
||||
}
|
||||
|
||||
func (*R409) createUsersRes() {}
|
||||
func (*R409) deleteUsersRes() {}
|
||||
func (*R409) listUsersRes() {}
|
||||
func (*R409) readUsersRes() {}
|
||||
func (*R409) updateUsersRes() {}
|
||||
|
||||
type R500 struct {
|
||||
Code int "json:\"code\""
|
||||
Status string "json:\"status\""
|
||||
Errors jx.Raw "json:\"errors\""
|
||||
}
|
||||
|
||||
func (*R500) createUsersRes() {}
|
||||
func (*R500) deleteUsersRes() {}
|
||||
func (*R500) listUsersRes() {}
|
||||
func (*R500) readUsersRes() {}
|
||||
func (*R500) updateUsersRes() {}
|
||||
|
||||
type UpdateUsersReq struct {
|
||||
Hp OptInt "json:\"hp\""
|
||||
Attack OptInt "json:\"attack\""
|
||||
Defense OptInt "json:\"defense\""
|
||||
Critical OptInt "json:\"critical\""
|
||||
Battle OptInt "json:\"battle\""
|
||||
Win OptInt "json:\"win\""
|
||||
Day OptInt "json:\"day\""
|
||||
Percentage OptFloat64 "json:\"percentage\""
|
||||
Limit OptBool "json:\"limit\""
|
||||
Comment OptString "json:\"comment\""
|
||||
Next OptString "json:\"next\""
|
||||
UpdatedAt OptDateTime "json:\"updated_at\""
|
||||
}
|
||||
|
||||
// Ref: #/components/schemas/UsersCreate
|
||||
type UsersCreate struct {
|
||||
ID int "json:\"id\""
|
||||
User string "json:\"user\""
|
||||
Chara OptString "json:\"chara\""
|
||||
Skill OptInt "json:\"skill\""
|
||||
Hp OptInt "json:\"hp\""
|
||||
Attack OptInt "json:\"attack\""
|
||||
Defense OptInt "json:\"defense\""
|
||||
Critical OptInt "json:\"critical\""
|
||||
Battle OptInt "json:\"battle\""
|
||||
Win OptInt "json:\"win\""
|
||||
Day OptInt "json:\"day\""
|
||||
Percentage OptFloat64 "json:\"percentage\""
|
||||
Limit OptBool "json:\"limit\""
|
||||
Status OptString "json:\"status\""
|
||||
Comment OptString "json:\"comment\""
|
||||
CreatedAt OptDateTime "json:\"created_at\""
|
||||
Next OptString "json:\"next\""
|
||||
UpdatedAt OptDateTime "json:\"updated_at\""
|
||||
URL OptString "json:\"url\""
|
||||
}
|
||||
|
||||
func (*UsersCreate) createUsersRes() {}
|
||||
|
||||
// Ref: #/components/schemas/UsersList
|
||||
type UsersList struct {
|
||||
ID int "json:\"id\""
|
||||
User string "json:\"user\""
|
||||
Chara OptString "json:\"chara\""
|
||||
Skill OptInt "json:\"skill\""
|
||||
Hp OptInt "json:\"hp\""
|
||||
Attack OptInt "json:\"attack\""
|
||||
Defense OptInt "json:\"defense\""
|
||||
Critical OptInt "json:\"critical\""
|
||||
Battle OptInt "json:\"battle\""
|
||||
Win OptInt "json:\"win\""
|
||||
Day OptInt "json:\"day\""
|
||||
Percentage OptFloat64 "json:\"percentage\""
|
||||
Limit OptBool "json:\"limit\""
|
||||
Status OptString "json:\"status\""
|
||||
Comment OptString "json:\"comment\""
|
||||
CreatedAt OptDateTime "json:\"created_at\""
|
||||
Next OptString "json:\"next\""
|
||||
UpdatedAt OptDateTime "json:\"updated_at\""
|
||||
URL OptString "json:\"url\""
|
||||
}
|
||||
|
||||
// Ref: #/components/schemas/UsersRead
|
||||
type UsersRead struct {
|
||||
ID int "json:\"id\""
|
||||
User string "json:\"user\""
|
||||
Chara OptString "json:\"chara\""
|
||||
Skill OptInt "json:\"skill\""
|
||||
Hp OptInt "json:\"hp\""
|
||||
Attack OptInt "json:\"attack\""
|
||||
Defense OptInt "json:\"defense\""
|
||||
Critical OptInt "json:\"critical\""
|
||||
Battle OptInt "json:\"battle\""
|
||||
Win OptInt "json:\"win\""
|
||||
Day OptInt "json:\"day\""
|
||||
Percentage OptFloat64 "json:\"percentage\""
|
||||
Limit OptBool "json:\"limit\""
|
||||
Status OptString "json:\"status\""
|
||||
Comment OptString "json:\"comment\""
|
||||
CreatedAt OptDateTime "json:\"created_at\""
|
||||
Next OptString "json:\"next\""
|
||||
UpdatedAt OptDateTime "json:\"updated_at\""
|
||||
URL OptString "json:\"url\""
|
||||
}
|
||||
|
||||
func (*UsersRead) readUsersRes() {}
|
||||
|
||||
// Ref: #/components/schemas/UsersUpdate
|
||||
type UsersUpdate struct {
|
||||
ID int "json:\"id\""
|
||||
User string "json:\"user\""
|
||||
Chara OptString "json:\"chara\""
|
||||
Skill OptInt "json:\"skill\""
|
||||
Hp OptInt "json:\"hp\""
|
||||
Attack OptInt "json:\"attack\""
|
||||
Defense OptInt "json:\"defense\""
|
||||
Critical OptInt "json:\"critical\""
|
||||
Battle OptInt "json:\"battle\""
|
||||
Win OptInt "json:\"win\""
|
||||
Day OptInt "json:\"day\""
|
||||
Percentage OptFloat64 "json:\"percentage\""
|
||||
Limit OptBool "json:\"limit\""
|
||||
Status OptString "json:\"status\""
|
||||
Comment OptString "json:\"comment\""
|
||||
CreatedAt OptDateTime "json:\"created_at\""
|
||||
Next OptString "json:\"next\""
|
||||
UpdatedAt OptDateTime "json:\"updated_at\""
|
||||
URL OptString "json:\"url\""
|
||||
}
|
||||
|
||||
func (*UsersUpdate) updateUsersRes() {}
|
||||
71
ent/ogent/oas_security_gen.go
Normal file
71
ent/ogent/oas_security_gen.go
Normal file
@@ -0,0 +1,71 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
142
ent/ogent/oas_server_gen.go
Normal file
142
ent/ogent/oas_server_gen.go
Normal file
@@ -0,0 +1,142 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
|
||||
// Handler handles operations described by OpenAPI v3 specification.
|
||||
type Handler interface {
|
||||
// CreateUsers implements createUsers operation.
|
||||
//
|
||||
// Creates a new Users and persists it to storage.
|
||||
//
|
||||
// POST /users
|
||||
CreateUsers(ctx context.Context, req CreateUsersReq) (CreateUsersRes, error)
|
||||
// DeleteUsers implements deleteUsers operation.
|
||||
//
|
||||
// Deletes the Users with the requested ID.
|
||||
//
|
||||
// DELETE /users/{id}
|
||||
DeleteUsers(ctx context.Context, params DeleteUsersParams) (DeleteUsersRes, error)
|
||||
// DrawDone implements drawDone operation.
|
||||
//
|
||||
// PUT /users/{id}/d
|
||||
DrawDone(ctx context.Context, params DrawDoneParams) (DrawDoneNoContent, error)
|
||||
// DrawStart implements drawStart operation.
|
||||
//
|
||||
// PATCH /users/{id}/start
|
||||
DrawStart(ctx context.Context, params DrawStartParams) (DrawStartNoContent, error)
|
||||
// ListUsers implements listUsers operation.
|
||||
//
|
||||
// List Users.
|
||||
//
|
||||
// GET /users
|
||||
ListUsers(ctx context.Context, params ListUsersParams) (ListUsersRes, error)
|
||||
// ReadUsers implements readUsers operation.
|
||||
//
|
||||
// Finds the Users with the requested ID and returns it.
|
||||
//
|
||||
// GET /users/{id}
|
||||
ReadUsers(ctx context.Context, params ReadUsersParams) (ReadUsersRes, error)
|
||||
// UpdateUsers implements updateUsers operation.
|
||||
//
|
||||
// Updates a Users and persists changes to storage.
|
||||
//
|
||||
// PATCH /users/{id}
|
||||
UpdateUsers(ctx context.Context, req UpdateUsersReq, params UpdateUsersParams) (UpdateUsersRes, error)
|
||||
}
|
||||
|
||||
// Server implements http server based on OpenAPI v3 specification and
|
||||
// calls Handler to handle requests.
|
||||
type Server struct {
|
||||
h Handler
|
||||
cfg config
|
||||
|
||||
requests metric.Int64Counter
|
||||
errors metric.Int64Counter
|
||||
duration metric.Int64Histogram
|
||||
}
|
||||
|
||||
func NewServer(h Handler, opts ...Option) (*Server, error) {
|
||||
s := &Server{
|
||||
h: h,
|
||||
cfg: newConfig(opts...),
|
||||
}
|
||||
var err error
|
||||
if s.requests, err = s.cfg.Meter.NewInt64Counter(otelogen.ServerRequestCount); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.errors, err = s.cfg.Meter.NewInt64Counter(otelogen.ServerErrorsCount); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.duration, err = s.cfg.Meter.NewInt64Histogram(otelogen.ServerDuration); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s, nil
|
||||
}
|
||||
135
ent/ogent/oas_unimplemented_gen.go
Normal file
135
ent/ogent/oas_unimplemented_gen.go
Normal file
@@ -0,0 +1,135 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/bits"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"github.com/go-faster/jx"
|
||||
"github.com/google/uuid"
|
||||
"github.com/ogen-go/ogen/conv"
|
||||
ht "github.com/ogen-go/ogen/http"
|
||||
"github.com/ogen-go/ogen/json"
|
||||
"github.com/ogen-go/ogen/otelogen"
|
||||
"github.com/ogen-go/ogen/uri"
|
||||
"github.com/ogen-go/ogen/validate"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// No-op definition for keeping imports.
|
||||
var (
|
||||
_ = context.Background()
|
||||
_ = fmt.Stringer(nil)
|
||||
_ = strings.Builder{}
|
||||
_ = errors.Is
|
||||
_ = sort.Ints
|
||||
_ = http.MethodGet
|
||||
_ = io.Copy
|
||||
_ = json.Marshal
|
||||
_ = bytes.NewReader
|
||||
_ = strconv.ParseInt
|
||||
_ = time.Time{}
|
||||
_ = conv.ToInt32
|
||||
_ = uuid.UUID{}
|
||||
_ = uri.PathEncoder{}
|
||||
_ = url.URL{}
|
||||
_ = math.Mod
|
||||
_ = bits.LeadingZeros64
|
||||
_ = big.Rat{}
|
||||
_ = validate.Int{}
|
||||
_ = ht.NewRequest
|
||||
_ = net.IP{}
|
||||
_ = otelogen.Version
|
||||
_ = attribute.KeyValue{}
|
||||
_ = trace.TraceIDFromHex
|
||||
_ = otel.GetTracerProvider
|
||||
_ = metric.NewNoopMeterProvider
|
||||
_ = regexp.MustCompile
|
||||
_ = jx.Null
|
||||
_ = sync.Pool{}
|
||||
_ = codes.Unset
|
||||
)
|
||||
|
||||
var _ Handler = UnimplementedHandler{}
|
||||
|
||||
// UnimplementedHandler is no-op Handler which returns http.ErrNotImplemented.
|
||||
type UnimplementedHandler struct{}
|
||||
|
||||
// CreateUsers implements createUsers operation.
|
||||
//
|
||||
// Creates a new Users and persists it to storage.
|
||||
//
|
||||
// POST /users
|
||||
func (UnimplementedHandler) CreateUsers(ctx context.Context, req CreateUsersReq) (r CreateUsersRes, _ error) {
|
||||
return r, ht.ErrNotImplemented
|
||||
}
|
||||
|
||||
// DeleteUsers implements deleteUsers operation.
|
||||
//
|
||||
// Deletes the Users with the requested ID.
|
||||
//
|
||||
// DELETE /users/{id}
|
||||
func (UnimplementedHandler) DeleteUsers(ctx context.Context, params DeleteUsersParams) (r DeleteUsersRes, _ error) {
|
||||
return r, ht.ErrNotImplemented
|
||||
}
|
||||
|
||||
// DrawDone implements drawDone operation.
|
||||
//
|
||||
// PUT /users/{id}/d
|
||||
func (UnimplementedHandler) DrawDone(ctx context.Context, params DrawDoneParams) (r DrawDoneNoContent, _ error) {
|
||||
return r, ht.ErrNotImplemented
|
||||
}
|
||||
|
||||
// DrawStart implements drawStart operation.
|
||||
//
|
||||
// PATCH /users/{id}/start
|
||||
func (UnimplementedHandler) DrawStart(ctx context.Context, params DrawStartParams) (r DrawStartNoContent, _ error) {
|
||||
return r, ht.ErrNotImplemented
|
||||
}
|
||||
|
||||
// ListUsers implements listUsers operation.
|
||||
//
|
||||
// List Users.
|
||||
//
|
||||
// GET /users
|
||||
func (UnimplementedHandler) ListUsers(ctx context.Context, params ListUsersParams) (r ListUsersRes, _ error) {
|
||||
return r, ht.ErrNotImplemented
|
||||
}
|
||||
|
||||
// ReadUsers implements readUsers operation.
|
||||
//
|
||||
// Finds the Users with the requested ID and returns it.
|
||||
//
|
||||
// GET /users/{id}
|
||||
func (UnimplementedHandler) ReadUsers(ctx context.Context, params ReadUsersParams) (r ReadUsersRes, _ error) {
|
||||
return r, ht.ErrNotImplemented
|
||||
}
|
||||
|
||||
// UpdateUsers implements updateUsers operation.
|
||||
//
|
||||
// Updates a Users and persists changes to storage.
|
||||
//
|
||||
// PATCH /users/{id}
|
||||
func (UnimplementedHandler) UpdateUsers(ctx context.Context, req UpdateUsersReq, params UpdateUsersParams) (r UpdateUsersRes, _ error) {
|
||||
return r, ht.ErrNotImplemented
|
||||
}
|
||||
252
ent/ogent/oas_validators_gen.go
Normal file
252
ent/ogent/oas_validators_gen.go
Normal file
@@ -0,0 +1,252 @@
|
||||
// Code generated by ogen, DO NOT EDIT.
|
||||
|
||||
package ogent
|
||||