11package main
22
33import (
4- "github.com/gofiber/fiber"
5- "github.com/opentreehole/go-common"
4+ "github.com/gin-gonic/gin"
65 "gorm.io/gorm"
6+ "net/http"
7+ "slices"
8+ "strconv"
79)
810
9- func ListFloorsInAHole (c * fiber.Ctx ) error {
10- // validate
11- holeID , err := c .ParamsInt ("id" )
11+ func ListFloorsInASpecialHole (c * gin.Context ) {
12+ var err error
13+ idString := c .Param ("holeID" )
14+ holeID , err := strconv .Atoi (idString )
1215 if err != nil {
13- return err
16+ c .String (http .StatusBadRequest , "invalid hole holeID: %s" , idString )
17+ return
18+ }
19+ if ! slices .Contains (Config .SpecialHoleIDs , holeID ) {
20+ c .String (http .StatusForbidden , "hole %d is not a special hole" , holeID )
21+ return
1422 }
1523
1624 var query ListModel
17- err = common . ValidateQuery ( c , & query )
18- if err != nil {
19- return err
25+ if err := c . ShouldBindQuery ( & query ); err != nil {
26+ c . String ( http . StatusBadRequest , "invalid query: %v" , err )
27+ return
2028 }
21-
2229 // get floors
2330 var floors Floors
2431 // use ranking field to locate faster
25- querySet , err := floors .MakeQuerySet (& holeID , & query .Offset , & query .Size , c )
32+ querySet , err := floors .MakeQuerySet (& holeID , & query .Offset , & query .Size )
2633 if err != nil {
27- return err
34+ c .String (http .StatusInternalServerError , "failed to make query set: %v" , err )
35+ return
2836 }
2937 result := querySet .Order (query .OrderBy + " " + query .Sort ).
3038 Find (& floors )
3139 if result .Error != nil {
32- return result .Error
40+ c .String (http .StatusInternalServerError , "failed to query floors: %v" , result .Error )
41+ return
3342 }
3443
35- return floors . Preprocess ( c )
44+ c . JSON ( http . StatusOK , floors )
3645}
3746
38- func (floors Floors ) MakeQuerySet (holeID * int , offset , size * int , c * fiber.Ctx ) (* gorm.DB , error ) {
47+ func (floors Floors ) MakeQuerySet (holeID * int , offset , size * int ) (* gorm.DB , error ) {
48+ var querySet * gorm.DB
3949 if holeID != nil {
4050 querySet = DB .Preload ("Mention" ).Where ("hole_id = ?" , holeID )
4151 }
@@ -48,30 +58,3 @@ func (floors Floors) MakeQuerySet(holeID *int, offset, size *int, c *fiber.Ctx)
4858 }
4959 return querySet , nil
5060}
51-
52- func (floors Floors ) Preprocess (c * fiber.Ctx ) (err error ) {
53- userID , err := common .GetUserID (c )
54- if err != nil {
55- return
56- }
57-
58- // get floors' like
59- err = floors .loadFloorLikes (c )
60- if err != nil {
61- return
62- }
63-
64- // set floors IsMe
65- for _ , floor := range floors {
66- floor .IsMe = userID == floor .UserID
67- }
68-
69- // set some default values
70- for _ , floor := range floors {
71- err = floor .SetDefaults (c )
72- if err != nil {
73- return
74- }
75- }
76- return
77- }
0 commit comments