|
1 | 1 | package handlers |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "encoding/csv" |
| 5 | + "fmt" |
4 | 6 | "log" |
5 | 7 | "net/http" |
6 | 8 | "portfolio-backend/internal/db" |
7 | 9 | "portfolio-backend/internal/models" |
| 10 | + "strings" |
8 | 11 |
|
9 | 12 | "github.com/gin-gonic/gin" |
10 | 13 | ) |
@@ -160,3 +163,45 @@ func FavoriteProjectHandler(c *gin.Context) { |
160 | 163 |
|
161 | 164 | c.Status(http.StatusNoContent) |
162 | 165 | } |
| 166 | + |
| 167 | +func ExportProjectsToCSVHandler(c *gin.Context) { |
| 168 | + user := c.MustGet("user").(models.User) |
| 169 | + |
| 170 | + var projects []models.Project |
| 171 | + if err := db.DB.Where("user_id = ?", user.ID).Find(&projects).Error; err != nil { |
| 172 | + c.JSON(http.StatusInternalServerError, gin.H{"error": "Erro ao buscar projetos"}) |
| 173 | + log.Println("Erro ao buscar projetos:", err) |
| 174 | + return |
| 175 | + } |
| 176 | + |
| 177 | + var csvContent []string |
| 178 | + csvContent = append(csvContent, "ID,Nome,Descrição,Status,Repo URL,Tecnologias,Data de Criação") |
| 179 | + |
| 180 | + for _, project := range projects { |
| 181 | + line := fmt.Sprintf("%s,%s,%s,%s,%s,%s,%s", |
| 182 | + project.ID.String(), |
| 183 | + project.Name, |
| 184 | + project.Description, |
| 185 | + project.Status, |
| 186 | + project.GitHubUrl, |
| 187 | + strings.Join(project.TechStack, "|"), |
| 188 | + project.CreatedAt.Format("2006-01-02 15:04:05"), |
| 189 | + ) |
| 190 | + csvContent = append(csvContent, line) |
| 191 | + } |
| 192 | + |
| 193 | + c.Header("Content-Type", "text/csv") |
| 194 | + c.Header("Content-Disposition", "attachment;filename=projetos.csv") |
| 195 | + c.Writer.WriteHeader(http.StatusOK) |
| 196 | + csvWriter := csv.NewWriter(c.Writer) |
| 197 | + |
| 198 | + for _, line := range csvContent { |
| 199 | + record := strings.Split(line, ",") |
| 200 | + if err := csvWriter.Write(record); err != nil { |
| 201 | + c.JSON(http.StatusInternalServerError, gin.H{"error": "Erro ao gerar CSV"}) |
| 202 | + log.Println("Erro ao escrever no CSV:", err) |
| 203 | + return |
| 204 | + } |
| 205 | + } |
| 206 | + csvWriter.Flush() |
| 207 | +} |
0 commit comments