Some checks failed
continuous-integration/drone/push Build is failing
Creates a GRPC controller for Submissions and Mapfixes. This is intended to be used from the AOR group games via game-rpc running in "maptest" mode. Reviewed-on: #317 Co-authored-by: Rhys Lloyd <krakow20@gmail.com> Co-committed-by: Rhys Lloyd <krakow20@gmail.com>
150 lines
4.6 KiB
Go
150 lines
4.6 KiB
Go
package controller
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.itzana.me/strafesnet/go-grpc/mapfixes"
|
|
"git.itzana.me/strafesnet/maps-service/pkg/datastore"
|
|
"git.itzana.me/strafesnet/maps-service/pkg/model"
|
|
"git.itzana.me/strafesnet/maps-service/pkg/service"
|
|
)
|
|
|
|
type Mapfixes struct {
|
|
*mapfixes.UnimplementedMapfixesServiceServer
|
|
inner *service.Service
|
|
}
|
|
|
|
func NewMapfixesController(
|
|
inner *service.Service,
|
|
) Mapfixes {
|
|
return Mapfixes{
|
|
inner: inner,
|
|
}
|
|
}
|
|
|
|
func (svc *Mapfixes) Get(ctx context.Context, request *mapfixes.MapfixId) (*mapfixes.MapfixResponse, error) {
|
|
item, err := svc.inner.GetMapfix(ctx, request.ID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var validated_asset_id *uint64
|
|
if item.ValidatedAssetID != 0 {
|
|
validated_asset_id = &item.ValidatedAssetID
|
|
}
|
|
var validated_asset_version *uint64
|
|
if item.ValidatedAssetVersion != 0 {
|
|
validated_asset_version = &item.ValidatedAssetVersion
|
|
}
|
|
return &mapfixes.MapfixResponse{
|
|
ID: item.ID,
|
|
DisplayName: item.DisplayName,
|
|
Creator: item.Creator,
|
|
GameID: uint32(item.GameID),
|
|
CreatedAt: item.CreatedAt.Unix(),
|
|
UpdatedAt: item.UpdatedAt.Unix(),
|
|
Submitter: uint64(item.Submitter),
|
|
AssetVersion: uint64(item.AssetVersion),
|
|
AssetID: item.AssetID,
|
|
ValidatedAssetID: validated_asset_id,
|
|
ValidatedAssetVersion: validated_asset_version,
|
|
TargetAssetID: item.TargetAssetID,
|
|
StatusID: mapfixes.MapfixStatus(item.StatusID),
|
|
}, nil
|
|
}
|
|
func (svc *Mapfixes) GetList(ctx context.Context, request *mapfixes.MapfixIdList) (*mapfixes.MapfixList, error) {
|
|
items, err := svc.inner.GetMapfixList(ctx, request.ID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp := mapfixes.MapfixList{}
|
|
resp.Mapfixes = make([]*mapfixes.MapfixResponse, len(items))
|
|
for i, item := range items {
|
|
var validated_asset_id *uint64
|
|
if item.ValidatedAssetID != 0 {
|
|
validated_asset_id = &item.ValidatedAssetID
|
|
}
|
|
var validated_asset_version *uint64
|
|
if item.ValidatedAssetVersion != 0 {
|
|
validated_asset_version = &item.ValidatedAssetVersion
|
|
}
|
|
resp.Mapfixes[i] = &mapfixes.MapfixResponse{
|
|
ID: item.ID,
|
|
DisplayName: item.DisplayName,
|
|
Creator: item.Creator,
|
|
GameID: uint32(item.GameID),
|
|
CreatedAt: item.CreatedAt.Unix(),
|
|
UpdatedAt: item.UpdatedAt.Unix(),
|
|
Submitter: uint64(item.Submitter),
|
|
AssetVersion: uint64(item.AssetVersion),
|
|
AssetID: item.AssetID,
|
|
ValidatedAssetID: validated_asset_id,
|
|
ValidatedAssetVersion: validated_asset_version,
|
|
TargetAssetID: item.TargetAssetID,
|
|
StatusID: mapfixes.MapfixStatus(item.StatusID),
|
|
}
|
|
}
|
|
|
|
return &resp, nil
|
|
}
|
|
func (svc *Mapfixes) List(ctx context.Context, request *mapfixes.ListRequest) (*mapfixes.MapfixList, error) {
|
|
if request.Page == nil {
|
|
return nil, PageError
|
|
}
|
|
|
|
filter := service.NewMapfixFilter()
|
|
if request.Filter != nil {
|
|
if request.Filter.DisplayName != nil {
|
|
filter.SetDisplayName(*request.Filter.DisplayName)
|
|
}
|
|
if request.Filter.Creator != nil {
|
|
filter.SetCreator(*request.Filter.Creator)
|
|
}
|
|
if request.Filter.GameID != nil {
|
|
filter.SetGameID(*request.Filter.GameID)
|
|
}
|
|
if request.Filter.Submitter != nil {
|
|
filter.SetSubmitter(*request.Filter.Submitter)
|
|
}
|
|
}
|
|
|
|
items, err := svc.inner.ListMapfixes(ctx, filter, model.Page{
|
|
Number: int32(request.Page.Number),
|
|
Size: int32(request.Page.Size),
|
|
}, datastore.ListSortDateDescending)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp := mapfixes.MapfixList{}
|
|
resp.Mapfixes = make([]*mapfixes.MapfixResponse, len(items))
|
|
for i, item := range items {
|
|
var validated_asset_id *uint64
|
|
if item.ValidatedAssetID != 0 {
|
|
validated_asset_id = &item.ValidatedAssetID
|
|
}
|
|
var validated_asset_version *uint64
|
|
if item.ValidatedAssetVersion != 0 {
|
|
validated_asset_version = &item.ValidatedAssetVersion
|
|
}
|
|
resp.Mapfixes[i] = &mapfixes.MapfixResponse{
|
|
ID: item.ID,
|
|
DisplayName: item.DisplayName,
|
|
Creator: item.Creator,
|
|
GameID: uint32(item.GameID),
|
|
CreatedAt: item.CreatedAt.Unix(),
|
|
UpdatedAt: item.UpdatedAt.Unix(),
|
|
Submitter: uint64(item.Submitter),
|
|
AssetVersion: uint64(item.AssetVersion),
|
|
AssetID: item.AssetID,
|
|
ValidatedAssetID: validated_asset_id,
|
|
ValidatedAssetVersion: validated_asset_version,
|
|
TargetAssetID: item.TargetAssetID,
|
|
StatusID: mapfixes.MapfixStatus(item.StatusID),
|
|
}
|
|
}
|
|
|
|
return &resp, nil
|
|
}
|