WIP: Keep writing projectS
Signed-off-by: Nikolai Rodionov <iam@allanger.xyz>
This commit is contained in:
@@ -3,7 +3,11 @@ package repository
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/jackc/pgerrcode"
|
||||
"github.com/jackc/pgx/v5/pgconn"
|
||||
)
|
||||
|
||||
type ProjectData struct {
|
||||
@@ -13,7 +17,7 @@ type ProjectData struct {
|
||||
Description string
|
||||
CreatedBy string
|
||||
CreatedAt time.Time
|
||||
ArchivedAt sql.NullTime
|
||||
ClosedAt sql.NullTime
|
||||
Blocked bool
|
||||
UpdatedAt time.Time
|
||||
UpdatedBy string
|
||||
@@ -23,18 +27,67 @@ type ProjectData struct {
|
||||
func CreateProject(ctx context.Context, db *sql.DB, data *ProjectData) error {
|
||||
query := `
|
||||
INSERT INTO projects
|
||||
(uuid, name, slug, )
|
||||
(uuid, name, slug, description, owner_user_id, billing_account_id, created_by, created_at, updated_by, updated_at)
|
||||
VALUES
|
||||
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
|
||||
`
|
||||
|
||||
if _, err := db.ExecContext(ctx, query,
|
||||
data.UUID, data.Name, data.Slug, data.Description, data.CreatedBy,
|
||||
data.CreatedBy, data.CreatedBy, data.CreatedAt, data.CreatedBy, data.CreatedAt); err != nil {
|
||||
var pgErr *pgconn.PgError
|
||||
if errors.As(err, &pgErr) {
|
||||
switch pgErr.Code {
|
||||
case pgerrcode.UniqueViolation:
|
||||
return ErrAlreadyExists
|
||||
case pgerrcode.CheckViolation:
|
||||
return ErrCheckNotPassed
|
||||
}
|
||||
return err
|
||||
}
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetProjectByID returns a project from the database
|
||||
func GetProjectByID(ctx context.Context, db *sql.DB, projectID string) (data *ProjectData, err error) {
|
||||
return nil, nil
|
||||
func GetProjectByID(ctx context.Context, db *sql.DB, projectID string) (*ProjectData, error) {
|
||||
data := &ProjectData{}
|
||||
query := `
|
||||
SELECT uuid, name, slug, description, owner_user_id, closed_at, created_at
|
||||
FROM projects
|
||||
WHERE uuid=$1`
|
||||
|
||||
if err := db.QueryRowContext(ctx, query, projectID).Scan(
|
||||
&data.UUID,
|
||||
&data.Name,
|
||||
&data.Slug,
|
||||
&data.Description,
|
||||
&data.CreatedBy,
|
||||
&data.ClosedAt,
|
||||
&data.CreatedAt,
|
||||
); err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return nil, ErrNotFound
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
// UpdateProject change editable project data
|
||||
func UpdateProject(ctx context.Context, db *sql.DB, data *ProjectData) error {
|
||||
query := `
|
||||
UPDATE projects
|
||||
SET
|
||||
name = $2,
|
||||
description = $3,
|
||||
updated_at = $4,
|
||||
updated_by = $5
|
||||
WHERE uuid = $1;`
|
||||
if _, err := db.Query(query, data.UUID, data.Name, data.Description, data.UpdatedAt, data.UpdatedBy); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user