9 Commits

Author SHA1 Message Date
556f2d5c38 use unsigned ints 2025-07-21 20:15:53 -07:00
859dd960d5 extended maps 2025-07-21 20:14:29 -07:00
77d88876f6 rename maps to maps_embedded
All checks were successful
continuous-integration/drone/push Build is passing
2025-07-21 20:08:08 -07:00
d8f3fd54a6 validator: ResourceType enum
All checks were successful
continuous-integration/drone/push Build is passing
2025-07-18 20:32:49 -07:00
0c22f1035e validator: fix SetStatusUploaded
All checks were successful
continuous-integration/drone/push Build is passing
2025-07-17 22:47:11 -07:00
e4d6e3882f validator: fix ScriptFilter
All checks were successful
continuous-integration/drone/push Build is passing
2025-07-17 22:29:47 -07:00
7646d55b34 validator: return ID on Create
All checks were successful
continuous-integration/drone/push Build is passing
2025-07-17 22:08:19 -07:00
3476ecaee0 validator: rename MapFixID -> MapfixID
All checks were successful
continuous-integration/drone/push Build is passing
2025-07-17 21:54:40 -07:00
09d89e2700 Create Dedicated Validator Endpoints (#8)
### Replacing Maps Service `openapi-internal.yaml` With gRPC

These are all the endpoints used by the validator.  The plan is to delete `service_internal` and create `validator_controller` with equivalent gRPC functionality.  This can then be extended in the future for public api & maptest integration by creating new grpc endpoints that the public api & game-rpc talk to.  The gRPC extensions would be separate files (`mapfixes.proto`, `submissions.proto`, `maps.proto`) unlike `validator.proto` which has a bunch of dedicated endpoints that only the validator should use.

### Why?

To reduce the number of exposed apis.  Without this there would need to be 4 (!) exposed apis (validator openapi, web openapi, public api, gRPC for game-rpc), with it, only 2 (web api, gRPC).

### Why didn't you do this in the first place?

I didn't know how.  I think I have a handle on it now.

Reviewed-on: #8
Co-authored-by: Rhys Lloyd <krakow20@gmail.com>
Co-committed-by: Rhys Lloyd <krakow20@gmail.com>
2025-07-17 21:53:59 -07:00
3 changed files with 213 additions and 18 deletions

View File

@@ -25,22 +25,31 @@ message MapResponse {
int64 ID = 1;
string DisplayName = 2;
string Creator = 3;
int32 GameID = 4;
uint32 GameID = 4;
int64 Date = 5;
int64 CreatedAt = 6;
int64 UpdatedAt = 7;
uint64 Submitter = 8;
uint64 Thumbnail = 9;
uint64 AssetVersion = 10;
uint32 LoadCount = 11;
uint32 Modes = 12;
}
message MapRequest {
int64 ID = 1;
optional string DisplayName = 2;
optional string Creator = 3;
optional int32 GameID = 4;
optional uint32 GameID = 4;
optional int64 Date = 5;
optional uint64 Submitter = 6;
}
message MapFilter {
optional string DisplayName = 2;
optional string Creator = 3;
optional int32 GameID = 4;
optional uint32 GameID = 4;
optional uint64 Submitter = 5;
}
message MapList {
@@ -53,10 +62,9 @@ message ListRequest {
}
message Pagination {
int32 Size = 1;
int32 Number = 2;
uint32 Size = 1;
uint32 Number = 2;
}
message NullResponse {
}
}

View File

@@ -1,8 +1,8 @@
syntax = "proto3";
option go_package = "git.itzana.me/strafesnet/go-grpc/maps2";
option go_package = "git.itzana.me/strafesnet/go-grpc/maps_embedded";
package maps2;
package maps_embedded;
service MapsService {
rpc Get(IdMessage) returns (MapResponse);
@@ -27,13 +27,6 @@ message MapResponse {
string Creator = 3;
int32 GameID = 4;
int64 Date = 5;
int64 CreatedAt = 6;
int64 UpdatedAt = 7;
int64 Submitter = 8;
int64 Thumbnail = 9;
int64 AssetVersion = 10;
int32 LoadCount = 11;
int32 Modes = 12;
}
message MapRequest {
@@ -42,14 +35,12 @@ message MapRequest {
optional string Creator = 3;
optional int32 GameID = 4;
optional int64 Date = 5;
optional int64 Submitter = 6;
}
message MapFilter {
optional string DisplayName = 2;
optional string Creator = 3;
optional int32 GameID = 4;
optional int64 Submitter = 5;
}
message MapList {
@@ -67,4 +58,5 @@ message Pagination {
}
message NullResponse {
}

195
validator.proto Normal file
View File

@@ -0,0 +1,195 @@
syntax = "proto3";
option go_package = "git.itzana.me/strafesnet/go-grpc/validator";
package validator;
service ValidatorMapfixService {
rpc Create(MapfixCreate) returns (MapfixID);
rpc CreateAuditError(AuditErrorRequest) returns (NullResponse);
rpc CreateAuditChecklist(AuditChecklistRequest) returns (NullResponse);
rpc SetValidatedModel(ValidatedModelRequest) returns (NullResponse);
rpc SetStatusSubmitted(SubmittedRequest) returns (NullResponse);
rpc SetStatusRequestChanges(MapfixID) returns (NullResponse);
rpc SetStatusValidated(MapfixID) returns (NullResponse);
rpc SetStatusFailed(MapfixID) returns (NullResponse);
rpc SetStatusUploaded(MapfixID) returns (NullResponse);
}
service ValidatorSubmissionService {
rpc Create(SubmissionCreate) returns (SubmissionID);
rpc CreateAuditError(AuditErrorRequest) returns (NullResponse);
rpc CreateAuditChecklist(AuditChecklistRequest) returns (NullResponse);
rpc SetValidatedModel(ValidatedModelRequest) returns (NullResponse);
rpc SetStatusSubmitted(SubmittedRequest) returns (NullResponse);
rpc SetStatusRequestChanges(SubmissionID) returns (NullResponse);
rpc SetStatusValidated(SubmissionID) returns (NullResponse);
rpc SetStatusFailed(SubmissionID) returns (NullResponse);
rpc SetStatusUploaded(StatusUploadedRequest) returns (NullResponse);
}
message MapfixID { uint64 ID = 1; }
message MapfixCreate {
uint32 OperationID = 1;
uint32 GameID = 2;
uint64 AssetOwner = 3;
uint64 AssetID = 4;
uint64 AssetVersion = 5;
uint64 TargetAssetID = 6;
string DisplayName = 7;
string Creator = 8;
string Description = 9;
}
message SubmissionID { uint64 ID = 1; }
message SubmissionCreate {
uint32 OperationID = 1;
uint32 GameID = 2;
uint32 Status = 3;
uint32 Roles = 4;
uint64 AssetOwner = 5;
uint64 AssetID = 6;
uint64 AssetVersion = 7;
string DisplayName = 8;
string Creator = 9;
}
message AuditErrorRequest {
uint64 ID = 1;
string ErrorMessage = 2;
}
message Check {
string Name = 1;
string Summary = 2;
bool Passed = 3;
}
message AuditChecklistRequest {
uint64 ID = 1;
repeated Check CheckList = 2;
}
message ValidatedModelRequest {
uint64 ID = 1;
uint64 ValidatedModelID = 2;
uint64 ValidatedModelVersion = 3;
}
message SubmittedRequest {
uint64 ID = 1;
uint64 ModelVersion = 2;
string DisplayName = 3;
string Creator = 4;
uint32 GameID = 5;
}
message StatusUploadedRequest {
uint64 ID = 1;
uint64 UploadedAssetID = 2;
}
message NullResponse {}
// Operations
service ValidatorOperationService {
rpc Fail(OperationFailRequest) returns (NullResponse);
}
message OperationFailRequest {
uint32 OperationID = 1;
string StatusMessage = 2;
}
message Pagination {
uint32 Size = 1;
uint32 Number = 2;
}
// Scripts
service ValidatorScriptService {
rpc Create(ScriptCreate) returns (ScriptID);
rpc Get(ScriptID) returns (Script);
rpc List(ScriptListRequest) returns (ScriptListResponse);
}
enum ResourceType {
ResourceTypeNone = 0;
ResourceTypeMapfix = 1;
ResourceTypeSubmission = 2;
}
message ScriptCreate {
string Name = 1;
string Source = 2;
ResourceType ResourceType = 3;
optional uint64 ResourceID = 4;
}
message ScriptFilter {
optional string Name = 1;
optional string Source = 2;
optional ResourceType ResourceType = 3;
optional uint64 ResourceID = 4;
optional uint64 Hash = 5;
}
message ScriptListRequest {
ScriptFilter Filter = 1;
Pagination Page = 2;
}
message ScriptID { uint64 ID = 1; }
message Script {
uint64 ID = 1;
uint64 Hash = 2;
string Name = 3;
string Source = 4;
ResourceType ResourceType = 5;
optional uint64 ResourceID = 6;
}
message ScriptListResponse { repeated Script Scripts = 1; }
// ScriptPolicies
service ValidatorScriptPolicyService {
rpc Create(ScriptPolicyCreate) returns (ScriptPolicyID);
rpc List(ScriptPolicyListRequest) returns (ScriptPolicyListResponse);
}
enum Policy {
PolicyNone = 0;
PolicyAllowed = 1;
PolicyBlocked = 2;
PolicyDelete = 3;
PolicyReplace = 4;
}
message ScriptPolicyCreate {
uint64 FromScriptID = 1;
uint64 ToScriptID = 2;
Policy Policy = 3;
}
message ScriptPolicyFilter {
optional uint64 FromScriptHash = 1;
optional uint64 ToScriptID = 2;
optional Policy Policy = 3;
}
message ScriptPolicyListRequest {
ScriptPolicyFilter Filter = 1;
Pagination Page = 2;
}
message ScriptPolicyID { uint64 ID = 1; }
message ScriptPolicy {
uint64 ID = 1;
uint64 FromScriptHash = 2;
uint64 ToScriptID = 3;
Policy Policy = 4;
}
message ScriptPolicyListResponse { repeated ScriptPolicy ScriptPolicies = 1; }