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 }