submissions: switch to unsigned integers in database and nats messages

This commit is contained in:
Quaternions 2025-04-05 17:08:03 -07:00
parent 7e881e6ac5
commit d42e89fcb4
Signed by: Quaternions
GPG Key ID: D0DF5964F79AC131
9 changed files with 97 additions and 52 deletions

@ -25,16 +25,16 @@ type Mapfix struct {
ID int64 `gorm:"primaryKey"`
DisplayName string
Creator string
GameID int32
GameID uint32
CreatedAt time.Time
UpdatedAt time.Time
Submitter int64 // UserID
AssetID int64
AssetVersion int64
ValidatedAssetID int64
ValidatedAssetVersion int64
Submitter uint64 // UserID
AssetID uint64
AssetVersion uint64
ValidatedAssetID uint64
ValidatedAssetVersion uint64
Completed bool // Has this version of the map been completed at least once on maptest
TargetAssetID int64 // where to upload map fix. if the TargetAssetID is 0, it's a new map.
TargetAssetID uint64 // where to upload map fix. if the TargetAssetID is 0, it's a new map.
StatusID MapfixStatus
StatusMessage string
}

@ -7,42 +7,42 @@ package model
type CreateSubmissionRequest struct {
// operation_id is passed back in the response message
OperationID int32
ModelID int64
OperationID int32
ModelID uint64
}
type CreateMapfixRequest struct {
OperationID int32
ModelID int64
TargetAssetID int64
OperationID int32
ModelID uint64
TargetAssetID uint64
}
type ValidateSubmissionRequest struct {
// submission_id is passed back in the response message
SubmissionID int64
ModelID int64
ModelVersion int64
ValidatedModelID *int64 // optional value
SubmissionID int64
ModelID uint64
ModelVersion uint64
ValidatedModelID *uint64 // optional value
}
type ValidateMapfixRequest struct {
MapfixID int64
ModelID int64
ModelVersion int64
ValidatedModelID *int64 // optional value
MapfixID int64
ModelID uint64
ModelVersion uint64
ValidatedModelID *uint64 // optional value
}
// Create a new map
type UploadSubmissionRequest struct {
SubmissionID int64
ModelID int64
ModelVersion int64
SubmissionID int64
ModelID uint64
ModelVersion uint64
ModelName string
}
type UploadMapfixRequest struct {
MapfixID int64
ModelID int64
ModelVersion int64
TargetAssetID int64
MapfixID int64
ModelID uint64
ModelVersion uint64
TargetAssetID uint64
}

@ -26,16 +26,16 @@ type Submission struct {
ID int64 `gorm:"primaryKey"`
DisplayName string
Creator string
GameID int32
GameID uint32
CreatedAt time.Time
UpdatedAt time.Time
Submitter int64 // UserID
AssetID int64
AssetVersion int64
ValidatedAssetID int64
ValidatedAssetVersion int64
Submitter uint64 // UserID
AssetID uint64
AssetVersion uint64
ValidatedAssetID uint64
ValidatedAssetVersion uint64
Completed bool // Has this version of the map been completed at least once on maptest
UploadedAssetID int64 // where to upload map fix. if the TargetAssetID is 0, it's a new map.
UploadedAssetID uint64 // where to upload map fix. if the TargetAssetID is 0, it's a new map.
StatusID SubmissionStatus
StatusMessage string
}

