Compare commits

...

5 Commits

17 changed files with 315 additions and 530 deletions

@ -400,6 +400,58 @@ components:
ID:
type: integer
format: int64
MapfixCreate:
required:
- DisplayName
- Creator
- GameID
- AssetID
- AssetVersion
- TargetAssetID
type: object
properties:
DisplayName:
type: string
maxLength: 128
Creator:
type: string
maxLength: 128
GameID:
type: integer
format: int32
AssetID:
type: integer
format: int64
AssetVersion:
type: integer
format: int64
TargetAssetID:
type: integer
format: int64
SubmissionCreate:
required:
- DisplayName
- Creator
- GameID
- AssetID
- AssetVersion
type: object
properties:
DisplayName:
type: string
maxLength: 128
Creator:
type: string
maxLength: 128
GameID:
type: integer
format: int32
AssetID:
type: integer
format: int64
AssetVersion:
type: integer
format: int64
Script:
required:
- ID

@ -193,7 +193,7 @@ paths:
schema:
$ref: "#/components/schemas/Error"
post:
summary: Create new mapfix
summary: Trigger the validator to create a mapfix
operationId: createMapfix
tags:
- Mapfixes
@ -202,14 +202,14 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/MapfixCreate'
$ref: '#/components/schemas/MapfixTriggerCreate'
responses:
"201":
description: Successful response
content:
application/json:
schema:
$ref: "#/components/schemas/Id"
$ref: "#/components/schemas/OperationID"
default:
description: General Error
content:
@ -504,7 +504,7 @@ paths:
schema:
$ref: "#/components/schemas/Error"
post:
summary: Create new submission
summary: Trigger the validator to create a new submission
operationId: createSubmission
tags:
- Submissions
@ -513,14 +513,14 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/SubmissionCreate'
$ref: '#/components/schemas/SubmissionTriggerCreate'
responses:
"201":
description: Successful response
content:
application/json:
schema:
$ref: "#/components/schemas/Id"
$ref: "#/components/schemas/OperationID"
default:
description: General Error
content:
@ -1114,6 +1114,14 @@ components:
ID:
type: integer
format: int64
OperationID:
required:
- OperationID
type: object
properties:
OperationID:
type: integer
format: int32
Roles:
required:
- Roles
@ -1217,31 +1225,15 @@ components:
StatusMessage:
type: string
maxLength: 256
MapfixCreate:
MapfixTriggerCreate:
required:
- DisplayName
- Creator
- GameID
- AssetID
- AssetVersion
- TargetAssetID
type: object
properties:
DisplayName:
type: string
maxLength: 128
Creator:
type: string
maxLength: 128
GameID:
type: integer
format: int32
AssetID:
type: integer
format: int64
AssetVersion:
type: integer
format: int64
TargetAssetID:
type: integer
format: int64
@ -1336,30 +1328,14 @@ components:
StatusMessage:
type: string
maxLength: 256
SubmissionCreate:
SubmissionTriggerCreate:
required:
- DisplayName
- Creator
- GameID
- AssetID
- AssetVersion
type: object
properties:
DisplayName:
type: string
maxLength: 128
Creator:
type: string
maxLength: 128
GameID:
type: integer
format: int32
AssetID:
type: integer
format: int64
AssetVersion:
type: integer
format: int64
ReleaseInfo:
required:
- SubmissionID

