admin/api: refactor file API
This commit is contained in:
parent
3e5b4ebad2
commit
973363b3da
3 changed files with 41 additions and 44 deletions
|
@ -1,8 +1,10 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
|
||||
"srs.epita.fr/fic-server/admin/sync"
|
||||
"srs.epita.fr/fic-server/libfic"
|
||||
|
||||
"github.com/julienschmidt/httprouter"
|
||||
|
@ -16,7 +18,21 @@ func init() {
|
|||
router.PUT("/api/files/:fileid", apiHandler(fileHandler(updateFile)))
|
||||
router.DELETE("/api/files/:fileid", apiHandler(fileHandler(deleteFile)))
|
||||
|
||||
router.GET("/api/exercices/:eid/files", apiHandler(exerciceHandler(listExerciceFiles)))
|
||||
router.POST("/api/exercices/:eid/files", apiHandler(exerciceHandler(createExerciceFile)))
|
||||
|
||||
router.GET("/api/exercices/:eid/files/:fid", apiHandler(exerciceFileHandler(showFile)))
|
||||
router.PUT("/api/exercices/:eid/files/:fid", apiHandler(exerciceFileHandler(updateFile)))
|
||||
router.DELETE("/api/exercices/:eid/files/:fid", apiHandler(exerciceFileHandler(deleteFile)))
|
||||
|
||||
// Check
|
||||
router.POST("/api/files/:fileid/check", apiHandler(fileHandler(checkFile)))
|
||||
|
||||
// Synchronize
|
||||
router.POST("/api/sync/exercices/:eid/files", apiHandler(exerciceHandler(
|
||||
func(exercice fic.Exercice, _ []byte) (interface{}, error) {
|
||||
return sync.SyncExerciceFiles(sync.GlobalImporter, exercice), nil
|
||||
})))
|
||||
}
|
||||
|
||||
func listFiles(_ httprouter.Params, body []byte) (interface{}, error) {
|
||||
|
@ -24,6 +40,10 @@ func listFiles(_ httprouter.Params, body []byte) (interface{}, error) {
|
|||
return fic.GetFiles()
|
||||
}
|
||||
|
||||
func listExerciceFiles(exercice fic.Exercice, body []byte) (interface{}, error) {
|
||||
return exercice.GetFiles()
|
||||
}
|
||||
|
||||
func clearFiles(_ httprouter.Params, _ []byte) (interface{}, error) {
|
||||
return fic.ClearFiles()
|
||||
}
|
||||
|
@ -32,6 +52,27 @@ func showFile(file fic.EFile, _ []byte) (interface{}, error) {
|
|||
return file, nil
|
||||
}
|
||||
|
||||
type uploadedFile struct {
|
||||
URI string
|
||||
Digest string
|
||||
}
|
||||
|
||||
func createExerciceFile(exercice fic.Exercice, body []byte) (interface{}, error) {
|
||||
var uf uploadedFile
|
||||
if err := json.Unmarshal(body, &uf); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return sync.ImportFile(sync.GlobalImporter, uf.URI,
|
||||
func(filePath string, origin string) (interface{}, error) {
|
||||
if digest, err := hex.DecodeString(uf.Digest); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return exercice.ImportFile(filePath, origin, digest)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func updateFile(file fic.EFile, body []byte) (interface{}, error) {
|
||||
var uf fic.EFile
|
||||
if err := json.Unmarshal(body, &uf); err != nil {
|
||||
|
|
Reference in a new issue