package main import ( "encoding/json" "errors" "strconv" "srs.epita.fr/fic-server/libfic" ) var ApiThemesRouting = map[string]DispatchFunction{ "GET": listTheme, "POST": creationTheme, "DELETE": deletionTheme, } type uploadedTheme struct { Name string } type uploadedExercice struct { Title string Statement string Hint string Depend *int Gain int VideoURI string } func getTheme(args []string) (fic.Theme, error) { if tid, err := strconv.Atoi(string(args[0])); err != nil { return fic.Theme{}, err } else { return fic.GetTheme(tid) } } func getExercice(args []string) (fic.Exercice, error) { if theme, err := getTheme(args); err != nil { return fic.Exercice{}, err } else if eid, err := strconv.Atoi(string(args[1])); err != nil { return fic.Exercice{}, err } else { return theme.GetExercice(eid) } } func listTheme(args []string, body []byte) (interface{}, error) { if len(args) == 2 { return getExercice(args) } else if len(args) == 1 { return getTheme(args) } else if len(args) == 0 { // List all themes return fic.GetThemes() } else { return nil, nil } } func creationTheme(args []string, body []byte) (interface{}, error) { if len(args) == 1 { if theme, err := getTheme(args); err != nil { return nil, err } else { // Create a new exercice var ue uploadedExercice if err := json.Unmarshal(body, &ue); err != nil { return nil, err } if len(ue.Title) == 0 { return nil, errors.New("Title not filled") } var depend *fic.Exercice = nil if ue.Depend != nil { if d, err := fic.GetExercice(*ue.Depend); err != nil { return nil, err } else { depend = &d } } return theme.AddExercice(ue.Title, ue.Statement, ue.Hint, depend, ue.Gain, ue.VideoURI) } } else if len(args) == 0 { // Create a new theme var ut uploadedTheme if err := json.Unmarshal(body, &ut); err != nil { return nil, err } if len(ut.Name) == 0 { return nil, errors.New("Theme's name not filled") } return fic.CreateTheme(ut.Name) } else { return nil, nil } } func deletionTheme(args []string, body []byte) (interface{}, error) { if len(args) == 2 { if exercice, err := getExercice(args); err != nil { return nil, err } else { return exercice.Delete() } } else if len(args) == 1 { if theme, err := getTheme(args); err != nil { return nil, err } else { return theme.Delete() } } else { return nil, nil } }