@ -139,10 +139,10 @@ type Invoker interface {
ActionSubmissionValidated(ctx context.Context, params ActionSubmissionValidatedParams) error
// CreateMapfix invokes createMapfix operation.
//
// Create new mapfix.
// Trigger the validator to create a mapfix.
//
// POST /mapfixes
CreateMapfix(ctx context.Context, request *MapfixCreate) (*ID, error)
CreateMapfix(ctx context.Context, request *MapfixTriggerCreate) (*OperationID, error)
// CreateScript invokes createScript operation.
//
// Create a new script.
@ -157,10 +157,10 @@ type Invoker interface {
CreateScriptPolicy(ctx context.Context, request *ScriptPolicyCreate) (*ID, error)
// CreateSubmission invokes createSubmission operation.
//
// Create new submission.
// Trigger the validator to create a new submission.
//
// POST /submissions
CreateSubmission(ctx context.Context, request *SubmissionCreate) (*ID, error)
CreateSubmission(ctx context.Context, request *SubmissionTriggerCreate) (*OperationID, error)
// DeleteScript invokes deleteScript operation.
//
// Delete the specified script by ID.
@ -2584,15 +2584,15 @@ func (c *Client) sendActionSubmissionValidated(ctx context.Context, params Actio
// CreateMapfix invokes createMapfix operation.
//
// Create new mapfix.
// Trigger the validator to create a mapfix.
//
// POST /mapfixes
func (c *Client) CreateMapfix(ctx context.Context, request *MapfixCreate) (*ID, error) {
func (c *Client) CreateMapfix(ctx context.Context, request *MapfixTriggerCreate) (*OperationID, error) {
res, err := c.sendCreateMapfix(ctx, request)
return res, err
}
func (c *Client) sendCreateMapfix(ctx context.Context, request *MapfixCreate) (res *ID, err error) {
func (c *Client) sendCreateMapfix(ctx context.Context, request *MapfixTriggerCreate) (res *OperationID, err error) {
otelAttrs := []attribute.KeyValue{
otelogen.OperationID("createMapfix"),
semconv.HTTPRequestMethodKey.String("POST"),
@ -2908,15 +2908,15 @@ func (c *Client) sendCreateScriptPolicy(ctx context.Context, request *ScriptPoli
// CreateSubmission invokes createSubmission operation.
//
// Create new submission.
// Trigger the validator to create a new submission.
//
// POST /submissions
func (c *Client) CreateSubmission(ctx context.Context, request *SubmissionCreate) (*ID, error) {
func (c *Client) CreateSubmission(ctx context.Context, request *SubmissionTriggerCreate) (*OperationID, error) {
res, err := c.sendCreateSubmission(ctx, request)
return res, err
}
func (c *Client) sendCreateSubmission(ctx context.Context, request *SubmissionCreate) (res *ID, err error) {
func (c *Client) sendCreateSubmission(ctx context.Context, request *SubmissionTriggerCreate) (res *OperationID, err error) {
otelAttrs := []attribute.KeyValue{
otelogen.OperationID("createSubmission"),
semconv.HTTPRequestMethodKey.String("POST"),

@ -3542,7 +3542,7 @@ func (s *Server) handleActionSubmissionValidatedRequest(args [1]string, argsEsca
// handleCreateMapfixRequest handles createMapfix operation.
//
// Create new mapfix.
// Trigger the validator to create a mapfix.
//
// POST /mapfixes
func (s *Server) handleCreateMapfixRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
@ -3676,12 +3676,12 @@ func (s *Server) handleCreateMapfixRequest(args [0]string, argsEscaped bool, w h
}
}()
var response *ID
var response *OperationID
if m := s.cfg.Middleware; m != nil {
mreq := middleware.Request{
Context: ctx,
OperationName: CreateMapfixOperation,
OperationSummary: "Create new mapfix",
OperationSummary: "Trigger the validator to create a mapfix",
OperationID: "createMapfix",
Body: request,
Params: middleware.Parameters{},
@ -3689,9 +3689,9 @@ func (s *Server) handleCreateMapfixRequest(args [0]string, argsEscaped bool, w h
}
type (
Request = *MapfixCreate
Request = *MapfixTriggerCreate
Params = struct{}
Response = *ID
Response = *OperationID
)
response, err = middleware.HookMiddleware[
Request,
@ -4127,7 +4127,7 @@ func (s *Server) handleCreateScriptPolicyRequest(args [0]string, argsEscaped boo
// handleCreateSubmissionRequest handles createSubmission operation.
//
// Create new submission.
// Trigger the validator to create a new submission.
//
// POST /submissions
func (s *Server) handleCreateSubmissionRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
@ -4261,12 +4261,12 @@ func (s *Server) handleCreateSubmissionRequest(args [0]string, argsEscaped bool,
}
}()
var response *ID
var response *OperationID
if m := s.cfg.Middleware; m != nil {
mreq := middleware.Request{
Context: ctx,
OperationName: CreateSubmissionOperation,
OperationSummary: "Create new submission",
OperationSummary: "Trigger the validator to create a new submission",
OperationID: "createSubmission",
Body: request,
Params: middleware.Parameters{},
@ -4274,9 +4274,9 @@ func (s *Server) handleCreateSubmissionRequest(args [0]string, argsEscaped bool,
}
type (
Request = *SubmissionCreate
Request = *SubmissionTriggerCreate
Params = struct{}
Response = *ID
Response = *OperationID
)
response, err = middleware.HookMiddleware[
Request,

@ -688,96 +688,40 @@ func (s *Mapfix) UnmarshalJSON(data []byte) error {
}
// Encode implements json.Marshaler.
func (s *MapfixCreate) Encode(e *jx.Encoder) {
func (s *MapfixTriggerCreate) Encode(e *jx.Encoder) {
e.ObjStart()
s.encodeFields(e)
e.ObjEnd()
}
// encodeFields encodes fields.
func (s *MapfixCreate) encodeFields(e *jx.Encoder) {
{
e.FieldStart("DisplayName")
e.Str(s.DisplayName)
}
{
e.FieldStart("Creator")
e.Str(s.Creator)
}
{
e.FieldStart("GameID")
e.Int32(s.GameID)
}
func (s *MapfixTriggerCreate) encodeFields(e *jx.Encoder) {
{
e.FieldStart("AssetID")
e.Int64(s.AssetID)
}
{
e.FieldStart("AssetVersion")
e.Int64(s.AssetVersion)
}
{
e.FieldStart("TargetAssetID")
e.Int64(s.TargetAssetID)
}
}
var jsonFieldsNameOfMapfixCreate = [6]string{
0: "DisplayName",
1: "Creator",
2: "GameID",
3: "AssetID",
4: "AssetVersion",
5: "TargetAssetID",
var jsonFieldsNameOfMapfixTriggerCreate = [2]string{
0: "AssetID",
1: "TargetAssetID",
}
// Decode decodes MapfixCreate from json.
func (s *MapfixCreate) Decode(d *jx.Decoder) error {
// Decode decodes MapfixTriggerCreate from json.
func (s *MapfixTriggerCreate) Decode(d *jx.Decoder) error {
if s == nil {
return errors.New("invalid: unable to decode MapfixCreate to nil")
return errors.New("invalid: unable to decode MapfixTriggerCreate to nil")
}
var requiredBitSet [1]uint8
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
switch string(k) {
case "DisplayName":
requiredBitSet[0] |= 1 << 0
if err := func() error {
v, err := d.Str()
s.DisplayName = string(v)
if err != nil {
return err
}
return nil
}(); err != nil {
return errors.Wrap(err, "decode field \"DisplayName\"")
}
case "Creator":
requiredBitSet[0] |= 1 << 1
if err := func() error {
v, err := d.Str()
s.Creator = string(v)
if err != nil {
return err
}
return nil
}(); err != nil {
return errors.Wrap(err, "decode field \"Creator\"")
}
case "GameID":
requiredBitSet[0] |= 1 << 2
if err := func() error {
v, err := d.Int32()
s.GameID = int32(v)
if err != nil {
return err
}
return nil
}(); err != nil {
return errors.Wrap(err, "decode field \"GameID\"")
}
case "AssetID":
requiredBitSet[0] |= 1 << 3
requiredBitSet[0] |= 1 << 0
if err := func() error {
v, err := d.Int64()
s.AssetID = int64(v)
@ -788,20 +732,8 @@ func (s *MapfixCreate) Decode(d *jx.Decoder) error {
}(); err != nil {
return errors.Wrap(err, "decode field \"AssetID\"")
}
case "AssetVersion":
requiredBitSet[0] |= 1 << 4
if err := func() error {
v, err := d.Int64()
s.AssetVersion = int64(v)
if err != nil {
return err
}
return nil
}(); err != nil {
return errors.Wrap(err, "decode field \"AssetVersion\"")
}
case "TargetAssetID":
requiredBitSet[0] |= 1 << 5
requiredBitSet[0] |= 1 << 1
if err := func() error {
v, err := d.Int64()
s.TargetAssetID = int64(v)
@ -817,12 +749,12 @@ func (s *MapfixCreate) Decode(d *jx.Decoder) error {
}
return nil
}); err != nil {
return errors.Wrap(err, "decode MapfixCreate")
return errors.Wrap(err, "decode MapfixTriggerCreate")
}
// Validate required fields.
var failures []validate.FieldError
for i, mask := range [1]uint8{
0b00111111,
0b00000011,
} {
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
// Mask only required fields and check equality to mask using XOR.
@ -834,8 +766,8 @@ func (s *MapfixCreate) Decode(d *jx.Decoder) error {
bitIdx := bits.TrailingZeros8(result)
fieldIdx := i*8 + bitIdx
var name string
if fieldIdx < len(jsonFieldsNameOfMapfixCreate) {
name = jsonFieldsNameOfMapfixCreate[fieldIdx]
if fieldIdx < len(jsonFieldsNameOfMapfixTriggerCreate) {
name = jsonFieldsNameOfMapfixTriggerCreate[fieldIdx]
} else {
name = strconv.Itoa(fieldIdx)
}
@ -856,14 +788,14 @@ func (s *MapfixCreate) Decode(d *jx.Decoder) error {
}
// MarshalJSON implements stdjson.Marshaler.
func (s *MapfixCreate) MarshalJSON() ([]byte, error) {
func (s *MapfixTriggerCreate) MarshalJSON() ([]byte, error) {
e := jx.Encoder{}
s.Encode(&e)
return e.Bytes(), nil
}
// UnmarshalJSON implements stdjson.Unmarshaler.
func (s *MapfixCreate) UnmarshalJSON(data []byte) error {
func (s *MapfixTriggerCreate) UnmarshalJSON(data []byte) error {
d := jx.DecodeBytes(data)
return s.Decode(d)
}
@ -1049,6 +981,102 @@ func (s *Operation) UnmarshalJSON(data []byte) error {
return s.Decode(d)
}
// Encode implements json.Marshaler.
func (s *OperationID) Encode(e *jx.Encoder) {
e.ObjStart()
s.encodeFields(e)
e.ObjEnd()
}
// encodeFields encodes fields.
func (s *OperationID) encodeFields(e *jx.Encoder) {
{
e.FieldStart("OperationID")
e.Int32(s.OperationID)
}
}
var jsonFieldsNameOfOperationID = [1]string{
0: "OperationID",
}
// Decode decodes OperationID from json.
func (s *OperationID) Decode(d *jx.Decoder) error {
if s == nil {
return errors.New("invalid: unable to decode OperationID to nil")
}
var requiredBitSet [1]uint8
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
switch string(k) {
case "OperationID":
requiredBitSet[0] |= 1 << 0
if err := func() error {
v, err := d.Int32()
s.OperationID = int32(v)
if err != nil {
return err
}
return nil
}(); err != nil {
return errors.Wrap(err, "decode field \"OperationID\"")
}
default:
return d.Skip()
}
return nil
}); err != nil {
return errors.Wrap(err, "decode OperationID")
}
// Validate required fields.
var failures []validate.FieldError
for i, mask := range [1]uint8{
0b00000001,
} {
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
// Mask only required fields and check equality to mask using XOR.
//
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
// Bits of fields which would be set are actually bits of missed fields.
missed := bits.OnesCount8(result)
for bitN := 0; bitN < missed; bitN++ {
bitIdx := bits.TrailingZeros8(result)
fieldIdx := i*8 + bitIdx
var name string
if fieldIdx < len(jsonFieldsNameOfOperationID) {
name = jsonFieldsNameOfOperationID[fieldIdx]
} else {
name = strconv.Itoa(fieldIdx)
}
failures = append(failures, validate.FieldError{
Name: name,
Error: validate.ErrFieldRequired,
})
// Reset bit.
result &^= 1 << bitIdx
}
}
}
if len(failures) > 0 {
return &validate.Error{Fields: failures}
}
return nil
}
// MarshalJSON implements stdjson.Marshaler.
func (s *OperationID) MarshalJSON() ([]byte, error) {
e := jx.Encoder{}
s.Encode(&e)
return e.Bytes(), nil
}
// UnmarshalJSON implements stdjson.Unmarshaler.
func (s *OperationID) UnmarshalJSON(data []byte) error {
d := jx.DecodeBytes(data)
return s.Decode(d)
}
// Encode encodes int32 as json.
func (o OptInt32) Encode(e *jx.Encoder) {
if !o.Set {
@ -2615,91 +2643,35 @@ func (s *Submission) UnmarshalJSON(data []byte) error {
}
// Encode implements json.Marshaler.
func (s *SubmissionCreate) Encode(e *jx.Encoder) {
func (s *SubmissionTriggerCreate) Encode(e *jx.Encoder) {
e.ObjStart()
s.encodeFields(e)
e.ObjEnd()
}
// encodeFields encodes fields.
func (s *SubmissionCreate) encodeFields(e *jx.Encoder) {
{
e.FieldStart("DisplayName")
e.Str(s.DisplayName)
}
{
e.FieldStart("Creator")
e.Str(s.Creator)
}
{
e.FieldStart("GameID")
e.Int32(s.GameID)
}
func (s *SubmissionTriggerCreate) encodeFields(e *jx.Encoder) {
{
e.FieldStart("AssetID")
e.Int64(s.AssetID)
}
{
e.FieldStart("AssetVersion")
e.Int64(s.AssetVersion)
}
}
var jsonFieldsNameOfSubmissionCreate = [5]string{
0: "DisplayName",
1: "Creator",
2: "GameID",
3: "AssetID",
4: "AssetVersion",
var jsonFieldsNameOfSubmissionTriggerCreate = [1]string{
0: "AssetID",
}
// Decode decodes SubmissionCreate from json.
func (s *SubmissionCreate) Decode(d *jx.Decoder) error {
// Decode decodes SubmissionTriggerCreate from json.
func (s *SubmissionTriggerCreate) Decode(d *jx.Decoder) error {
if s == nil {
return errors.New("invalid: unable to decode SubmissionCreate to nil")
return errors.New("invalid: unable to decode SubmissionTriggerCreate to nil")
}
var requiredBitSet [1]uint8
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
switch string(k) {
case "DisplayName":
requiredBitSet[0] |= 1 << 0
if err := func() error {
v, err := d.Str()
s.DisplayName = string(v)
if err != nil {
return err
}
return nil
}(); err != nil {
return errors.Wrap(err, "decode field \"DisplayName\"")
}
case "Creator":
requiredBitSet[0] |= 1 << 1
if err := func() error {
v, err := d.Str()
s.Creator = string(v)
if err != nil {
return err
}
return nil
}(); err != nil {
return errors.Wrap(err, "decode field \"Creator\"")
}
case "GameID":
requiredBitSet[0] |= 1 << 2
if err := func() error {
v, err := d.Int32()
s.GameID = int32(v)
if err != nil {
return err
}
return nil
}(); err != nil {
return errors.Wrap(err, "decode field \"GameID\"")
}
case "AssetID":
requiredBitSet[0] |= 1 << 3
requiredBitSet[0] |= 1 << 0
if err := func() error {
v, err := d.Int64()
s.AssetID = int64(v)
@ -2710,29 +2682,17 @@ func (s *SubmissionCreate) Decode(d *jx.Decoder) error {
}(); err != nil {
return errors.Wrap(err, "decode field \"AssetID\"")
}
case "AssetVersion":
requiredBitSet[0] |= 1 << 4
if err := func() error {
v, err := d.Int64()
s.AssetVersion = int64(v)
if err != nil {
return err
}
return nil
}(); err != nil {
return errors.Wrap(err, "decode field \"AssetVersion\"")
}
default:
return d.Skip()
}
return nil
}); err != nil {
return errors.Wrap(err, "decode SubmissionCreate")
return errors.Wrap(err, "decode SubmissionTriggerCreate")
}
// Validate required fields.
var failures []validate.FieldError
for i, mask := range [1]uint8{
0b00011111,
0b00000001,
} {
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
// Mask only required fields and check equality to mask using XOR.
@ -2744,8 +2704,8 @@ func (s *SubmissionCreate) Decode(d *jx.Decoder) error {
bitIdx := bits.TrailingZeros8(result)
fieldIdx := i*8 + bitIdx
var name string
if fieldIdx < len(jsonFieldsNameOfSubmissionCreate) {
name = jsonFieldsNameOfSubmissionCreate[fieldIdx]
if fieldIdx < len(jsonFieldsNameOfSubmissionTriggerCreate) {
name = jsonFieldsNameOfSubmissionTriggerCreate[fieldIdx]
} else {
name = strconv.Itoa(fieldIdx)
}
@ -2766,14 +2726,14 @@ func (s *SubmissionCreate) Decode(d *jx.Decoder) error {
}
// MarshalJSON implements stdjson.Marshaler.
func (s *SubmissionCreate) MarshalJSON() ([]byte, error) {
func (s *SubmissionTriggerCreate) MarshalJSON() ([]byte, error) {
e := jx.Encoder{}
s.Encode(&e)
return e.Bytes(), nil
}
// UnmarshalJSON implements stdjson.Unmarshaler.
func (s *SubmissionCreate) UnmarshalJSON(data []byte) error {
func (s *SubmissionTriggerCreate) UnmarshalJSON(data []byte) error {
d := jx.DecodeBytes(data)
return s.Decode(d)
}

@ -16,7 +16,7 @@ import (
)
func (s *Server) decodeCreateMapfixRequest(r *http.Request) (
req *MapfixCreate,
req *MapfixTriggerCreate,
close func() error,
rerr error,
) {
@ -55,7 +55,7 @@ func (s *Server) decodeCreateMapfixRequest(r *http.Request) (
d := jx.DecodeBytes(buf)
var request MapfixCreate
var request MapfixTriggerCreate
if err := func() error {
if err := request.Decode(d); err != nil {
return err
@ -72,14 +72,6 @@ func (s *Server) decodeCreateMapfixRequest(r *http.Request) (
}
return req, close, err
}
if err := func() error {
if err := request.Validate(); err != nil {
return err
}
return nil
}(); err != nil {
return req, close, errors.Wrap(err, "validate")
}
return &request, close, nil
default:
return req, close, validate.InvalidContentType(ct)
@ -221,7 +213,7 @@ func (s *Server) decodeCreateScriptPolicyRequest(r *http.Request) (
}
func (s *Server) decodeCreateSubmissionRequest(r *http.Request) (
req *SubmissionCreate,
req *SubmissionTriggerCreate,
close func() error,
rerr error,
) {
@ -260,7 +252,7 @@ func (s *Server) decodeCreateSubmissionRequest(r *http.Request) (
d := jx.DecodeBytes(buf)
var request SubmissionCreate
var request SubmissionTriggerCreate
if err := func() error {
if err := request.Decode(d); err != nil {
return err
@ -277,14 +269,6 @@ func (s *Server) decodeCreateSubmissionRequest(r *http.Request) (
}
return req, close, err
}
if err := func() error {
if err := request.Validate(); err != nil {
return err
}
return nil
}(); err != nil {
return req, close, errors.Wrap(err, "validate")
}
return &request, close, nil
default:
return req, close, validate.InvalidContentType(ct)

@ -12,7 +12,7 @@ import (
)
func encodeCreateMapfixRequest(
req *MapfixCreate,
req *MapfixTriggerCreate,
r *http.Request,
) error {
const contentType = "application/json"
@ -54,7 +54,7 @@ func encodeCreateScriptPolicyRequest(
}
func encodeCreateSubmissionRequest(
req *SubmissionCreate,
req *SubmissionTriggerCreate,
r *http.Request,
) error {
const contentType = "application/json"

@ -933,7 +933,7 @@ func decodeActionSubmissionValidatedResponse(resp *http.Response) (res *ActionSu
return res, errors.Wrap(defRes, "error")
}
func decodeCreateMapfixResponse(resp *http.Response) (res *ID, _ error) {
func decodeCreateMapfixResponse(resp *http.Response) (res *OperationID, _ error) {
switch resp.StatusCode {
case 201:
// Code 201.
@ -949,7 +949,7 @@ func decodeCreateMapfixResponse(resp *http.Response) (res *ID, _ error) {
}
d := jx.DecodeBytes(buf)
var response ID
var response OperationID
if err := func() error {
if err := response.Decode(d); err != nil {
return err
@ -1182,7 +1182,7 @@ func decodeCreateScriptPolicyResponse(resp *http.Response) (res *ID, _ error) {
return res, errors.Wrap(defRes, "error")
}
func decodeCreateSubmissionResponse(resp *http.Response) (res *ID, _ error) {
func decodeCreateSubmissionResponse(resp *http.Response) (res *OperationID, _ error) {
switch resp.StatusCode {
case 201:
// Code 201.
@ -1198,7 +1198,7 @@ func decodeCreateSubmissionResponse(resp *http.Response) (res *ID, _ error) {
}
d := jx.DecodeBytes(buf)
var response ID
var response OperationID
if err := func() error {
if err := response.Decode(d); err != nil {
return err

@ -139,7 +139,7 @@ func encodeActionSubmissionValidatedResponse(response *ActionSubmissionValidated
return nil
}
func encodeCreateMapfixResponse(response *ID, w http.ResponseWriter, span trace.Span) error {
func encodeCreateMapfixResponse(response *OperationID, w http.ResponseWriter, span trace.Span) error {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(201)
span.SetStatus(codes.Ok, http.StatusText(201))
@ -181,7 +181,7 @@ func encodeCreateScriptPolicyResponse(response *ID, w http.ResponseWriter, span
return nil
}
func encodeCreateSubmissionResponse(response *ID, w http.ResponseWriter, span trace.Span) error {
func encodeCreateSubmissionResponse(response *OperationID, w http.ResponseWriter, span trace.Span) error {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(201)
span.SetStatus(codes.Ok, http.StatusText(201))

@ -1264,7 +1264,7 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
return r, true
case "POST":
r.name = CreateMapfixOperation
r.summary = "Create new mapfix"
r.summary = "Trigger the validator to create a mapfix"
r.operationID = "createMapfix"
r.pathPattern = "/mapfixes"
r.args = args
@ -2058,7 +2058,7 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
return r, true
case "POST":
r.name = CreateSubmissionOperation
r.summary = "Create new submission"
r.summary = "Trigger the validator to create a new submission"
r.operationID = "createSubmission"
r.pathPattern = "/submissions"
r.args = args

@ -359,73 +359,29 @@ func (s *Mapfix) SetStatusMessage(val string) {
s.StatusMessage = val
}
// Ref: #/components/schemas/MapfixCreate
type MapfixCreate struct {
DisplayName string `json:"DisplayName"`
Creator string `json:"Creator"`
GameID int32 `json:"GameID"`
AssetID int64 `json:"AssetID"`
AssetVersion int64 `json:"AssetVersion"`
TargetAssetID int64 `json:"TargetAssetID"`
}
// GetDisplayName returns the value of DisplayName.
func (s *MapfixCreate) GetDisplayName() string {
return s.DisplayName
}
// GetCreator returns the value of Creator.
func (s *MapfixCreate) GetCreator() string {
return s.Creator
}
// GetGameID returns the value of GameID.
func (s *MapfixCreate) GetGameID() int32 {
return s.GameID
// Ref: #/components/schemas/MapfixTriggerCreate
type MapfixTriggerCreate struct {
AssetID int64 `json:"AssetID"`
TargetAssetID int64 `json:"TargetAssetID"`
}
// GetAssetID returns the value of AssetID.
func (s *MapfixCreate) GetAssetID() int64 {
func (s *MapfixTriggerCreate) GetAssetID() int64 {
return s.AssetID
}
// GetAssetVersion returns the value of AssetVersion.
func (s *MapfixCreate) GetAssetVersion() int64 {
return s.AssetVersion
}
// GetTargetAssetID returns the value of TargetAssetID.
func (s *MapfixCreate) GetTargetAssetID() int64 {
func (s *MapfixTriggerCreate) GetTargetAssetID() int64 {
return s.TargetAssetID
}
// SetDisplayName sets the value of DisplayName.
func (s *MapfixCreate) SetDisplayName(val string) {
s.DisplayName = val
}
// SetCreator sets the value of Creator.
func (s *MapfixCreate) SetCreator(val string) {
s.Creator = val
}
// SetGameID sets the value of GameID.
func (s *MapfixCreate) SetGameID(val int32) {
s.GameID = val
}
// SetAssetID sets the value of AssetID.
func (s *MapfixCreate) SetAssetID(val int64) {
func (s *MapfixTriggerCreate) SetAssetID(val int64) {
s.AssetID = val
}
// SetAssetVersion sets the value of AssetVersion.
func (s *MapfixCreate) SetAssetVersion(val int64) {
s.AssetVersion = val
}
// SetTargetAssetID sets the value of TargetAssetID.
func (s *MapfixCreate) SetTargetAssetID(val int64) {
func (s *MapfixTriggerCreate) SetTargetAssetID(val int64) {
s.TargetAssetID = val
}
@ -499,6 +455,21 @@ func (s *Operation) SetPath(val string) {
s.Path = val
}
// Ref: #/components/schemas/OperationID
type OperationID struct {
OperationID int32 `json:"OperationID"`
}
// GetOperationID returns the value of OperationID.
func (s *OperationID) GetOperationID() int32 {
return s.OperationID
}
// SetOperationID sets the value of OperationID.
func (s *OperationID) SetOperationID(val int32) {
s.OperationID = val
}
// NewOptInt32 returns new OptInt32 with value set to v.
func NewOptInt32(v int32) OptInt32 {
return OptInt32{
@ -1166,65 +1137,21 @@ func (s *Submission) SetStatusMessage(val string) {
s.StatusMessage = val
}
// Ref: #/components/schemas/SubmissionCreate
type SubmissionCreate struct {
DisplayName string `json:"DisplayName"`
Creator string `json:"Creator"`
GameID int32 `json:"GameID"`
AssetID int64 `json:"AssetID"`
AssetVersion int64 `json:"AssetVersion"`
}
// GetDisplayName returns the value of DisplayName.
func (s *SubmissionCreate) GetDisplayName() string {
return s.DisplayName
}
// GetCreator returns the value of Creator.
func (s *SubmissionCreate) GetCreator() string {
return s.Creator
}
// GetGameID returns the value of GameID.
func (s *SubmissionCreate) GetGameID() int32 {
return s.GameID
// Ref: #/components/schemas/SubmissionTriggerCreate
type SubmissionTriggerCreate struct {
AssetID int64 `json:"AssetID"`
}
// GetAssetID returns the value of AssetID.
func (s *SubmissionCreate) GetAssetID() int64 {
func (s *SubmissionTriggerCreate) GetAssetID() int64 {
return s.AssetID
}
// GetAssetVersion returns the value of AssetVersion.
func (s *SubmissionCreate) GetAssetVersion() int64 {
return s.AssetVersion
}
// SetDisplayName sets the value of DisplayName.
func (s *SubmissionCreate) SetDisplayName(val string) {
s.DisplayName = val
}
// SetCreator sets the value of Creator.
func (s *SubmissionCreate) SetCreator(val string) {
s.Creator = val
}
// SetGameID sets the value of GameID.
func (s *SubmissionCreate) SetGameID(val int32) {
s.GameID = val
}
// SetAssetID sets the value of AssetID.
func (s *SubmissionCreate) SetAssetID(val int64) {
func (s *SubmissionTriggerCreate) SetAssetID(val int64) {
s.AssetID = val
}
// SetAssetVersion sets the value of AssetVersion.
func (s *SubmissionCreate) SetAssetVersion(val int64) {
s.AssetVersion = val
}
// UpdateMapfixModelNoContent is response for UpdateMapfixModel operation.
type UpdateMapfixModelNoContent struct{}

@ -118,10 +118,10 @@ type Handler interface {
ActionSubmissionValidated(ctx context.Context, params ActionSubmissionValidatedParams) error
// CreateMapfix implements createMapfix operation.
//
// Create new mapfix.
// Trigger the validator to create a mapfix.
//
// POST /mapfixes
CreateMapfix(ctx context.Context, req *MapfixCreate) (*ID, error)
CreateMapfix(ctx context.Context, req *MapfixTriggerCreate) (*OperationID, error)
// CreateScript implements createScript operation.
//
// Create a new script.
@ -136,10 +136,10 @@ type Handler interface {
CreateScriptPolicy(ctx context.Context, req *ScriptPolicyCreate) (*ID, error)
// CreateSubmission implements createSubmission operation.
//
// Create new submission.
// Trigger the validator to create a new submission.
//
// POST /submissions
CreateSubmission(ctx context.Context, req *SubmissionCreate) (*ID, error)
CreateSubmission(ctx context.Context, req *SubmissionTriggerCreate) (*OperationID, error)
// DeleteScript implements deleteScript operation.
//
// Delete the specified script by ID.

@ -177,10 +177,10 @@ func (UnimplementedHandler) ActionSubmissionValidated(ctx context.Context, param
// CreateMapfix implements createMapfix operation.
//
// Create new mapfix.
// Trigger the validator to create a mapfix.
//
// POST /mapfixes
func (UnimplementedHandler) CreateMapfix(ctx context.Context, req *MapfixCreate) (r *ID, _ error) {
func (UnimplementedHandler) CreateMapfix(ctx context.Context, req *MapfixTriggerCreate) (r *OperationID, _ error) {
return r, ht.ErrNotImplemented
}
@ -204,10 +204,10 @@ func (UnimplementedHandler) CreateScriptPolicy(ctx context.Context, req *ScriptP
// CreateSubmission implements createSubmission operation.
//
// Create new submission.
// Trigger the validator to create a new submission.
//
// POST /submissions
func (UnimplementedHandler) CreateSubmission(ctx context.Context, req *SubmissionCreate) (r *ID, _ error) {
func (UnimplementedHandler) CreateSubmission(ctx context.Context, req *SubmissionTriggerCreate) (r *OperationID, _ error) {
return r, ht.ErrNotImplemented
}

@ -127,56 +127,6 @@ func (s *Mapfix) Validate() error {
return nil
}
func (s *MapfixCreate) Validate() error {
if s == nil {
return validate.ErrNilPointer
}
var failures []validate.FieldError
if err := func() error {
if err := (validate.String{
MinLength: 0,
MinLengthSet: false,
MaxLength: 128,
MaxLengthSet: true,
Email: false,
Hostname: false,
Regex: nil,
}).Validate(string(s.DisplayName)); err != nil {
return errors.Wrap(err, "string")
}
return nil
}(); err != nil {
failures = append(failures, validate.FieldError{
Name: "DisplayName",
Error: err,
})
}
if err := func() error {
if err := (validate.String{
MinLength: 0,
MinLengthSet: false,
MaxLength: 128,
MaxLengthSet: true,
Email: false,
Hostname: false,
Regex: nil,
}).Validate(string(s.Creator)); err != nil {
return errors.Wrap(err, "string")
}
return nil
}(); err != nil {
failures = append(failures, validate.FieldError{
Name: "Creator",
Error: err,
})
}
if len(failures) > 0 {
return &validate.Error{Fields: failures}
}
return nil
}
func (s *Operation) Validate() error {
if s == nil {
return validate.ErrNilPointer
@ -510,56 +460,6 @@ func (s *Submission) Validate() error {
return nil
}
func (s *SubmissionCreate) Validate() error {
if s == nil {
return validate.ErrNilPointer
}
var failures []validate.FieldError
if err := func() error {
if err := (validate.String{
MinLength: 0,
MinLengthSet: false,
MaxLength: 128,
MaxLengthSet: true,
Email: false,
Hostname: false,
Regex: nil,
}).Validate(string(s.DisplayName)); err != nil {
return errors.Wrap(err, "string")
}
return nil
}(); err != nil {
failures = append(failures, validate.FieldError{
Name: "DisplayName",
Error: err,
})
}
if err := func() error {
if err := (validate.String{
MinLength: 0,
MinLengthSet: false,
MaxLength: 128,
MaxLengthSet: true,
Email: false,
Hostname: false,
Regex: nil,
}).Validate(string(s.Creator)); err != nil {
return errors.Wrap(err, "string")
}
return nil
}(); err != nil {
failures = append(failures, validate.FieldError{
Name: "Creator",
Error: err,
})
}
if len(failures) > 0 {
return &validate.Error{Fields: failures}
}
return nil
}
func (s *User) Validate() error {
if s == nil {
return validate.ErrNilPointer

@ -5,6 +5,18 @@ package model
// Requests are sent from maps-service to validator
type CreateSubmissionRequest struct {
// operation_id is passed back in the response message
OperationID int32
ModelID int64
}
type CreateMapfixRequest struct {
OperationID int32
ModelID int64
TargetAssetID int64
}
type ValidateSubmissionRequest struct {
// submission_id is passed back in the response message
SubmissionID int64

@ -46,7 +46,7 @@ var (
)
// POST /mapfixes
func (svc *Service) CreateMapfix(ctx context.Context, request *api.MapfixCreate) (*api.ID, error) {
func (svc *Service) CreateMapfix(ctx context.Context, request *api.MapfixTriggerCreate) (*api.OperationID, error) {
userInfo, ok := ctx.Value("UserInfo").(UserInfoHandle)
if !ok {
return nil, ErrUserInfo
@ -74,42 +74,29 @@ func (svc *Service) CreateMapfix(ctx context.Context, request *api.MapfixCreate)
return nil, ErrCreationPhaseMapfixesLimit
}
}
// Check if an active mapfix with the same asset id exists
{
filter := datastore.Optional()
filter.Add("asset_id", request.AssetID)
filter.Add("asset_version", request.AssetVersion)
filter.Add("status_id", ActiveMapfixStatuses)
active_mapfixes, err := svc.DB.Mapfixes().List(ctx, filter, model.Page{
Number: 1,
Size: 1,
},datastore.ListSortDisabled)
if err != nil {
return nil, err
}
if len(active_mapfixes) != 0{
return nil, ErrActiveMapfixSameAssetID
}
}
mapfix, err := svc.DB.Mapfixes().Create(ctx, model.Mapfix{
ID: 0,
DisplayName: request.DisplayName,
Creator: request.Creator,
GameID: request.GameID,
Submitter: int64(userId),
AssetID: request.AssetID,
AssetVersion: request.AssetVersion,
Completed: false,
TargetAssetID: request.TargetAssetID,
StatusID: model.MapfixStatusUnderConstruction,
operation, err := svc.DB.Operations().Create(ctx, model.Operation{
Owner: int64(userId),
StatusID: model.OperationStatusCreated,
})
if err != nil {
return nil, err
}
return &api.ID{
ID: mapfix.ID,
create_request := model.CreateMapfixRequest{
OperationID: operation.ID,
ModelID: request.AssetID,
TargetAssetID: request.TargetAssetID,
}
j, err := json.Marshal(create_request)
if err != nil {
return nil, err
}
svc.Nats.Publish("maptest.mapfixes.create", []byte(j))
return &api.OperationID{
OperationID: operation.ID,
}, nil
}

@ -49,7 +49,7 @@ var (
)
// POST /submissions
func (svc *Service) CreateSubmission(ctx context.Context, request *api.SubmissionCreate) (*api.ID, error) {
func (svc *Service) CreateSubmission(ctx context.Context, request *api.SubmissionTriggerCreate) (*api.OperationID, error) {
userInfo, ok := ctx.Value("UserInfo").(UserInfoHandle)
if !ok {
return nil, ErrUserInfo
@ -77,41 +77,28 @@ func (svc *Service) CreateSubmission(ctx context.Context, request *api.Submissio
return nil, ErrCreationPhaseSubmissionsLimit
}
}
// Check if an active submission with the same asset id exists
{
filter := datastore.Optional()
filter.Add("asset_id", request.AssetID)
filter.Add("asset_version", request.AssetVersion)
filter.Add("status_id", ActiveSubmissionStatuses)
active_submissions, err := svc.DB.Submissions().List(ctx, filter, model.Page{
Number: 1,
Size: 1,
},datastore.ListSortDisabled)
if err != nil {
return nil, err
}
if len(active_submissions) != 0{
return nil, ErrActiveSubmissionSameAssetID
}
}
submission, err := svc.DB.Submissions().Create(ctx, model.Submission{
ID: 0,
DisplayName: request.DisplayName,
Creator: request.Creator,
GameID: request.GameID,
Submitter: int64(userId),
AssetID: request.AssetID,
AssetVersion: request.AssetVersion,
Completed: false,
StatusID: model.SubmissionStatusUnderConstruction,
operation, err := svc.DB.Operations().Create(ctx, model.Operation{
Owner: int64(userId),
StatusID: model.OperationStatusCreated,
})
if err != nil {
return nil, err
}
return &api.ID{
ID: submission.ID,
create_request := model.CreateSubmissionRequest{
OperationID: operation.ID,
ModelID: request.AssetID,
}
j, err := json.Marshal(create_request)
if err != nil {
return nil, err
}
svc.Nats.Publish("maptest.submissions.create", []byte(j))
return &api.OperationID{
OperationID: operation.ID,
}, nil
}