@ -41,6 +41,13 @@ var (
// POST /mapfixes
func (svc *Service) CreateMapfix(ctx context.Context, request *api.MapfixTriggerCreate) (*api.OperationID, error) {
// sanitization
if request.AssetID<0 || request.TargetAssetID<0{
return nil, ErrNegativeID
}
var ModelID=uint64(request.AssetID);
var TargetAssetID=uint64(request.TargetAssetID);
userInfo, ok := ctx.Value("UserInfo").(UserInfoHandle)
if !ok {
return nil, ErrUserInfo
@ -105,8 +112,8 @@ func (svc *Service) CreateMapfix(ctx context.Context, request *api.MapfixTrigger
create_request := model.CreateMapfixRequest{
OperationID: operation.ID,
ModelID: request.AssetID,
TargetAssetID: request.TargetAssetID,
ModelID: ModelID,
TargetAssetID: TargetAssetID,
}
j, err := json.Marshal(create_request)
@ -135,7 +142,7 @@ func (svc *Service) GetMapfix(ctx context.Context, params api.GetMapfixParams) (
ID: mapfix.ID,
DisplayName: mapfix.DisplayName,
Creator: mapfix.Creator,
GameID: mapfix.GameID,
GameID: int32(mapfix.GameID),
CreatedAt: mapfix.CreatedAt.Unix(),
UpdatedAt: mapfix.UpdatedAt.Unix(),
Submitter: int64(mapfix.Submitter),
@ -182,7 +189,7 @@ func (svc *Service) ListMapfixes(ctx context.Context, params api.ListMapfixesPar
ID: item.ID,
DisplayName: item.DisplayName,
Creator: item.Creator,
GameID: item.GameID,
GameID: int32(item.GameID),
CreatedAt: item.CreatedAt.Unix(),
UpdatedAt: item.UpdatedAt.Unix(),
Submitter: int64(item.Submitter),

@ -24,6 +24,7 @@ var (
ErrPermissionDeniedNeedRoleMapDownload = fmt.Errorf("%w: Need Role MapDownload", ErrPermissionDenied)
ErrPermissionDeniedNeedRoleScriptWrite = fmt.Errorf("%w: Need Role ScriptWrite", ErrPermissionDenied)
ErrPermissionDeniedNeedRoleMaptest = fmt.Errorf("%w: Need Role Maptest", ErrPermissionDenied)
ErrNegativeID = errors.New("A negative ID was provided")
)
type Service struct {

@ -43,6 +43,12 @@ var (
// POST /submissions
func (svc *Service) CreateSubmission(ctx context.Context, request *api.SubmissionTriggerCreate) (*api.OperationID, error) {
// sanitization
if request.AssetID<0{
return nil, ErrNegativeID
}
var ModelID=uint64(request.AssetID);
userInfo, ok := ctx.Value("UserInfo").(UserInfoHandle)
if !ok {
return nil, ErrUserInfo
@ -96,7 +102,7 @@ func (svc *Service) CreateSubmission(ctx context.Context, request *api.Submissio
create_request := model.CreateSubmissionRequest{
OperationID: operation.ID,
ModelID: request.AssetID,
ModelID: ModelID,
}
j, err := json.Marshal(create_request)
@ -125,7 +131,7 @@ func (svc *Service) GetSubmission(ctx context.Context, params api.GetSubmissionP
ID: submission.ID,
DisplayName: submission.DisplayName,
Creator: submission.Creator,
GameID: submission.GameID,
GameID: int32(submission.GameID),
CreatedAt: submission.CreatedAt.Unix(),
UpdatedAt: submission.UpdatedAt.Unix(),
Submitter: int64(submission.Submitter),
@ -172,7 +178,7 @@ func (svc *Service) ListSubmissions(ctx context.Context, params api.ListSubmissi
ID: item.ID,
DisplayName: item.DisplayName,
Creator: item.Creator,
GameID: item.GameID,
GameID: int32(item.GameID),
CreatedAt: item.CreatedAt.Unix(),
UpdatedAt: item.UpdatedAt.Unix(),
Submitter: int64(item.Submitter),
@ -647,12 +653,13 @@ func (svc *Service) ReleaseSubmissions(ctx context.Context, request []api.Releas
for i,submission := range submissions{
date := request[i].Date.Unix()
var GameID = int32(submission.GameID)
// create each map with go-grpc
_, err := svc.Client.Create(ctx, &maps.MapRequest{
ID: submission.UploadedAssetID,
ID: int64(submission.UploadedAssetID),
DisplayName: &submission.DisplayName,
Creator: &submission.Creator,
GameID: &submission.GameID,
GameID: &GameID,
Date: &date,
})
if err != nil {

@ -82,6 +82,20 @@ func (svc *Service) ActionMapfixUploaded(ctx context.Context, params internal.Ac
// POST /mapfixes
func (svc *Service) CreateMapfix(ctx context.Context, request *internal.MapfixCreate) (*internal.MapfixID, error) {
// sanitization
if request.GameID<0||
request.AssetOwner<0||
request.AssetID<0||
request.AssetVersion<0||
request.TargetAssetID<0{
return nil, ErrNegativeID
}
var GameID=uint32(request.GameID);
var Submitter=uint64(request.AssetOwner);
var AssetID=uint64(request.AssetID);
var AssetVersion=uint64(request.AssetVersion);
var TargetAssetID=uint64(request.TargetAssetID);
// Check if an active mapfix with the same asset id exists
{
filter := datastore.Optional()
@ -115,12 +129,12 @@ func (svc *Service) CreateMapfix(ctx context.Context, request *internal.MapfixCr
ID: 0,
DisplayName: request.DisplayName,
Creator: request.Creator,
GameID: request.GameID,
Submitter: request.AssetOwner,
AssetID: request.AssetID,
AssetVersion: request.AssetVersion,
GameID: GameID,
Submitter: Submitter,
AssetID: AssetID,
AssetVersion: AssetVersion,
Completed: false,
TargetAssetID: request.TargetAssetID,
TargetAssetID: TargetAssetID,
StatusID: model.MapfixStatusUnderConstruction,
})
if err != nil {

@ -9,6 +9,10 @@ import (
"github.com/nats-io/nats.go"
)
var (
ErrNegativeID = errors.New("A negative ID was provided")
)
type Service struct {
DB datastore.Datastore
Nats nats.JetStreamContext

@ -82,6 +82,18 @@ func (svc *Service) ActionSubmissionUploaded(ctx context.Context, params interna
// POST /submissions
func (svc *Service) CreateSubmission(ctx context.Context, request *internal.SubmissionCreate) (*internal.SubmissionID, error) {
// sanitization
if request.GameID<0||
request.AssetOwner<0||
request.AssetID<0||
request.AssetVersion<0{
return nil, ErrNegativeID
}
var GameID=uint32(request.GameID);
var Submitter=uint64(request.AssetOwner);
var AssetID=uint64(request.AssetID);
var AssetVersion=uint64(request.AssetVersion);
// Check if an active submission with the same asset id exists
{
filter := datastore.Optional()
@ -115,10 +127,10 @@ func (svc *Service) CreateSubmission(ctx context.Context, request *internal.Subm
ID: 0,
DisplayName: request.DisplayName,
Creator: request.Creator,
GameID: request.GameID,
Submitter: request.AssetOwner,
AssetID: request.AssetID,
AssetVersion: request.AssetVersion,
GameID: GameID,
Submitter: Submitter,
AssetID: AssetID,
AssetVersion: AssetVersion,
Completed: false,
StatusID: model.SubmissionStatusUnderConstruction,
})