FloorVisualizer/internal/repository/project_repo.go

80 lines
2.7 KiB
Go
Raw Normal View History

package repository
import (
"database/sql"
"fmt"
"floorvisualizer/internal/model"
)
func CreateProject(d *sql.DB, userID, name, originalURL, generatedURL, floorStyle, pattern, roomType string) (*model.Project, error) {
var p model.Project
err := d.QueryRow(`
INSERT INTO projects (user_id, name, original_image_url, generated_image_url, floor_style, pattern, room_type)
VALUES ($1,$2,$3,$4,$5,$6,$7)
RETURNING id, user_id, name, original_image_url, generated_image_url, floor_style, pattern, room_type, created_at, updated_at
`, userID, name, originalURL, generatedURL, floorStyle, pattern, roomType).Scan(
&p.ID, &p.UserID, &p.Name, &p.OriginalImageURL, &p.GeneratedImageURL,
&p.FloorStyle, &p.Pattern, &p.RoomType, &p.CreatedAt, &p.UpdatedAt)
if err != nil {
return nil, fmt.Errorf("create project: %w", err)
}
return &p, nil
}
func UpdateProject(d *sql.DB, id, userID, name string) (*model.Project, error) {
var p model.Project
err := d.QueryRow(`
UPDATE projects SET name=$1, updated_at=now() WHERE id=$2 AND user_id=$3
RETURNING id, user_id, name, original_image_url, generated_image_url, floor_style, pattern, room_type, created_at, updated_at
`, name, id, userID).Scan(
&p.ID, &p.UserID, &p.Name, &p.OriginalImageURL, &p.GeneratedImageURL,
&p.FloorStyle, &p.Pattern, &p.RoomType, &p.CreatedAt, &p.UpdatedAt)
if err != nil {
return nil, fmt.Errorf("update project: %w", err)
}
return &p, nil
}
func DeleteProject(d *sql.DB, id, userID string) error {
_, err := d.Exec(`DELETE FROM projects WHERE id=$1 AND user_id=$2`, id, userID)
return err
}
func ListProjects(d *sql.DB, userID string) ([]model.Project, error) {
rows, err := d.Query(`
SELECT id, user_id, name, original_image_url, generated_image_url,
floor_style, pattern, room_type, created_at, updated_at
FROM projects WHERE user_id=$1 ORDER BY created_at DESC
`, userID)
if err != nil {
return nil, err
}
defer rows.Close()
var out []model.Project
for rows.Next() {
var p model.Project
if err := rows.Scan(&p.ID, &p.UserID, &p.Name, &p.OriginalImageURL, &p.GeneratedImageURL,
&p.FloorStyle, &p.Pattern, &p.RoomType, &p.CreatedAt, &p.UpdatedAt); err != nil {
return nil, err
}
out = append(out, p)
}
return out, rows.Err()
}
func GetProject(d *sql.DB, id, userID string) (*model.Project, error) {
var p model.Project
err := d.QueryRow(`
SELECT id, user_id, name, original_image_url, generated_image_url,
floor_style, pattern, room_type, created_at, updated_at
FROM projects WHERE id=$1 AND user_id=$2
`, id, userID).Scan(
&p.ID, &p.UserID, &p.Name, &p.OriginalImageURL, &p.GeneratedImageURL,
&p.FloorStyle, &p.Pattern, &p.RoomType, &p.CreatedAt, &p.UpdatedAt)
if err != nil {
return nil, err
}
return &p, nil
}