package requette import ( "api_serveurless_go/bd" "api_serveurless_go/types" "database/sql" "log" "strings" ) func GetAllProjets(nb int,page int) types.Projets { db := bd.GetDB() offset := (page - 1) * nb stmt, err := db.Prepare("SELECT projet.id, projet.name, projet.shortdescriptionfr, GROUP_CONCAT(technologie.name SEPARATOR ',') as technologies FROM projet LEFT JOIN projet_technologie on projet.id = projet_technologie.projet_id LEFT JOIN technologie on projet_technologie.technologie_id = technologie.id GROUP BY projet.id, projet.name, projet.shortdescriptionfr LIMIT ? OFFSET ?") if err != nil { log.Fatal(err) } row, err := stmt.Query(nb, offset) defer stmt.Close() if err != nil { log.Fatal(err) } stmt2, err := db.Prepare("SELECT count(*) FROM projet") if err != nil { log.Fatal(err) } row2, err := stmt2.Query() defer stmt2.Close() if err != nil { log.Fatal(err) } var count int for row2.Next() { err := row2.Scan(&count) if err != nil { log.Fatal(err) } } var projets types.Projets projets.Projets = hydrateProjets(row) projets.Count = count return projets } func GetProjetByID(id int) types.ProjetFull { db := bd.GetDB() stmt, err := db.Prepare("SELECT id, name, shortdescriptionfr, longdescriptionfr, shortdescriptionen, longdescriptionen, linkGithub, linkWeb FROM projet WHERE id = ?") if err != nil { log.Fatal(err) } row := stmt.QueryRow(id) defer stmt.Close() return hydrateProjet(row) } func hydrateProjet(row *sql.Row) types.ProjetFull { var projet types.ProjetFull err := row.Scan(&projet.Id, &projet.Name, &projet.ShortDescriptionFr, &projet.LongDescriptionFr, &projet.ShortDescriptionEn, &projet.LongDescriptionEn, &projet.LinkGithub, &projet.LinkWeb) if err != nil { log.Fatal(err) } return projet } func hydrateProjets(rows *sql.Rows) []types.ProjetShort { var projets []types.ProjetShort for rows.Next() { var projet types.ProjetShort var techs sql.NullString err := rows.Scan(&projet.Id, &projet.Name, &projet.ShortDescriptionFr, &techs) if err != nil { log.Fatal(err) } if techs.Valid && techs.String != "" { projet.Technologies = strings.Split(techs.String, ",") } else { projet.Technologies = []string{} } projets = append(projets, projet) } return projets } func CreateProjet(projet types.Projetcreate) *types.Projetcreate { db := bd.GetDB() stmt, err := db.Prepare("INSERT INTO projet (name, shortdescriptionfr, longdescriptionfr, shortdescriptionen, longdescriptionen, linkGithub, linkWeb, datec) VALUES (?, ?, '', '', '', '', '', CURDATE())") if err != nil { log.Fatal(err) } _, err = stmt.Exec(projet.Name, projet.ShortDescription) if err != nil { log.Fatal(err) return nil } defer stmt.Close() return &projet } func UpdateProjet(projet types.ProjetFull) *types.ProjetFull { db := bd.GetDB() stmt, err := db.Prepare("UPDATE projet SET name = ?, shortdescriptionfr = ?, longdescriptionfr = ?, shortdescriptionen = ?, longdescriptionen = ?, linkGithub = ?, linkWeb = ? WHERE id = ?") if err != nil { log.Fatal(err) } _, err = stmt.Exec(projet.Name, projet.ShortDescriptionFr, projet.LongDescriptionFr, projet.ShortDescriptionEn, projet.LongDescriptionEn, projet.LinkGithub, projet.LinkWeb, projet.Id) if err != nil { log.Fatal(err) return nil } defer stmt.Close() return &projet } func DeleteProjet(id int) bool { db := bd.GetDB() stmt, err := db.Prepare("DELETE FROM projet WHERE id = ?") if err != nil { log.Fatal(err) return false } _, err = stmt.Exec(id) if err != nil { log.Fatal(err) return false } defer stmt.Close() return true }