mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 10:41:03 +01:00
96 lines
3.1 KiB
Markdown
96 lines
3.1 KiB
Markdown
```go
|
|
app.PartyConfigure("/api", errors.NewParty[CreateRequest, CreateResponse, ListFilter]().
|
|
Create(service.Create).
|
|
Update(service.Update).
|
|
Delete(service.DeleteWithFeedback).
|
|
List(service.ListPaginated).
|
|
Get(service.GetByID).Validation(validateCreateRequest))
|
|
```
|
|
|
|
```go
|
|
type Party[T, R, F any] struct {
|
|
validators []ContextRequestFunc[T]
|
|
filterValidators []ContextRequestFunc[F]
|
|
filterIntercepters []ContextResponseFunc[F, R]
|
|
intercepters []ContextResponseFunc[T, R]
|
|
|
|
serviceCreateFunc func(stdContext.Context, T) (R, error)
|
|
serviceUpdateFunc func(stdContext.Context, T) (bool, error)
|
|
serviceDeleteFunc func(stdContext.Context, string) (bool, error)
|
|
serviceListFunc func(stdContext.Context, pagination.ListOptions, F /* filter options */) ([]R, int, error)
|
|
serviceGetFunc func(stdContext.Context, string) (R, error)
|
|
}
|
|
|
|
func (p *Party[T, R, F]) Configure(r router.Party) {
|
|
if p.serviceCreateFunc != nil {
|
|
r.Post("/", Validation(p.validators...), Intercept(p.intercepters...), CreateHandler(p.serviceCreateFunc))
|
|
}
|
|
|
|
if p.serviceUpdateFunc != nil {
|
|
r.Put("/{id:string}", Validation(p.validators...), Intercept(p.intercepters...), NoContentOrNotModifiedHandler(p.serviceUpdateFunc))
|
|
}
|
|
|
|
if p.serviceListFunc != nil {
|
|
r.Post("/list", Validation(p.filterValidators...), Intercept(p.filterIntercepters...), ListHandler(p.serviceListFunc))
|
|
}
|
|
|
|
if p.serviceDeleteFunc != nil {
|
|
r.Delete("/{id:string}", NoContentOrNotModifiedHandler(p.serviceDeleteFunc, PathParam[string]("id")))
|
|
}
|
|
|
|
if p.serviceGetFunc != nil {
|
|
r.Get("/{id:string}", Handler(p.serviceGetFunc, PathParam[string]("id")))
|
|
}
|
|
}
|
|
|
|
func NewParty[T, R, F any]() *Party[T, R, F] {
|
|
return &Party[T, R, F]{}
|
|
}
|
|
|
|
func (p *Party[T, R, F]) Validation(validators ...ContextRequestFunc[T]) *Party[T, R, F] {
|
|
p.validators = append(p.validators, validators...)
|
|
return p
|
|
}
|
|
|
|
func (p *Party[T, R, F]) FilterValidation(filterValidators ...ContextRequestFunc[F]) *Party[T, R, F] {
|
|
p.filterValidators = append(p.filterValidators, filterValidators...)
|
|
return p
|
|
}
|
|
|
|
func (p *Party[T, R, F]) Intercept(intercepters ...ContextResponseFunc[T, R]) *Party[T, R, F] {
|
|
p.intercepters = append(p.intercepters, intercepters...)
|
|
return p
|
|
}
|
|
|
|
func (p *Party[T, R, F]) FilterIntercept(filterIntercepters ...ContextResponseFunc[F, R]) *Party[T, R, F] {
|
|
p.filterIntercepters = append(p.filterIntercepters, filterIntercepters...)
|
|
return p
|
|
}
|
|
|
|
func (p *Party[T, R, F]) Create(fn func(stdContext.Context, T) (R, error)) *Party[T, R, F] {
|
|
p.serviceCreateFunc = fn
|
|
return p
|
|
}
|
|
|
|
func (p *Party[T, R, F]) Update(fn func(stdContext.Context, T) (bool, error)) *Party[T, R, F] {
|
|
p.serviceUpdateFunc = fn
|
|
return p
|
|
}
|
|
|
|
func (p *Party[T, R, F]) Delete(fn func(stdContext.Context, string) (bool, error)) *Party[T, R, F] {
|
|
p.serviceDeleteFunc = fn
|
|
return p
|
|
}
|
|
|
|
func (p *Party[T, R, F]) List(fn func(stdContext.Context, pagination.ListOptions, F /* filter options */) ([]R, int, error)) *Party[T, R, F] {
|
|
p.serviceListFunc = fn
|
|
return p
|
|
}
|
|
|
|
func (p *Party[T, R, F]) Get(fn func(stdContext.Context, string) (R, error)) *Party[T, R, F] {
|
|
p.serviceGetFunc = fn
|
|
return p
|
|
}
|
|
|
|
```
|