mirror of
https://github.com/Cernobor/oko-server.git
synced 2025-02-24 08:27:17 +00:00
Utility APIs for app version management.
All checks were successful
continuous-integration/drone Build is passing
All checks were successful
continuous-integration/drone Build is passing
* GETing individual app versions. * DELETEing individual app versions. Fix #3
This commit is contained in:
parent
f9850c3264
commit
90f8fef40a
@ -6,6 +6,7 @@ const (
|
|||||||
URIHardFail = "/hard-fail"
|
URIHardFail = "/hard-fail"
|
||||||
URISoftFail = "/soft-fail"
|
URISoftFail = "/soft-fail"
|
||||||
URIAppVersions = "/app-versions"
|
URIAppVersions = "/app-versions"
|
||||||
|
URIAppVersion = "/app-versions/:version"
|
||||||
URIReinit = "/reinit"
|
URIReinit = "/reinit"
|
||||||
URIMapPack = "/mappack"
|
URIMapPack = "/mappack"
|
||||||
URIHandshake = "/handshake"
|
URIHandshake = "/handshake"
|
||||||
|
@ -115,6 +115,8 @@ func (s *Server) setupRouter() *gin.Engine {
|
|||||||
})
|
})
|
||||||
router.GET(URIAppVersions, s.handleGETAppVersions)
|
router.GET(URIAppVersions, s.handleGETAppVersions)
|
||||||
router.POST(URIAppVersions, s.handlePOSTAppVersions)
|
router.POST(URIAppVersions, s.handlePOSTAppVersions)
|
||||||
|
router.GET(URIAppVersion, s.handleGETAppVersion)
|
||||||
|
router.DELETE(URIAppVersion, s.handleDELETEAppVersion)
|
||||||
router.POST(URIReinit, s.handlePOSTReset)
|
router.POST(URIReinit, s.handlePOSTReset)
|
||||||
|
|
||||||
return router
|
return router
|
||||||
@ -179,6 +181,44 @@ func (s *Server) handlePOSTAppVersions(gc *gin.Context) {
|
|||||||
gc.Status(http.StatusNoContent)
|
gc.Status(http.StatusNoContent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) handleGETAppVersion(gc *gin.Context) {
|
||||||
|
version := gc.Param("version")
|
||||||
|
if version == "" {
|
||||||
|
badRequest(gc, fmt.Errorf("version not provided"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ver, err := s.getAppVersion(version)
|
||||||
|
if err != nil {
|
||||||
|
internalError(gc, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if ver == nil {
|
||||||
|
gc.Status(http.StatusNotFound)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
gc.JSON(http.StatusOK, ver)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) handleDELETEAppVersion(gc *gin.Context) {
|
||||||
|
version := gc.Param("version")
|
||||||
|
if version == "" {
|
||||||
|
badRequest(gc, fmt.Errorf("version not provided"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
deleted, err := s.deleteAppVersion(version)
|
||||||
|
if err != nil {
|
||||||
|
internalError(gc, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !deleted {
|
||||||
|
gc.Status(http.StatusNotFound)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
gc.Status(http.StatusNoContent)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Server) handlePOSTReset(gc *gin.Context) {
|
func (s *Server) handlePOSTReset(gc *gin.Context) {
|
||||||
err := s.initDB(true)
|
err := s.initDB(true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -434,6 +434,44 @@ func (s *Server) putAppVersion(versionInfo *models.AppVersionInfo) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) getAppVersion(version string) (*models.AppVersionInfo, error) {
|
||||||
|
conn := s.getDbConn()
|
||||||
|
defer s.dbpool.Put(conn)
|
||||||
|
|
||||||
|
var v *models.AppVersionInfo
|
||||||
|
err := sqlitex.Exec(conn, "select version, address from app_versions where version = ?", func(stmt *sqlite.Stmt) error {
|
||||||
|
verStr := stmt.ColumnText(0)
|
||||||
|
ver, err := semver.NewVersion(verStr)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to parse version string %s from db: %w", verStr, err)
|
||||||
|
}
|
||||||
|
addr := stmt.ColumnText(1)
|
||||||
|
v = &models.AppVersionInfo{
|
||||||
|
Version: *ver,
|
||||||
|
Address: addr,
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}, version)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to retrieve app version %s from db: %w", version, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return v, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) deleteAppVersion(version string) (bool, error) {
|
||||||
|
conn := s.getDbConn()
|
||||||
|
defer s.dbpool.Put(conn)
|
||||||
|
|
||||||
|
err := sqlitex.Exec(conn, "delete from app_versions where version = ?", nil, version)
|
||||||
|
if err != nil {
|
||||||
|
return false, fmt.Errorf("failed to delete app version %s from db: %w", version, err)
|
||||||
|
}
|
||||||
|
n := conn.Changes()
|
||||||
|
|
||||||
|
return n > 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Server) handshake(hc models.HandshakeChallenge) (models.UserID, error) {
|
func (s *Server) handshake(hc models.HandshakeChallenge) (models.UserID, error) {
|
||||||
conn := s.getDbConn()
|
conn := s.getDbConn()
|
||||||
defer s.dbpool.Put(conn)
|
defer s.dbpool.Put(conn)
|
||||||
|
Loading…
Reference in New Issue
Block a user