diff --git a/models/models.go b/models/models.go index a08dda5..e94927a 100644 --- a/models/models.go +++ b/models/models.go @@ -95,7 +95,7 @@ type PhotoMetadata struct { } type Proposal struct { - OwnerID int `json:"owner_id"` + OwnerID UserID `json:"owner_id"` Description string `json:"description"` How string `json:"how"` } diff --git a/server/constants.go b/server/constants.go index f6dead3..f88102b 100644 --- a/server/constants.go +++ b/server/constants.go @@ -12,6 +12,7 @@ const ( URIDataPeople = "/data/people" URIDataFeatures = "/data/features" URIDataFeaturesPhoto = "/data/features/:feature/photos/:photo" + URIDataProposals = "/data/proposals" URITileserverRoot = "/tileserver" URITileserver = URITileserverRoot + "/*x" URITileTemplate = URITileserverRoot + "/map/tiles/{z}/{x}/{y}.pbf" diff --git a/server/handling.go b/server/handling.go index 9052779..d0bd96f 100644 --- a/server/handling.go +++ b/server/handling.go @@ -105,6 +105,7 @@ func (s *Server) setupRouter() *gin.Engine { router.GET(URIDataPeople, s.handleGETDataPeople) router.GET(URIDataFeatures, s.handleGETDataFeatures) router.GET(URIDataFeaturesPhoto, s.handleGETDataFeaturesPhoto) + router.GET(URIDataProposals, s.handleGETDataProposals) // tileserver router.GET(URITileserver, gin.WrapH(s.tileserverSvSet.Handler())) @@ -354,3 +355,12 @@ func (s *Server) handleGETDataFeaturesPhoto(gc *gin.Context) { gc.Data(http.StatusOK, contentType, photoBytes) } + +func (s *Server) handleGETDataProposals(gc *gin.Context) { + proposals, err := s.getProposals(nil) + if err != nil { + internalError(gc, err) + return + } + gc.JSON(http.StatusOK, proposals) +} diff --git a/server/server.go b/server/server.go index 335f768..65ea7e8 100644 --- a/server/server.go +++ b/server/server.go @@ -971,3 +971,24 @@ func (s *Server) addProposals(conn *sqlite.Conn, proposals []models.Proposal) er s.requestCheckpoint() return nil } + +func (s *Server) getProposals(conn *sqlite.Conn) ([]models.Proposal, error) { + if conn == nil { + conn = s.getDbConn() + defer s.dbpool.Put(conn) + } + + proposals := make([]models.Proposal, 0, 100) + err := sqlitex.Exec(conn, "select owner_id, description, how from proposals", func(stmt *sqlite.Stmt) error { + proposals = append(proposals, models.Proposal{ + OwnerID: models.UserID(stmt.ColumnInt(0)), + Description: stmt.ColumnText(1), + How: stmt.ColumnText(2), + }) + return nil + }) + if err != nil { + return nil, fmt.Errorf("failed to get proposals from db: %w", err) + } + return proposals, nil +}