better api paths

This commit is contained in:
samantha42
2026-03-21 09:25:02 +01:00
parent abc17d92dd
commit 3f203178b2
7 changed files with 166 additions and 84 deletions

View File

@@ -3,7 +3,6 @@ package handler
import (
"encoding/json"
"net/http"
"strconv"
"strings"
"Engine/internal/model"
@@ -39,12 +38,8 @@ func (h *BudgetHandler) Create(w http.ResponseWriter, r *http.Request) {
writeJSON(w, http.StatusCreated, budget)
}
// PUT /api/v1/budgets/update
func (h *BudgetHandler) Update(w http.ResponseWriter, r *http.Request) {
id, err := strconv.Atoi(r.PathValue("id"))
if err != nil {
writeError(w, http.StatusBadRequest, "invalid id")
return
}
var req model.UpdateBudgetRequest
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
writeError(w, http.StatusBadRequest, "invalid request body")
@@ -57,7 +52,7 @@ func (h *BudgetHandler) Update(w http.ResponseWriter, r *http.Request) {
return
}
budget, err := h.svc.Update(r.Context(), id, req)
budget, err := h.svc.Update(r.Context(), req)
if err != nil {
writeError(w, http.StatusInternalServerError, err.Error())
return
@@ -65,13 +60,16 @@ func (h *BudgetHandler) Update(w http.ResponseWriter, r *http.Request) {
writeJSON(w, http.StatusOK, budget)
}
// DELETE /api/v1/budgets/delete
func (h *BudgetHandler) Delete(w http.ResponseWriter, r *http.Request) {
id, err := strconv.Atoi(r.PathValue("id"))
if err != nil {
var req struct {
ID int `json:"id"`
}
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
writeError(w, http.StatusBadRequest, "invalid id")
return
}
if err := h.svc.Delete(r.Context(), id); err != nil {
if err := h.svc.Delete(r.Context(), req); err != nil {
writeError(w, http.StatusInternalServerError, err.Error())
return
}

View File

@@ -20,7 +20,7 @@ func NewReferenceHandler(repo *database.ReferenceRepo) *ReferenceHandler {
// ── Departments ───────────────────────────────────────────────────────────────
// POST /api/v1/departments
// POST /api/v1/department/create
// PUT /api/v1/departments/{id} (same body, id from path)
func (h *ReferenceHandler) CreateDepartment(w http.ResponseWriter, r *http.Request) {
var req database.Department
@@ -47,7 +47,7 @@ func (h *ReferenceHandler) CreateDepartment(w http.ResponseWriter, r *http.Reque
writeJSON(w, http.StatusCreated, dept)
}
// GET /api/v1/departments
// GET /api/v1/department/list
func (h *ReferenceHandler) ListDepartments(w http.ResponseWriter, r *http.Request) {
depts, err := h.repo.ListDepartments(r.Context())
if err != nil {
@@ -60,8 +60,16 @@ func (h *ReferenceHandler) ListDepartments(w http.ResponseWriter, r *http.Reques
writeJSON(w, http.StatusOK, depts)
}
// DELETE /api/v1/departments/{id}
// DELETE /api/v1/department/delete
func (h *ReferenceHandler) DeleteDepartment(w http.ResponseWriter, r *http.Request) {
var req struct {
ID int `json:"id"`
}
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
writeError(w, http.StatusBadRequest, fmt.Sprintf("invalid body: %v", err))
return
}
id, err := pathID(r, "id")
if err != nil {
writeError(w, http.StatusBadRequest, "invalid id")