feat: Initialize project with MySQL database and API for managing projects and technologies

- Created SQL script to set up database tables for projects and technologies.
- Added Docker Compose configuration for application and MySQL service.
- Implemented API endpoints for CRUD operations on technologies.
- Defined data types for projects and technologies.
- Established routing for API endpoints.
This commit is contained in:
2026-02-10 09:45:25 +01:00
parent 4335fd5cae
commit 4b5069d179
16 changed files with 615 additions and 178 deletions
+107
View File
@@ -0,0 +1,107 @@
package requette
import (
"api_serveurless_go/bd"
"api_serveurless_go/types"
"database/sql"
"log"
)
func GetAllTechnologies() types.Technologies {
db := bd.GetDB()
stmt, err := db.Prepare("SELECT * FROM technologie")
if err != nil {
log.Fatal(err)
}
row, err := stmt.Query()
defer stmt.Close()
if err != nil {
log.Fatal(err)
}
stmt2, err := db.Prepare("SELECT count(*) FROM technologie")
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 technologies types.Technologies
technologies.Technologies = hydrateTechnologies(row)
technologies.Count = count
return technologies
}
func hydrateTechnologies(rows *sql.Rows) []types.TechnologieShort {
var technologies []types.TechnologieShort
for rows.Next() {
var technologie types.TechnologieShort
err := rows.Scan(&technologie.Id, &technologie.Name)
if err != nil {
log.Fatal(err)
}
technologies = append(technologies, technologie)
}
return technologies
}
func CreateTechnologie(projet types.TechnologieCreate) *types.TechnologieCreate {
db := bd.GetDB()
stmt, err := db.Prepare("INSERT INTO technologie (name) VALUES (?)")
if err != nil {
log.Fatal(err)
}
_, err = stmt.Exec(projet.Name)
if err != nil {
log.Fatal(err)
return nil
}
defer stmt.Close()
return &projet
}
func UpdateTechnologie(technologie types.TechnologieFull) *types.TechnologieFull {
db := bd.GetDB()
stmt, err := db.Prepare("UPDATE technologie SET name = ? WHERE id = ?")
if err != nil {
log.Fatal(err)
}
_, err = stmt.Exec(technologie.Name, technologie.Id)
if err != nil {
log.Fatal(err)
return nil
}
defer stmt.Close()
return &technologie
}
func DeleteTechnologie(id int) bool {
db := bd.GetDB()
stmt, err := db.Prepare("DELETE FROM technologie 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
}