@@ -8,97 +8,51 @@ import (
88 "github.com/gin-gonic/gin"
99 "github.com/go-playground/validator/v10"
1010 "github.com/google/uuid"
11- "gorm.io/gorm"
12- k8sErrors "k8s.io/apimachinery/pkg/api/errors"
1311
1412 v1Err "agones-minecraft/errors/v1"
1513 "agones-minecraft/middleware/session"
1614 gamev1Model "agones-minecraft/models/v1/game"
1715 apiErr "agones-minecraft/resources/api/v1/errors"
1816 gamev1Resource "agones-minecraft/resources/api/v1/game"
1917 gamev1Service "agones-minecraft/services/api/v1/game"
20- "agones-minecraft/services/k8s/agones"
2118)
2219
2320var (
24- ErrGameNotFound error = errors .New ("game server not found" )
21+ ErrGameNotFound error = errors .New ("game server not found" )
22+ ErrMissingRequestBody error = errors .New ("missing request body" )
2523)
2624
2725func ListGamesForUser (c * gin.Context ) {
2826 v , _ := c .Get (session .SessionUserIDKey )
2927 userId := v .(uuid.UUID )
3028
31- var games []* gamev1Model .Game
29+ games := []* gamev1Resource .Game {}
3230
3331 if err := gamev1Service .ListGamesForUser (& games , userId ); err != nil {
3432 c .Error (apiErr .NewInternalServerError (err , v1Err .ErrListingGames ))
3533 return
3634 }
3735
38- gameServers := []* gamev1Resource.Game {}
39-
40- for _ , game := range games {
41- gameServers = append (gameServers , & gamev1Resource.Game {
42- ID : game .ID ,
43- Name : game .Name ,
44- Address : game .Address ,
45- Edition : game .Edition ,
46- State : game .State ,
47- CreatedAt : game .CreatedAt ,
48- })
49- }
50-
51- c .JSON (http .StatusOK , gameServers )
36+ c .JSON (http .StatusOK , games )
5237}
5338
5439func GetGame (c * gin.Context ) {
55- name := c .Param ("name" )
56- gameServer , err := agones .Client ().Get (name )
57- if err != nil {
58- if k8sErrors .IsNotFound (err ) {
59- c .Error (apiErr .NewNotFoundError (ErrGameNotFound , v1Err .ErrGameNotFound ))
60- } else {
61- c .Error (apiErr .NewInternalServerError (err , v1Err .ErrRetrievingGameServer ))
62- }
63- return
64- }
65- c .JSON (http .StatusOK , gameServer )
66- }
40+ v , _ := c .Get (session .SessionUserIDKey )
41+ userId := v .(uuid.UUID )
6742
68- func GetGameState (c * gin.Context ) {
6943 name := c .Param ("name" )
7044
71- var game gamev1Resource.GameStatus
72-
73- if err := agones .GetGameStatusByName (& game , name ); err != nil {
74- if k8sErrors .IsNotFound (err ) {
75- if err := gamev1Service .GetGameStatusByName (& game , name ); err != nil {
76- if err == gorm .ErrRecordNotFound {
77- c .Error (apiErr .NewNotFoundError (ErrGameNotFound , v1Err .ErrGameNotFound ))
78- } else {
79- c .Error (apiErr .NewInternalServerError (err , v1Err .ErrRetrievingGameServerFromDB ))
80- }
81- return
82- }
45+ var game gamev1Resource.Game
46+
47+ if err := gamev1Service .GetGameByNameAndUserId (& game , name , userId ); err != nil {
48+ if err == gamev1Service .ErrGameServerNotFound {
49+ c .Error (apiErr .NewNotFoundError (ErrGameNotFound , v1Err .ErrGameNotFound ))
8350 } else {
8451 c .Error (apiErr .NewInternalServerError (err , v1Err .ErrRetrievingGameServer ))
85- return
86- }
87- } else {
88- v , ok := c .Get (session .SessionUserIDKey )
89- if ok {
90- userId := v .(uuid.UUID ).String ()
91- if userId == game .UserID .String () {
92- c .JSON (http .StatusOK , game )
93- return
94- }
9552 }
53+ return
9654 }
9755
98- game .Address = nil
99- game .Hostname = nil
100- game .Port = nil
101-
10256 c .JSON (http .StatusOK , game )
10357}
10458
@@ -107,25 +61,21 @@ func CreateJava(c *gin.Context) {
10761 userId := v .(uuid.UUID )
10862
10963 var body gamev1Resource.CreateGameBody
110- if err := c .ShouldBindJSON (& body ); err != nil && err != io . EOF {
64+ if err := c .ShouldBindJSON (& body ); err != nil {
11165 var verrs validator.ValidationErrors
11266 if errors .As (err , & verrs ) {
11367 c .Errors = append (c .Errors , apiErr .NewValidationError (verrs , v1Err .ErrCreateGameServerValidation )... )
68+ } else if err == io .EOF {
69+ c .Error (apiErr .NewBadRequestError (ErrMissingRequestBody , v1Err .ErrMissingRequestBody ))
11470 } else {
11571 c .Error (apiErr .NewInternalServerError (err , v1Err .ErrMalformedJSON ))
11672 }
11773 return
11874 }
11975
120- game := gamev1Model.Game {
121- Address : * body .Address ,
122- UserID : userId ,
123- Edition : gamev1Model .JavaEdition ,
124- }
125- gs := agones .NewJavaServer ()
126- agones .SetUserId (gs , userId ) // Set userId label
76+ var game gamev1Resource.Game
12777
128- if err := gamev1Service .CreateGame (& game , gs ); err != nil {
78+ if err := gamev1Service .CreateGame (& game , gamev1Model . JavaEdition , body , userId ); err != nil {
12979 if err == gamev1Service .ErrSubdomainTaken {
13080 c .Error (apiErr .NewBadRequestError (err , v1Err .ErrSubdomainTaken ))
13181 } else {
@@ -134,61 +84,38 @@ func CreateJava(c *gin.Context) {
13484 return
13585 }
13686
137- createdGame := gamev1Resource.Game {
138- ID : game .ID ,
139- UserID : game .UserID ,
140- Name : game .Name ,
141- Address : agones .GetHostname (gs ),
142- Edition : game .Edition ,
143- State : game .State ,
144- CreatedAt : game .CreatedAt ,
145- }
146-
147- c .JSON (http .StatusCreated , createdGame )
87+ c .JSON (http .StatusCreated , game )
14888}
14989
15090func CreateBedrock (c * gin.Context ) {
15191 v , _ := c .Get (session .SessionUserIDKey )
15292 userId := v .(uuid.UUID )
15393
15494 var body gamev1Resource.CreateGameBody
155- if err := c .ShouldBindJSON (& body ); err != nil && err != io . EOF {
95+ if err := c .ShouldBindJSON (& body ); err != nil {
15696 var verrs validator.ValidationErrors
15797 if errors .As (err , & verrs ) {
15898 c .Errors = append (c .Errors , apiErr .NewValidationError (verrs , v1Err .ErrCreateGameServerValidation )... )
99+ } else if err == io .EOF {
100+ c .Error (apiErr .NewBadRequestError (ErrMissingRequestBody , v1Err .ErrMissingRequestBody ))
159101 } else {
160102 c .Error (apiErr .NewInternalServerError (err , v1Err .ErrMalformedJSON ))
161103 }
162104 return
163105 }
164106
165- game := gamev1Model.Game {
166- Address : * body .Address ,
167- UserID : userId ,
168- Edition : gamev1Model .BedrockEdition ,
169- }
170- gs := agones .NewBedrockServer ()
171- agones .SetUserId (gs , userId ) // Set userId label
107+ var game gamev1Resource.Game
172108
173- if err := gamev1Service .CreateGame (& game , gs ); err != nil {
109+ if err := gamev1Service .CreateGame (& game , gamev1Model . BedrockEdition , body , userId ); err != nil {
174110 if err == gamev1Service .ErrSubdomainTaken {
175111 c .Error (apiErr .NewBadRequestError (err , v1Err .ErrSubdomainTaken ))
176112 } else {
177113 c .Error (apiErr .NewInternalServerError (err , v1Err .ErrCreatingGame ))
178114 }
179115 return
180116 }
181- createdGame := gamev1Resource.Game {
182- ID : game .ID ,
183- UserID : game .UserID ,
184- Name : game .Name ,
185- Address : agones .GetHostname (gs ),
186- Edition : game .Edition ,
187- State : game .State ,
188- CreatedAt : game .CreatedAt ,
189- }
190117
191- c .JSON (http .StatusCreated , createdGame )
118+ c .JSON (http .StatusCreated , game )
192119}
193120
194121func DeleteGame (c * gin.Context ) {
@@ -197,9 +124,7 @@ func DeleteGame(c *gin.Context) {
197124
198125 name := c .Param ("name" )
199126
200- var game gamev1Model.Game
201-
202- if err := gamev1Service .DeleteGame (& game , userId , name ); err != nil {
127+ if err := gamev1Service .DeleteGame (userId , name ); err != nil {
203128 if err == gamev1Service .ErrGameServerNotFound {
204129 c .Error (apiErr .NewNotFoundError (err , v1Err .ErrGameNotFound ))
205130 } else {
0 commit comments