first commit
This commit is contained in:
commit
823ecdd500
26 files changed
+2110
No files matched your search
@@ -0,0 +1,88 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"gopkg.in/mgo.v2/bson"
|
||||
)
|
||||
|
||||
/*
|
||||
Api structure
|
||||
|
||||
/weblabs
|
||||
POST: create a new weblab. The payload must be
|
||||
{
|
||||
"name": "web lab frendly name",
|
||||
"cases": ["case_name_1", "case_name_2", ..., "case_name_n"],
|
||||
"probabilities": [prob_1, prob_2, ..., prob_n], // the sum must be 1
|
||||
"private": false,
|
||||
}
|
||||
GET:
|
||||
returns the list of all the created weblabs
|
||||
|
||||
/weblabs/<id>
|
||||
GET: returns the weblab as
|
||||
|
||||
/weblabs/<id>/history
|
||||
GET: get the history
|
||||
*/
|
||||
|
||||
// the smallest value that makes two floats the same.
|
||||
const epsilon float64 = 0.000000001
|
||||
|
||||
type Cases struct {
|
||||
Name string `json:"name"`
|
||||
Probability float64 `json:"probability"`
|
||||
}
|
||||
|
||||
type WeblabDefinition struct {
|
||||
Id bson.ObjectId `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Cases []*Cases `json:"cases"`
|
||||
Private bool `json:"private"`
|
||||
}
|
||||
|
||||
func (w *WeblabDefinition) verifyCasesStructure() error {
|
||||
names := make(map[string]bool)
|
||||
for _, c := range w.Cases {
|
||||
if c.Probability+epsilon < 0 {
|
||||
return errors.New("probability cannot be less 0")
|
||||
}
|
||||
if c.Probability-epsilon > 1 {
|
||||
return errors.New("probability cannot be greater 0")
|
||||
}
|
||||
c.Name = strings.Trim(c.Name, " \t\n\r")
|
||||
if c.Name == "" {
|
||||
return errors.New("weblab cannot have empty names")
|
||||
}
|
||||
names[c.Name] = true
|
||||
}
|
||||
if len(names) != len(w.Cases) {
|
||||
return errors.New("multiple weblab cannot have the same name")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (w *WeblabDefinition) VerifyProbabilitySum() {
|
||||
|
||||
}
|
||||
func (w *WeblabDefinition) Verify() error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreateNewWeblab(w http.ResponseWriter, request *http.Request) {
|
||||
d := json.NewDecoder(request.Body)
|
||||
wab := new(WeblabDefinition)
|
||||
if err := d.Decode(d); err != nil {
|
||||
w.WriteHeader(400)
|
||||
fmt.Fprint(w, err.Error())
|
||||
return
|
||||
}
|
||||
wab.Id = bson.NewObjectId()
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user