fix sql and getIncident
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-03-26 10:11:05 +11:00
parent c1fdc1f9a6
commit 63c534869e
4 changed files with 52 additions and 29 deletions

View File

@@ -1,6 +1,7 @@
-- +goose Up -- +goose Up
-- +goose StatementBegin -- +goose StatementBegin
ALTER TABLE worknotes ADD COLUMN created_at DATETIME DEFAULT CURRENT_TIMESTAMP; ALTER TABLE worknotes ADD COLUMN created_at DATETIME;
UPDATE worknotes SET created_at = CURRENT_TIMESTAMP WHERE created_at IS NULL;
-- +goose StatementEnd -- +goose StatementEnd
-- +goose Down -- +goose Down

View File

@@ -62,8 +62,8 @@ GROUP BY incidents.id;
-- name: CreateWorkNote :one -- name: CreateWorkNote :one
INSERT into worknotes ( INSERT into worknotes (
"incident_number", "note" "incident_number", "note", "created_at"
) VALUES( ) VALUES(
?, ? ?, ?, CURRENT_TIMESTAMP
) )
RETURNING *; RETURNING *;

View File

@@ -132,9 +132,9 @@ func (q *Queries) CreateIncoming(ctx context.Context, arg CreateIncomingParams)
const createWorkNote = `-- name: CreateWorkNote :one const createWorkNote = `-- name: CreateWorkNote :one
INSERT into worknotes ( INSERT into worknotes (
"incident_number", "note" "incident_number", "note", "created_at"
) VALUES( ) VALUES(
?, ? ?, ?, CURRENT_TIMESTAMP
) )
RETURNING id, incident_number, note, created_at RETURNING id, incident_number, note, created_at
` `

View File

@@ -1,6 +1,7 @@
package handler package handler
import ( import (
"context"
"database/sql" "database/sql"
"encoding/json" "encoding/json"
"errors" "errors"
@@ -43,24 +44,14 @@ func (h *Handler) GetIncident(w http.ResponseWriter, r *http.Request) {
if number != "" { if number != "" {
h.Logger.Debug("GetIncident called for specific incident number", "number", number) h.Logger.Debug("GetIncident called for specific incident number", "number", number)
incResult, err := h.Database.Queries().GetIncident(ctx, nullStr(number)) b, err := h.getSingleIncident(number, ctx)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
h.Logger.Debug("No incident record found", "number", number)
} else {
h.Logger.Error("Unable to query database for incident number", "error", err)
//return err
}
}
b, err := json.Marshal(incResult)
if err != nil { if err != nil {
h.Logger.Error("Unable to convert database record into json", "error", err)
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusInternalServerError) w.WriteHeader(http.StatusInternalServerError)
json.NewEncoder(w).Encode(map[string]string{ json.NewEncoder(w).Encode(map[string]string{
"status": "ERROR", "status": "ERROR",
"message": fmt.Sprintf("Unable to convert database record into json: '%s'", err), "message": fmt.Sprintf("%s", err),
}) })
return return
} }
@@ -145,24 +136,14 @@ func (h *Handler) GetIncident(w http.ResponseWriter, r *http.Request) {
id := parts[5] // Extract {id} id := parts[5] // Extract {id}
h.Logger.Debug("GetIncident called for specific incident", "id", id) h.Logger.Debug("GetIncident called for specific incident", "id", id)
incResult, err := h.Database.Queries().GetIncident(ctx, nullStr(id)) b, err := h.getSingleIncident(id, ctx)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
h.Logger.Debug("No incident record found", "id", id)
} else {
h.Logger.Error("Unable to query database for incident number", "error", err)
//return err
}
}
b, err := json.Marshal(incResult)
if err != nil { if err != nil {
h.Logger.Error("Unable to convert database record into json", "error", err)
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusInternalServerError) w.WriteHeader(http.StatusInternalServerError)
json.NewEncoder(w).Encode(map[string]string{ json.NewEncoder(w).Encode(map[string]string{
"status": "ERROR", "status": "ERROR",
"message": fmt.Sprintf("Unable to convert database record into json: '%s'", err), "message": fmt.Sprintf("%s", err),
}) })
return return
} }
@@ -183,3 +164,44 @@ func (h *Handler) GetIncident(w http.ResponseWriter, r *http.Request) {
// TODO - provide an incident list if necessary // TODO - provide an incident list if necessary
} }
func (h *Handler) getSingleIncident(number string, ctx context.Context) ([]byte, error) {
var b []byte
incResult, err := h.Database.Queries().GetIncident(ctx, nullStr(number))
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
h.Logger.Debug("No incident record found", "number", number)
} else {
h.Logger.Error("Unable to query database for incident number", "error", err)
return b, err
}
}
// convert from database resposne to expected json format
r := models.SingleIncidentResponse{
Number: incResult.IncidentNumber.String,
SysID: incResult.SysID.String,
IncidentState: strconv.FormatInt(incResult.State.Int64, 10),
State: strconv.FormatInt(incResult.State.Int64, 10),
Impact: strconv.FormatInt(incResult.Impact.Int64, 10),
Urgency: strconv.FormatInt(incResult.Urgency.Int64, 10),
ShortDescription: incResult.ShortDescription.String,
AssignedTo: incResult.AssignedTo.String,
Category: incResult.Category.String,
Subcategory: incResult.SubCategory.String,
// TODO
}
wrappedList := models.MultipleIncidentResponse{
Result: []models.SingleIncidentResponse{r},
}
prettyPrint(wrappedList)
b, err = json.Marshal(wrappedList)
if err != nil {
h.Logger.Error("Unable to convert database record into json", "error", err)
return b, err
}
return b, nil
}